使用win32在UWP中自定义驱动程序接口

使用win32在UWP中自定义驱动程序接口

问题描述:

Windows 10使用CreateFile和DeviceIoControl调用自定义设备的IoT文档。 https://developer.microsoft.com/en-us/windows/iot/Samples/CustomDeviceAccessor使用win32在UWP中自定义驱动程序接口

这与Windows 10中的企业应用程序相同吗? 我们拥有的是基于Cypress Fx2的定制USB硬件。我们也有使用共享内存进行一些非常有效的同步传输的自定义驱动程序。所有的Win32都可以正常工作。现在我们想转移到UWP。 我们更喜欢win32 API的编程模型到Windows.Devices.Usb,因为后者需要我们多年的移植。我们还需要共享内存和等时同步支持的性能。 允许我们的设备通过Win32进行访问,如Windows IoT中所记录的那样将非常有益。 物联网中推荐的这些指导方针似乎在桌面上无法使用。我无法通过修改安全性注册表项来授予对AppContainer进程的访问权限,并且CreateFile因“访问被拒绝”而失败。 我错过了什么或者CreateFile在UWP中完全被封锁了,即使对于企业来说也是如此? TIA 拉维

+0

*“企业应用程序”*不是我熟悉的术语。您是指通过企业商店发布的UWP/Windows Store应用程序吗? – IInspectable

+0

私人,侧面加载的应用程序可能更合适? – Ravi

使用平台/ Invoke的我只是使用的Win32 API,以及的CreateFile DeviceIoControl的从VB.net UWP在Windows 10桌面使用我们自己的WDM驱动程序来访问我们的定制赛普拉斯FX2基于USB设备成功。

方法1记录在https://developer.microsoft.com/en-us/windows/iot/Samples/CustomDeviceAccessor 也适用于桌面。 这里是命令提示符的帧抓取,使注册表设置授予对我们硬件的“AppContainer进程”的访问权限!


C:\窗口\ system32>的schtasks /删除/ TN DeviceAC/F ERROR:系统无法找到指定的文件。

C:\ WINDOWS \ system32> schtasks/create/RU SYSTEM/SC ONCE/TN DeviceAC/TR“reg import c:\ data \ deviceac.reg”/ ST 00:00 警告:任务可能无法运行,因为/ ST比当前时间早。 成功:计划的任务“DeviceAC”已成功创建。

C:\ WINDOWS \ system32> schtasks/run/tn DeviceAC/I/Hresult SUCCESS:试图运行计划任务“DeviceAC”。

C:\ WINDOWS \ SYSTEM32>的schtasks /查询/ TN DeviceAC

文件夹:\ TASKNAME下次运行时间状态

================ ======================== ====================== ==== ===========

DeviceAC N/A就绪

C:\窗口\ system32> REG查询“HKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \枚举\ USB \ VID_0547 & PID_BC02 \ 6 & 59cb9c4 4"/V安全

HKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \枚举\ USB \ VID_0547 & PID_BC02 \ 6 & 59cb9c4 安全REG_BINARY 010004900000000000000000000000001400000002006000040000000000140000000010010100000000000512000000000018000000001001020000000000052000000020020000000014000000001001010000000000050B0000000000180000000010010200000000000F0200000001000000

C:\窗口\ system32> schtasks/delete/tn DeviceAC/f SUCCESS:计划的任务“DeviceAC”成功删除。


CreateFile和DeviceIoControl像魅力一样工作。我们有干净快速和同步的Win32代码。 无垃圾一样

task <UINT32> CUsbDev::getDeviceInfo() 
{ 

return create_task(DeviceInformation::FindAllAsync(UsbDevice::GetDeviceSelector(0x0547, 0xAB02))) 
    .then([this](DeviceInformationCollection^ deviceInformationCollection) -> UINT32 
{ 
    if (deviceInformationCollection->Size > 0) 
    { 
     DeviceInformation^ di = deviceInformationCollection->GetAt(0); 
     String^ s = di->Id; 
     create_task(UsbDevice::FromIdAsync(s)) 
      .then([this, di](UsbDevice^ usbDevice) 
     { 
      String^ s; 
      if (usbDevice != nullptr) 
      { 
       UsbDeviceDescriptor^ devDesc = usbDevice->DeviceDescriptor; 
       s = devDesc->VendorId.ToString(); 
       s += devDesc->ProductId.ToString(); 
       return 0; 
      } 
      else 
      { 
       return 1; 
      } 
     }); 
    } 
    else 
    { 
     return 10; 
    } 
}); 

}



虽然第一种方法是对于开发商这下方法应该是生产 相同的注册表设置的有用通过一个.inf是可能的声明在此链接中提到 “在DDINSTALL.HW部分指定对特定设备的访问控制”

http://www.osronline.com/article.cfm?article=508


灭迹:像C++/CX扩展 如果我们的好朋友比尔是在事务的掌舵人,他根本就不会允许垃圾已经走在了首位。什么样的计算机编程是为每个程序创建一个线程(或任务)。孩子们正在用C++/CX代码看着帽子和装饰。一个干净的C++被赋予了这一代,他们给下一代是不可原谅的。比尔应该可以看到他的公司今天生成的代码。 现在他们正在使用C++/WinRt来清理垃圾。 我相信UWP的核心是普通的Win32 C(C++)代码。现在是时候让一个完整的圈子让VB6直接,干净而高效地访问UWP代码。

Ravi

+0

有关如何在UWP中从vb.net调用win32的一些示例代码,请参阅[从vb调用Direct 3D](http://stackoverflow.com/questions/2006719/directx-with-vb-net/43110071#43110071) – Ravi

+1

这是一个问答网站。这不是随机咆哮的地方。 – IInspectable

+0

当你编辑你的.inf文件时,不要忘记再次测试它的签名,否则什么都不能正常工作...... – Ravi