查找DeviceInfo的DeviceInterface(SP_DEVICE_INTERFACE_DATA)(SP_DEVINFO_DATA)

时间:2014-05-12 09:48:23

标签: winapi file-io printing

我正在尝试使用c-function CreateFile与USB打印机通信,因此我需要设备路径。我知道我可以通过SetupDiEnumDeviceInterfaces和SetupDiGetDeviceInterfaceDetail获取设备路径,但是对于SetupDiEnumDeviceInterfaces,我需要将InterfaceClassGuid作为第三个参数,我不知道。

我目前的做法是:

  1. 具有“用户友好”打印机名称的OpenPrinter
  2. GetPrinterDataEx带有“PnpData”和“DeviceInstanceId”作为参数2和3,它给出了DeviceInstanceId
  3. ClosePrinter
  4. SetupDiCreateDeviceInfoList(带有NULL参数)
  5. 使用在步骤2中获取的DeviceInstanceId的SetupDiOpenDeviceInfo。现在我有打印机的DeviceInfo
  6. CM_Get_Parent与打印机的DevInst(在步骤5中获得)。
  7. 父母的CM_Get_Device_ID(在步骤6中获得)
  8. SetupDiOpenDeviceInfo,其中包含在步骤7中获取的设备ID。现在我有了USB接口的DeviceInfo(但不是接口本身),而且差不多就在最后了。
  9. 唯一缺少的是在拥有SP_DEVINFO_DATA时获取设备接口(SP_DEVICE_INTERFACE_DATA)。另一种方式很简单:拥有SP_DEVICE_INTERFACE_DATA,我可以调用SetupDiGetDeviceInterfaceDetail,所以基本上我正在寻找SetupDiGetDeviceInterfaceDetail的相反功能。

    如果可以在不必知道InterfaceClassGuid的情况下枚举所有接口,我可以遍历接口列表并查找指向我的设备的接口,但不幸的是,这是不可能的。

    以下文章对我的方式非常有帮助: Figuring which printer name corresponds to which device IDhttp://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/51449be7-a4fa-476b-8cd2-b8933bfa3294/enumerate-multifunction-printer-in-vc?forum=wdk

    我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

已经有一段时间了,所以我想你已经找到了答案。无论如何,对于可能稍后会发现此问题的人,我会回答它。我相信答案是调用SetupDiEnumDeviceInterfaces传递SP_DEVINFO_DATA作为第二个参数。来自文档:

  

指向SP_DEVINFO_DATA的指针   用于指定设备信息元素的结构   DeviceInfoSet。   此参数是可选的,可以为NULL。如果这个参数是   指定,SetupDiEnumDeviceInterfaces将枚举限制为   指定设备支持的接口。如果这   参数为NULL,重复调用SetupDiEnumDeviceInterfaces   返回有关与all关联的接口的信息   DeviceInfoSet中的设备信息元素。这个指针是   通常由SetupDiEnumDeviceInfo返回。