我真的很感激winUSB的一些帮助。 我按照msdn网站
中列出的所有步骤进行了操作http://msdn.microsoft.com/en-us/library/windows/hardware/hh450799(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/hardware/ff540174(v=vs.85).aspx
我尝试在Windows 7上使用Visual Studio 2010运行它。即使它编译没有错误,我也无法传递函数 SetupDiEnumDeviceInfo,它出错了(我认为错误#259)。 我不知道如何传递这个错误。
但是我不确定这个过程中的几个步骤:
谢谢,
- 鲁迪
答案 0 :(得分:0)
我大约2年前开发了一个应用程序,我需要使用WinUSB,它在我脑海中并不新鲜,但现在看着我的代码我可以看到我确实使用了这个函数:SetupDiEnumDeviceInfo,但我记得它不是对我来说是一个问题。
您可能知道,WinUSB是Windows的API,您可以使用USB硬件进行通信。硬件必须已经有了它的驱动程序,因此,您必须知道设备的GUID
回答你的步骤:
1.签名目录是从inf生成的.cat文件,您可以使用inf2cat.exe对其进行生成,它位于您的计算机中。这只是签署winusb驱动程序的一个步骤。要签名,你需要提交你的.inf和.cat文件的WHQL(windows硬件质量实验室)http://www.microsoft.com/whdc/whql/,这一点并不重要,我从未签署过我的WinUSB驱动程序,它在x64机器上工作时带有不雅的警告说我的WinUSB驱动程序可能很危险(尽管它不是!)
2.您正在开发的应用程序不需要知道.inf文件的位置,.inf文件是用于安装WinUSB驱动程序,应用程序将通过驱动程序后的设备的GUID号与驱动程序通信。安装正确。以下是在正确安装WinUSB驱动程序后连接到设备所需的代码的一部分。
LPGUID _lpGuid = (LPGUID) malloc (sizeof(GUID));
HRESULT result = CLSIDFromString (L"{A54E04AD-E06A-4A03-95BB-25AACC4E6CCA}", _lpGuid);
...
bResult = SetupDiEnumDeviceInterfaces(deviceInfo,
NULL,
_lpGuid,
0,
&interfaceData); //If the function succeeds
//the return value is nonzero.
// [1]
deviceInfo = SetupDiGetClassDevs(_lpGuid,
NULL, NULL,
DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
if (deviceInfo == INVALID_HANDLE_VALUE)
{
//lblDispStatus->Caption = "Erro 1 - deviceInfo";
return false;
}
// [2]
interfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
bResult = SetupDiEnumDeviceInterfaces(deviceInfo,
NULL,
_lpGuid,
0,
&interfaceData); //If the function succeeds
//the return value is nonzero.
InterfaceData作为参考传递,因此您可以调用下一个函数,即SetupDiGetDeviceInterfaceDetail
3.谁开发了驱动程序?他必须知道你需要的GUID。
我从WinUSB得到的所有信息都是在可怜的WinUSB文档中,你需要大量的patiante来阅读他们所有杂乱的信息。而对于你的不幸,在我的脑海中并不新鲜,我知道,我必须深入了解这个主题,以帮助你更多。
此页面看起来很重要,请看一下:http://msdn.microsoft.com/en-us/library/windows/hardware/ff540174%28v=vs.85%29.aspx