【问题标题】:winUSB error (possible .inf issue)winUSB 错误(可能是 .inf 问题)
【发布时间】:2013-01-25 14:58:56
【问题描述】:

我非常感谢有关 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

我尝试使用 Visual Studio 2010 在 Windows 7 上运行它。即使它编译没有错误,我也无法通过该函数 SetupDiEnumDeviceInfo,它出错了(我认为是错误 #259)。 我不知道如何传递这个错误。

但是我不确定过程中的几个步骤:

  1. msdn 与“软件包的签名目录文件。此文件是在 x64 版本上安装 WinUSB 所必需的”有关什么?什么是签名目录包?我该如何设置?
  2. 它还谈到了制作一些目录(例如,c:\UsbDevice)来放置.inf 文件!但是我的VS项目怎么知道我指向c:\UsbDevice,又怎么知道“.inf”文件的名称应该是什么?我应该怎么称呼.inf文件?以及如何指向项目给它?
  3. .inf 文件中有两个 GUID 编号。我可以通过设备管理器获取类 GUID 编号。但是如何设置设备接口 GUID? 请帮忙。 我得到的错误是否可能是因为我没有正确设置以下项目之一?

谢谢,
--鲁迪

【问题讨论】:

    标签: windows visual-studio-2010 visual-c++ winusb


    【解决方案1】:

    大约 2 年前,我开发了一个需要使用 WinUSB 的应用程序,我对它并不新鲜,但现在查看我的代码,我可以看到我确实使用了这个函数:SetupDiEnumDeviceInfo,但我记得它不是对我来说是个问题。

    您可能知道,WinUSB 是 Windows 的 API,用于与 USB 硬件进行通信。硬件必须已经有它的驱动程序,所以,你必须知道你的设备的 GUID

    回答您的步骤:
    1.签名目录是从inf生成的.cat文件,你可以使用inf2cat.exe生成它,它在你机器的某个位置。这只是签署您的 winusb 驱动程序的一个步骤。要对其进行签名,您需要为 WHQL(Windows 硬件质量实验室)http://www.microsoft.com/whdc/whql/ 提交您的 .inf 和 .cat 文件,目前这并不重要,我从未签署过我的 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 文档中找到,你需要大量的专利才能阅读他们所有的混乱信息。对于你的不幸,我的脑海中并不新鲜,知道吗,我必须深入研究这个主题以帮助你更多。

    这个页面对你来说似乎很重要,看看这个:http://msdn.microsoft.com/en-us/library/windows/hardware/ff540174%28v=vs.85%29.aspx

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 2015-03-29
      • 2011-07-22
      • 1970-01-01
      • 2017-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多