现在的位置: 首页 > 综合 > 正文

Windows下USB磁盘开发系列四:SetupDiEnumDeviceInterfaces()返回ERROR_NO_MORE_ITEMS 259错误代码的原因

2014年01月15日 ⁄ 综合 ⁄ 共 756字 ⁄ 字号 评论关闭

在调用API SetupDiEnumDeviceInterfaces()查询USB设备接口的时候,遇到了259的错误代码:ERROR_NO_MORE_ITEMS。开始不得其解,后来仔细察看了相关的msdn,发现是我调用SetupDiGetClassDevs()的参数使用错了。

定义如下:

HDEVINFO SetupDiGetClassDevs(
  _In_opt_  const GUID *ClassGuid,
  _In_opt_  PCTSTR Enumerator,
  _In_opt_  HWND hwndParent,
  _In_      DWORD Flags
);

第一个参数的说明如下:

ClassGuid [in, optional]

A pointer to the GUID for a device setup class or a
device interface class
. This pointer is optional and can be NULL. For more information about how to set ClassGuid, see the following Remarks section.

我开始一直使用下面的方式获取设备句柄:

hDevInfo = SetupDiGetClassDevs(&GUID_DEVCLASS_USB, 0, 0, DIGCF_PRESENT); 

然后调用的时候总是返回失败,使用GetLastError()返回259。

正确的做法是要用一个device interface class来获取设备句柄,将上面的调用代码改为:

hDevInfo = SetupDiGetClassDevs(&GUID_DEVINTERFACE_DISK, 0, 0, DIGCF_PRESENT|DIGCF_DEVICEINTERFACE); 

再调用numDeviceInterfaces()就可以了。

 

抱歉!评论已关闭.