#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <devguid.h>
#include <regstr.h>
#include <setupapi.h>
BOOL Test(void)
{
BOOL ret;
DWORD dwIndex;
DWORD dwSize;
DWORD dwRegType;
BOOL bRet;
HDEVINFO hDevInfo;
SP_DEVINFO_DATA sDevInfo;
char strMessage[8192];
char *pszName;
hDevInfo = SetupDiGetClassDevs(NULL, 0, 0, DIGCF_PRESENT | DIGCF_ALLCLASSES);
if(hDevInfo == INVALID_HANDLE_VALUE) return FALSE;
ret = FALSE;
dwIndex = 0;
ZeroMemory(&sDevInfo, sizeof(SP_DEVINFO_DATA));
sDevInfo.cbSize = sizeof(SP_DEVINFO_DATA);
while(1){
bRet = SetupDiEnumDeviceInfo(hDevInfo, dwIndex++, &sDevInfo);
if(bRet == FALSE) break;
ret = FALSE;
dwSize = 0;
bRet = SetupDiGetDeviceRegistryPropertyA(hDevInfo, &sDevInfo, SPDRP_DEVICEDESC, &dwRegType, NULL, 0, &dwSize);
pszName
= (char *)malloc(dwSize
); if(pszName == NULL) break;
bRet = SetupDiGetDeviceRegistryPropertyA(hDevInfo, &sDevInfo, SPDRP_DEVICEDESC, &dwRegType, (BYTE*)pszName, dwSize, &dwSize);
if(bRet
== FALSE
){ free(pszName
); continue; } {
dwSize = 0;
bRet = SetupDiGetDeviceRegistryPropertyA(hDevInfo, &sDevInfo, SPDRP_FRIENDLYNAME, &dwRegType, NULL, 0, &dwSize);
pszName
= (char *)malloc(dwSize
); if(pszName){
bRet = SetupDiGetDeviceRegistryPropertyA(hDevInfo, &sDevInfo, SPDRP_FRIENDLYNAME, &dwRegType, (BYTE*)pszName, dwSize, &dwSize);
if(bRet){
}
}
}
ret = TRUE;
}
SetupDiDestroyDeviceInfoList(hDevInfo);
MessageBoxA(NULL, strMessage, "", MB_OK); // no scroll
// fprintf(stdout, strMessage);
return ret;
}
int main(int ac, char **av)
{
Test();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8d2luZG93cy5oPgojaW5jbHVkZSA8ZGV2Z3VpZC5oPgojaW5jbHVkZSA8cmVnc3RyLmg+CiNpbmNsdWRlIDxzZXR1cGFwaS5oPgoKQk9PTCBUZXN0KHZvaWQpCnsKICBCT09MIHJldDsKICBEV09SRCBkd0luZGV4OwogIERXT1JEIGR3U2l6ZTsKICBEV09SRCBkd1JlZ1R5cGU7CiAgQk9PTCBiUmV0OwogIEhERVZJTkZPIGhEZXZJbmZvOwogIFNQX0RFVklORk9fREFUQSBzRGV2SW5mbzsKICBjaGFyIHN0ck1lc3NhZ2VbODE5Ml07CiAgY2hhciAqcHN6TmFtZTsKCiAgaERldkluZm8gPSBTZXR1cERpR2V0Q2xhc3NEZXZzKE5VTEwsIDAsIDAsIERJR0NGX1BSRVNFTlQgfCBESUdDRl9BTExDTEFTU0VTKTsKICBpZihoRGV2SW5mbyA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgcmV0dXJuIEZBTFNFOwogIHJldCA9IEZBTFNFOwogIGR3SW5kZXggPSAwOwogIFplcm9NZW1vcnkoJnNEZXZJbmZvLCBzaXplb2YoU1BfREVWSU5GT19EQVRBKSk7CiAgc0RldkluZm8uY2JTaXplID0gc2l6ZW9mKFNQX0RFVklORk9fREFUQSk7CiAgd2hpbGUoMSl7CiAgICBiUmV0ID0gU2V0dXBEaUVudW1EZXZpY2VJbmZvKGhEZXZJbmZvLCBkd0luZGV4KyssICZzRGV2SW5mbyk7CiAgICBpZihiUmV0ID09IEZBTFNFKSBicmVhazsKICAgIHJldCA9IEZBTFNFOwogICAgZHdTaXplID0gMDsKICAgIGJSZXQgPSBTZXR1cERpR2V0RGV2aWNlUmVnaXN0cnlQcm9wZXJ0eUEoaERldkluZm8sICZzRGV2SW5mbywgU1BEUlBfREVWSUNFREVTQywgJmR3UmVnVHlwZSwgTlVMTCwgMCwgJmR3U2l6ZSk7CiAgICBwc3pOYW1lID0gKGNoYXIgKiltYWxsb2MoZHdTaXplKTsKICAgIGlmKHBzek5hbWUgPT0gTlVMTCkgYnJlYWs7CiAgICBiUmV0ID0gU2V0dXBEaUdldERldmljZVJlZ2lzdHJ5UHJvcGVydHlBKGhEZXZJbmZvLCAmc0RldkluZm8sIFNQRFJQX0RFVklDRURFU0MsICZkd1JlZ1R5cGUsIChCWVRFKilwc3pOYW1lLCBkd1NpemUsICZkd1NpemUpOwogICAgaWYoYlJldCA9PSBGQUxTRSl7IGZyZWUocHN6TmFtZSk7IGNvbnRpbnVlOyB9CiAgICBzdHJjYXQoc3RyTWVzc2FnZSwgcHN6TmFtZSk7CiAgICBmcmVlKHBzek5hbWUpOwogICAgewogICAgICBkd1NpemUgPSAwOwogICAgICBiUmV0ID0gU2V0dXBEaUdldERldmljZVJlZ2lzdHJ5UHJvcGVydHlBKGhEZXZJbmZvLCAmc0RldkluZm8sIFNQRFJQX0ZSSUVORExZTkFNRSwgJmR3UmVnVHlwZSwgTlVMTCwgMCwgJmR3U2l6ZSk7CiAgICAgIHBzek5hbWUgPSAoY2hhciAqKW1hbGxvYyhkd1NpemUpOwogICAgICBpZihwc3pOYW1lKXsKICAgICAgICBiUmV0ID0gU2V0dXBEaUdldERldmljZVJlZ2lzdHJ5UHJvcGVydHlBKGhEZXZJbmZvLCAmc0RldkluZm8sIFNQRFJQX0ZSSUVORExZTkFNRSwgJmR3UmVnVHlwZSwgKEJZVEUqKXBzek5hbWUsIGR3U2l6ZSwgJmR3U2l6ZSk7CiAgICAgICAgaWYoYlJldCl7CiAgICAgICAgICBzdHJjYXQoc3RyTWVzc2FnZSwgIiAoIik7CiAgICAgICAgICBzdHJjYXQoc3RyTWVzc2FnZSwgcHN6TmFtZSk7CiAgICAgICAgICBzdHJjYXQoc3RyTWVzc2FnZSwgIikiKTsKICAgICAgICB9CiAgICAgICAgZnJlZShwc3pOYW1lKTsKICAgICAgfQogICAgfQogICAgc3RyY2F0KHN0ck1lc3NhZ2UsICJcbiIpOwogICAgcmV0ID0gVFJVRTsKICB9CiAgU2V0dXBEaURlc3Ryb3lEZXZpY2VJbmZvTGlzdChoRGV2SW5mbyk7CiAgTWVzc2FnZUJveEEoTlVMTCwgc3RyTWVzc2FnZSwgIiIsIE1CX09LKTsgLy8gbm8gc2Nyb2xsCiAgLy8gZnByaW50ZihzdGRvdXQsIHN0ck1lc3NhZ2UpOwogIHJldHVybiByZXQ7Cn0KCmludCBtYWluKGludCBhYywgY2hhciAqKmF2KQp7CiAgVGVzdCgpOwogIHJldHVybiAwOwp9