![](/img/trans.png)
[英]WinUSB application or user-mode driver as a filter driver for USB analysis/sniffer/trending
[英]Install winusb driver from user application
請任何人直接給我實現Windows的下一個功能。
我有連接到PC的USB設備(它是JTAG編程器。)我知道此硬件的VID和PID。 我需要:
1檢查此硬件使用哪種類型的驅動程序(檢測winusb驅動程序就足夠了。也許我需要閱讀注冊表?)
2如果驅動程序不是winusb,則需要從我的應用程序為此USB設備安裝winusb驅動程序。
分配給設備的當前驅動程序存儲在注冊表中,因此您可以從那里直接讀取它。 但是,最好使用Microsoft提供的API SetupAPI。 調用的函數是SetupDiGetDeviceRegistryProperty ,第三個參數應該是SPDRP_SERVICE
。 這將以字符串形式返回驅動程序的名稱。 請注意,在獲得所有需要調用SetupDiGetDeviceRegistryProperty的信息之前,您將需要調用其他幾個SetupAPI函數。
我沒有嘗試過,但是libwdi具有將WinUSB安裝到設備節點上的功能。 它還可能具有獲取當前驅動程序的功能,因此在花太多時間學習SetupAPI之前,應嘗試使用它。 微軟的devcon實用程序(現在是開源的)可能是另一個選擇。
不知道正在做什么的細節,我質疑您是否真的需要這樣做。 向用戶提供簽名的驅動程序包,並指示他們使用設備管理器中的“更新驅動程序軟件...”選項將其應用於特定設備,可能會更簡單。
我完成了任務的第一部分。
#ifdef Q_OS_WIN
DEFINE_GUID(GUID_DEVCLASS_WINUSB,0x88BAE032,0x5A81,0x49f0,
0xBC,0x3D,0xA4,0xFF,0x13,0x82,0x16,0xD6);
#endif
bool WinUSB::isWinUsbDriver(quint16 vid, quint16 pid)
{
#ifndef Q_OS_WIN
Q_UNUSED(vid);
Q_UNUSED(pid);
return true;
#else
HDEVINFO deviceInfoSet;
GUID *guidDev = (GUID*) &GUID_DEVCLASS_WINUSB;
deviceInfoSet = SetupDiGetClassDevs(guidDev, NULL, NULL, DIGCF_PRESENT | DIGCF_PROFILE);
DWORD buffersize =4000;
TCHAR buffer [buffersize];
int memberIndex = 0;
bool retval = false;
QString vidPid;
vidPid = "VID_" + QString("%1").arg(vid,4,16,QChar('0')) + "&";
vidPid += "PID_" + QString("%1").arg(pid,4,16,QChar('0'));
while (true)
{
SP_DEVINFO_DATA deviceInfoData;
ZeroMemory(&deviceInfoData, sizeof(SP_DEVINFO_DATA));
deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
if (SetupDiEnumDeviceInfo(deviceInfoSet, memberIndex, &deviceInfoData) == FALSE) {
if (GetLastError() == ERROR_NO_MORE_ITEMS) {
break;
}
}
DWORD nSize=0 ;
SetupDiGetDeviceInstanceId (deviceInfoSet, &deviceInfoData, buffer, sizeof(buffer), &nSize);
buffer [nSize] ='\0';
QString str = QString::fromWCharArray(buffer);
if (str.indexOf(vidPid) >= 0) {
retval = true;
break;
}
memberIndex++;
}
if (deviceInfoSet) {
SetupDiDestroyDeviceInfoList(deviceInfoSet);
}
return retval;
#endif
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.