SetupAPI を使用して Windows XP で USB デバイスを列挙するコードがあります。
HDEVINFO hDevInfo = SetupDiGetClassDevs( &_DEVINTERFACE_USB_DEVICE, 0, 0, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);
for (DWORD i = 0; ; ++i)
{
SP_DEVINFO_DATA devInfo;
devInfo.cbSize = sizeof(SP_DEVINFO_DATA);
BOOL succ = SetupDiEnumDeviceInfo(hDevInfo, i, &devInfo);
if (GetLastError() == ERROR_NO_MORE_ITEMS)
break;
if (!succ) continue;
DWORD devClassPropRequiredSize = 0;
succ = SetupDiGetDeviceRegistryProperty(hDevInfo, &devInfo, SPDRP_COMPATIBLEIDS, NULL, NULL, 0, &devClassPropRequiredSize);
if (!succ)
{
// This shouldn't happen!
continue;
}
}
以前は何年も機能していましたが、今でFALSE
はSetupDiGetDeviceRegistryProperty
、最後のエラーは「システムコールに渡されたデータ領域が小さすぎます」です。私の呼び出しパラメーターは、この関数のドキュメントに対応しているようです: http://msdn.microsoft.com/en-us/library/windows/hardware/ff551967(v=vs.85).aspx
何が問題なのですか?