在UWP C ++应用程序中找不到DeviceIOControl API

时间:2018-10-04 15:33:00

标签: windows uwp ioctl desktop-bridge wdm

我想转换与内核模式驱动程序(WDM驱动程序)交互的现有应用程序代码。对于IOCTL,我正在使用DeviceIoControl API。

为了将我的应用移植到UWP,我使用以下链接:https://docs.microsoft.com/en-us/cpp/porting/how-to-use-existing-cpp-code-in-a-universal-windows-platform-app?view=vs-2017

按照链接中所述对项目属性进行更改后,由于找不到DeviceIoControl标识符,我遇到了错误。这是我面临的问题。是否有可用的示例应用程序/ API代替DeviceIoControl?

2 个答案:

答案 0 :(得分:1)

您不能在UWP应用中使用DeviceIOControl。您可以看到受支持的Win32 and COM API的列表,但这不是其中之一。 UWP应用程序的安全模型受到更严格的限制,使其更难以用作恶意软件矢量,因此您无法与任意内核模式驱动程序进行交互。

在特定情况下,您可以启用自定义功能并使用Windows.Devices.Custom API。参见CustomCapability sample。通常用于硬件支持。参见Hardware Support App (HSA): Steps for Driver Developers

答案 1 :(得分:1)

实际上,我们在RS5的允许列表中添加了DeviceIoControl。您需要先将HANDLE发送到设备,这将需要进行两次更改

  • 调用CreateFileFromApp而不是CreateFile
  • 正在打开的设备需要授予对应用容器的访问权限。如果 您拥有驱动程序,并且它是一个自定义设备接口,您可以使用 自定义上限。

如果您要访问内置的设备定义的设备界面,则无法直接获得该设备的手柄。如果您的MSR访问驱动程序是pnp驱动程序,则可以使用上面的指南。