【问题标题】:Access is denied when trying to CustomDevice.FromIdAsync using a Software KMDF Driver尝试使用软件 KMDF 驱动程序访问 CustomDevice.FromIdAsync 时访问被拒绝
【发布时间】:2020-03-21 16:44:51
【问题描述】:

我已经准备好一个 KMDF 驱动程序,供 UWP 使用 MSDN 中的指南(HSA for DriverHSA for UWP)访问

我使用的 UWP 应用程序是在 Universal Windows Samples 下找到的 CustomCapability 示例 KMDF 是一个示例驱动程序,仅实现了DriverEntry, Unload, and EvtDeviceAdd。此外,驱动程序已安装,并且在设备管理器中可见,但没有插入实际/外部设备。

在 UWP 应用程序中,我可以从设备观察程序中看到示例驱动程序。但是,当尝试使用以下方式连接/打开驱动程序时:

var device = await CustomDevice.FromIdAsync(Id, DeviceAccessMode.Read, DeviceSharingMode.Exclusive);

抛出异常System.UnauthorizedAccessException' in System.Private.CoreLib.ni.dll 如下图:

我已经匹配了需要跨两个应用程序获取的所需信息,并且我已经尝试了这个,假设SCCD 不需要签名,如果它只是在开发模式下运行。

除了SCCD的配置,我也试过为驱动的类接口添加<DeviceCapability>,以及为lowLevel设备,但似乎没有做任何与异常相关的事情。

除了 SCCD 和 INF 文件之外,我没有看到任何其他地方存在问题,但我想展示它们以防我遗漏了什么:

SCCD:

<?xml version="1.0" encoding="utf-8"?>
<CustomCapabilityDescriptor xmlns="http://schemas.microsoft.com/appx/2016/sccd" xmlns:s="http://schemas.microsoft.com/appx/2016/sccd">
    <CustomCapabilities>
        <CustomCapability Name="microsoft.firmwareRead_cw5n1h2txyewy"></CustomCapability> <!-- this one is not used by the way -->
        <CustomCapability Name="microsoft.hsaTestCustomCapability_q536wpkpf5cy2"></CustomCapability> 
    </CustomCapabilities>
    <AuthorizedEntities>
        <AuthorizedEntity AppPackageFamilyName="Microsoft.SDKSamples.CustomCapability.CS_8wekyb3d8bbwe" CertificateSignatureHash="1db5ceeaa4c97c6f6e91c0ce76830361776c64635ecfecdb2f157ca818ae3b69"></AuthorizedEntity>
  </AuthorizedEntities>
    <Catalog>xxxx</Catalog>
</CustomCapabilityDescriptor>

INF Strings and Interface section:

[Strings]
SPSVCINST_ASSOCSERVICE= 0x00000002
ManufacturerName="Samples" ;TODO: Replace with your manufacturer name
ClassName="Samples" ; TODO: edit ClassName
DiskName = "Samples_Driver Installation Disk"
Samples_Driver.DeviceDesc = "Samples_Driver Device"
Samples_Driver.SVCDESC = "Samples_Driver Service"
GUID_DEVINTERFACE_OSRUSBFX2="573E8C73-0CB4-4471-A1BF-FAB26C31D384"
DEVPKEY_DeviceInterface_UnrestrictedAppCapabilities="026e516e-b814-414b-83cd-856d6fef4822"
CustomCapability="microsoft.hsaTestCustomCapability_q536wpkpf5cy2"

;
;----------------- Interface Section ----------------------
;
[WDMPNPB003_Device.NT.Interfaces] 
AddInterface= {%GUID_DEVINTERFACE_OSRUSBFX2%},,AddInterfaceSection 

[AddInterfaceSection] 
AddProperty= AddInterfaceSection.AddProps 

[AddInterfaceSection.AddProps] 
; DEVPKEY_DeviceInterface_UnrestrictedAppCapabilities 
{%DEVPKEY_DeviceInterface_UnrestrictedAppCapabilities%}, 8, 0x2012,, %CustomCapability%

【问题讨论】:

  • 您好,在SCCD文件中,您有两个CustomCapability,您可以尝试在SCCD文件中添加一个AuthorizedEntity。如果还是不行,可以按照这个document排查
  • 我添加了另一个AuthorizedEntity,但与现有CertificateSignatureHash 相同(从uwp 应用程序证书生成的SHA-256 签名哈希),它似乎不起作用。我也尝试了该链接中提到的故障排除方法,确认我的PackageFamilyName 是正确的,但也没有解决问题。

标签: uwp uwp-xaml inf kmdf


【解决方案1】:

我设法在 INF 文件上找到了问题。标记为Interface Section 的部分直接复制自Microsoft 的HSA for Drivers 指南。所做的修改只是那些明确写在指南中的修改。

下面的INF sn -p 描述了接口部分的起点:

[WDMPNPB003_Device.NT.Interfaces] 
AddInterface= {zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz},,AddInterfaceSection 

指南没有明确提及的是,我们必须将 WDMPNPB003_Device 替换为您自己的 Driver_name/Root namespace

一个小错误,但很可能是驱动程序开发新手会遇到的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    相关资源
    最近更新 更多