在调用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()就可以了。