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

2014-11-24 02:24:15 · 作者: · 浏览: 1
在调用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()就可以了。