WORD GetDevicesNumber(const GUID* DeviceGUID,PDEVICES device){
HDEVINFO hdev;
SP_DEVICE_INTERFACE_DATA did;
PSP_DEVICE_INTERFACE_DETAIL_DATA pdidd;
DWORD cbRequired,idev; hdev=SetupDiGetClassDevs(DeviceGUID,0,0,DIGCF_PRESENT|DIGCF_DEVICEINTERFACE);
if (hdev != INVALID_HANDLE_VALUE) {
did.cbSize = sizeof(did);
for(idev=0;idev < 100; idev++) {
SetLastError(ERROR_NO_MORE_ITEMS);
if(SetupDiEnumDeviceInterfaces(hdev, 0, DeviceGUID, idev, &did)) {
if(device!=NULL){
cbRequired = 0;
if(SetupDiGetDeviceInterfaceDetail(hdev, &did, 0, 0, &cbRequired, 0)||GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
pdidd = (PSP_DEVICE_INTERFACE_DETAIL_DATA)LocalAlloc(LPTR, cbRequired);
if (pdidd) {
pdidd->cbSize = sizeof(*pdidd);
if(SetupDiGetDeviceInterfaceDetail(hdev, &did, pdidd, cbRequired, &cbRequired, 0)) {
strcpy(device[idev].DevicePath,pdidd->DevicePath);
}
LocalFree(pdidd);
}
}
}
}else {
if(GetLastError() == ERROR_NO_MORE_ITEMS)
break;
}
}
SetupDiDestroyDeviceInfoList(hdev);
}
return idev;
}