2017-04-10 64 views
1

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

回答

2

使用平臺/ 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

相關問題