SetupDiGetDeviceProperty usage example

匿名 (未验证) 提交于 2019-12-03 03:06:01

问题:

Can anybody provide me with an example of using SetupDiGetDeviceProperty ?

回答1:

The following code

#include  #include     // for GUID_DEVCLASS_CDROM etc #include  #include    // for MAX_DEVICE_ID_LEN, CM_Get_Parent and CM_Get_Device_ID #define INITGUID #include  #include   //#include "c:\WinDDK\7600.16385.1\inc\api\devpkey.h"  // include DEVPKEY_Device_BusReportedDeviceDesc from WinDDK\7600.16385.1\inc\api\devpropdef.h #ifdef DEFINE_DEVPROPKEY #undef DEFINE_DEVPROPKEY #endif #ifdef INITGUID #define DEFINE_DEVPROPKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) EXTERN_C const DEVPROPKEY DECLSPEC_SELECTANY name = { { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }, pid } #else #define DEFINE_DEVPROPKEY(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8, pid) EXTERN_C const DEVPROPKEY name #endif // INITGUID  // include DEVPKEY_Device_BusReportedDeviceDesc from WinDDK\7600.16385.1\inc\api\devpkey.h DEFINE_DEVPROPKEY(DEVPKEY_Device_BusReportedDeviceDesc,  0x540b947e, 0x8b40, 0x45bc, 0xa8, 0xa2, 0x6a, 0x0b, 0x89, 0x4c, 0xbd, 0xa2, 4);     // DEVPROP_TYPE_STRING DEFINE_DEVPROPKEY(DEVPKEY_Device_ContainerId,            0x8c7ed206, 0x3f8a, 0x4827, 0xb3, 0xab, 0xae, 0x9e, 0x1f, 0xae, 0xfc, 0x6c, 2);     // DEVPROP_TYPE_GUID DEFINE_DEVPROPKEY(DEVPKEY_Device_FriendlyName,           0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 14);    // DEVPROP_TYPE_STRING DEFINE_DEVPROPKEY(DEVPKEY_DeviceDisplay_Category,        0x78c34fc8, 0x104a, 0x4aca, 0x9e, 0xa4, 0x52, 0x4d, 0x52, 0x99, 0x6e, 0x57, 0x5a);  // DEVPROP_TYPE_STRING_LIST DEFINE_DEVPROPKEY(DEVPKEY_Device_LocationInfo,           0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 15);    // DEVPROP_TYPE_STRING DEFINE_DEVPROPKEY(DEVPKEY_Device_Manufacturer,           0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 13);    // DEVPROP_TYPE_STRING DEFINE_DEVPROPKEY(DEVPKEY_Device_SecuritySDS,            0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0, 26);    // DEVPROP_TYPE_SECURITY_DESCRIPTOR_STRING  #define ARRAY_SIZE(arr)     (sizeof(arr)/sizeof(arr[0]))  #pragma comment (lib, "setupapi.lib")  typedef BOOL (WINAPI *FN_SetupDiGetDevicePropertyW)(   __in       HDEVINFO DeviceInfoSet,   __in       PSP_DEVINFO_DATA DeviceInfoData,   __in       const DEVPROPKEY *PropertyKey,   __out      DEVPROPTYPE *PropertyType,   __out_opt  PBYTE PropertyBuffer,   __in       DWORD PropertyBufferSize,   __out_opt  PDWORD RequiredSize,   __in       DWORD Flags );  // List all USB devices with some additional information void ListDevices (CONST GUID *pClassGuid, LPCTSTR pszEnumerator) {     unsigned i, j;     DWORD dwSize, dwPropertyRegDataType;     DEVPROPTYPE ulPropertyType;     CONFIGRET status;     HDEVINFO hDevInfo;     SP_DEVINFO_DATA DeviceInfoData;     const static LPCTSTR arPrefix[3] = {TEXT("VID_"), TEXT("PID_"), TEXT("MI_")};     TCHAR szDeviceInstanceID [MAX_DEVICE_ID_LEN];     TCHAR szDesc[1024], szHardwareIDs[4096];     WCHAR szBuffer[4096];     LPTSTR pszToken, pszNextToken;     TCHAR szVid[MAX_DEVICE_ID_LEN], szPid[MAX_DEVICE_ID_LEN], szMi[MAX_DEVICE_ID_LEN];     FN_SetupDiGetDevicePropertyW fn_SetupDiGetDevicePropertyW = (FN_SetupDiGetDevicePropertyW)         GetProcAddress (GetModuleHandle (TEXT("Setupapi.dll")), "SetupDiGetDevicePropertyW");      // List all connected USB devices     hDevInfo = SetupDiGetClassDevs (pClassGuid, pszEnumerator, NULL,                                     pClassGuid != NULL ? DIGCF_PRESENT: DIGCF_ALLCLASSES | DIGCF_PRESENT);     if (hDevInfo == INVALID_HANDLE_VALUE)         return;      // Find the ones that are driverless     for (i = 0; ; i++)  {         DeviceInfoData.cbSize = sizeof (DeviceInfoData);         if (!SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData))             break;          status = CM_Get_Device_ID(DeviceInfoData.DevInst, szDeviceInstanceID , MAX_PATH, 0);         if (status != CR_SUCCESS)             continue;          // Display device instance ID         _tprintf (TEXT("%s\n"), szDeviceInstanceID );          if (SetupDiGetDeviceRegistryProperty (hDevInfo, &DeviceInfoData, SPDRP_DEVICEDESC,                                               &dwPropertyRegDataType, (BYTE*)szDesc,                                               sizeof(szDesc),   // The size, in bytes                                               &dwSize))             _tprintf (TEXT("    Device Description: \"%s\"\n"), szDesc);          if (SetupDiGetDeviceRegistryProperty (hDevInfo, &DeviceInfoData, SPDRP_HARDWAREID,                                               &dwPropertyRegDataType, (BYTE*)szHardwareIDs,                                               sizeof(szHardwareIDs),    // The size, in bytes                                               &dwSize)) {             LPCTSTR pszId;             _tprintf (TEXT("    Hardware IDs:\n"));             for (pszId=szHardwareIDs;                  *pszId != TEXT('\0') && pszId + dwSize/sizeof(TCHAR) 

produces the following output on my Windows 7 computer

--------------- - USB devices - --------------- USB\ROOT_HUB20\4&1C1548F&0     Device Description: "USB Root Hub"     Hardware IDs:         "USB\ROOT_HUB20&VID8086&PID3B3C&REV0006"         "USB\ROOT_HUB20&VID8086&PID3B3C"         "USB\ROOT_HUB20" USB\ROOT_HUB20\4&2851D18A&0     Device Description: "USB Root Hub"     Hardware IDs:         "USB\ROOT_HUB20&VID8086&PID3B34&REV0006"         "USB\ROOT_HUB20&VID8086&PID3B34"         "USB\ROOT_HUB20" USB\VID_046D&PID_C52B\6&32FEB3AB&0&2     Device Description: "USB Composite Device"     Hardware IDs:         "USB\VID_046D&PID_C52B&REV_1201"         "USB\VID_046D&PID_C52B"     Bus Reported Device Description: "USB Receiver"     Device Manufacturer: "(Standard USB Host Controller)"     Device Location Info: "Port_#0002.Hub_#0003"     ContainerId: "{AB5F3BBF-21FC-11E2-9436-70F3954A2325}"     vid: "VID_046D"     pid: "PID_C52B" USB\VID_046D&PID_C52B&MI_00\7&33519F3A&0&0000     Device Description: "USB Input Device (Logitech Download Assistant)"     Hardware IDs:         "USB\VID_046D&PID_C52B&REV_1201&MI_00"         "USB\VID_046D&PID_C52B&MI_00"     Bus Reported Device Description: "USB Receiver"     Device Manufacturer: "Logitech (x64)"     Device Location Info: "0000.001a.0000.001.002.000.000.000.000"     ContainerId: "{AB5F3BBF-21FC-11E2-9436-70F3954A2325}"     vid: "VID_046D"     pid: "PID_C52B"     mi: "MI_00" USB\VID_046D&PID_C52B&MI_01\7&33519F3A&0&0001     Device Description: "USB Input Device"     Hardware IDs:         "USB\VID_046D&PID_C52B&REV_1201&MI_01"         "USB\VID_046D&PID_C52B&MI_01"     Bus Reported Device Description: "USB Receiver"     Device Manufacturer: "(Standard system devices)"     Device Location Info: "0000.001a.0000.001.002.000.000.000.000"     ContainerId: "{AB5F3BBF-21FC-11E2-9436-70F3954A2325}"     vid: "VID_046D"     pid: "PID_C52B"     mi: "MI_01" USB\VID_046D&PID_C52B&MI_02\7&33519F3A&0&0002     Device Description: "Logitech Unifying USB receiver"     Hardware IDs:         "USB\VID_046D&PID_C52B&REV_1201&MI_02"         "USB\VID_046D&PID_C52B&MI_02"     Bus Reported Device Description: "USB Receiver"     Device Manufacturer: "Logitech"     Device Location Info: "0000.001a.0000.001.002.000.000.000.000"     ContainerId: "{AB5F3BBF-21FC-11E2-9436-70F3954A2325}"     vid: "VID_046D"     pid: "PID_C52B"     mi: "MI_02" USB\VID_05C6&PID_9205\6&7A6FBD7&0&4     Device Description: "Qualcomm Gobi 2000 USB Composite Device 9205"     Hardware IDs:         "USB\VID_05C6&PID_9205&REV_0002"         "USB\VID_05C6&PID_9205"     Bus Reported Device Description: "Qualcomm Gobi 2000"     Device Manufacturer: "Qualcomm Incorporated"     Device Location Info: "Port_#0004.Hub_#0004"     ContainerId: "{00000000-0000-0000-FFFF-FFFFFFFFFFFF}"     vid: "VID_05C6"     pid: "PID_9205" USB\VID_05C6&PID_9205&MI_00\7&210D4D2D&1&0000     Device Description: "Qualcomm Gobi 2000 HS-USB Mobile Broadband Device 9205"     Hardware IDs:         "USB\VID_05C6&PID_9205&REV_0002&MI_00"         "USB\VID_05C6&PID_9205&MI_00"     Bus Reported Device Description: "Qualcomm Gobi 2000"     Device Manufacturer: "Qualcomm Incorporated"     Device Location Info: "0000.001d.0000.001.004.000.000.000.000"     ContainerId: "{00000000-0000-0000-FFFF-FFFFFFFFFFFF}"     vid: "VID_05C6"     pid: "PID_9205"     mi: "MI_00" USB\VID_05C6&PID_9205&MI_01\7&210D4D2D&1&0001     Device Description: "Qualcomm Gobi 2000 HS-USB Diagnostics 9205"     Hardware IDs:         "USB\VID_05C6&PID_9205&REV_0002&MI_01"         "USB\VID_05C6&PID_9205&MI_01"     Bus Reported Device Description: "Qualcomm Gobi 2000"     Device Manufacturer: "Qualcomm Incorporated"     Device Friendly Name: "Qualcomm Gobi 2000 HS-USB Diagnostics 9205 (COM6)"     Device Location Info: "0000.001d.0000.001.004.000.000.000.000"     ContainerId: "{00000000-0000-0000-FFFF-FFFFFFFFFFFF}"     vid: "VID_05C6"     pid: "PID_9205"     mi: "MI_01" USB\VID_05C6&PID_9205&MI_02\7&210D4D2D&1&0002     Device Description: "Qualcomm Gobi 2000 HS-USB Modem 9205"     Hardware IDs:         "USB\VID_05C6&PID_9205&REV_0002&MI_02"         "USB\VID_05C6&PID_9205&MI_02"     Bus Reported Device Description: "Qualcomm Gobi 2000"     Device Manufacturer: "Qualcomm Incorporated"     Device Friendly Name: "Qualcomm Gobi 2000 HS-USB Modem 9205"     Device Location Info: "0000.001d.0000.001.004.000.000.000.000"     ContainerId: "{00000000-0000-0000-FFFF-FFFFFFFFFFFF}"     vid: "VID_05C6"     pid: "PID_9205"     mi: "MI_02" USB\VID_05C6&PID_9205&MI_03\7&210D4D2D&1&0003     Device Description: "Qualcomm Gobi 2000 HS-USB NMEA 9205"     Hardware IDs:         "USB\VID_05C6&PID_9205&REV_0002&MI_03"         "USB\VID_05C6&PID_9205&MI_03"     Bus Reported Device Description: "Qualcomm Gobi 2000"     Device Manufacturer: "Qualcomm Incorporated"     Device Friendly Name: "Qualcomm Gobi 2000 HS-USB NMEA 9205 (COM7)"     Device Location Info: "0000.001d.0000.001.004.000.000.000.000"     ContainerId: "{00000000-0000-0000-FFFF-FFFFFFFFFFFF}"     vid: "VID_05C6"     pid: "PID_9205"     mi: "MI_03" USB\VID_0781&PID_7108\00000000000000031753     Device Description: "USB Mass Storage Device"     Hardware IDs:         "USB\Vid_0781&Pid_7108&Rev_2000"         "USB\Vid_0781&Pid_7108"     vid: "VID_0781"     pid: "PID_7108" USB\VID_0930&PID_6545\00D0C9CCDF49EBC06000806C     Device Description: "USB Mass Storage Device"     Hardware IDs:         "USB\Vid_0930&Pid_6545&Rev_0100"         "USB\Vid_0930&Pid_6545"     vid: "VID_0930"     pid: "PID_6545" USB\VID_0A5C&PID_217F\70F3954A2325     Device Description: "ThinkPad Bluetooth 3.0"     Hardware IDs:         "USB\VID_0A5C&PID_217F&REV_0360"         "USB\VID_0A5C&PID_217F"     Bus Reported Device Description: "Broadcom Bluetooth Device"     Device Manufacturer: "Broadcom"     Device Location Info: "Port_#0004.Hub_#0003"     ContainerId: "{00000000-0000-0000-FFFF-FFFFFFFFFFFF}"     vid: "VID_0A5C"     pid: "PID_217F" USB\VID_147E&PID_2016\6&32FEB3AB&0&3     Device Description: "TouchChip Fingerprint Coprocessor (WBF advanced mode)"     Hardware IDs:         "USB\VID_147E&PID_2016&REV_0002"         "USB\VID_147E&PID_2016"     Bus Reported Device Description: "Biometric Coprocessor"     Device Manufacturer: "AuthenTec"     Device Location Info: "Port_#0003.Hub_#0003"     Device Security Descriptor String: "D:P(A;;GA;;;BA)(A;;GA;;;SY)"     ContainerId: "{00000000-0000-0000-FFFF-FFFFFFFFFFFF}"     vid: "VID_147E"     pid: "PID_2016" USB\VID_17EF&PID_480F\6&32FEB3AB&0&6     Device Description: "USB Composite Device"     Hardware IDs:         "USB\VID_17EF&PID_480F&REV_2345"         "USB\VID_17EF&PID_480F"     Bus Reported Device Description: "Integrated Camera"     Device Manufacturer: "(Standard USB Host Controller)"     Device Location Info: "Port_#0006.Hub_#0003"     ContainerId: "{00000000-0000-0000-FFFF-FFFFFFFFFFFF}"     vid: "VID_17EF"     pid: "PID_480F" USB\VID_17EF&PID_480F&MI_00\7&137E78B0&0&0000     Device Description: "Integrated Camera"     Hardware IDs:         "USB\VID_17EF&PID_480F&REV_2345&MI_00"         "USB\VID_17EF&PID_480F&MI_00"     Bus Reported Device Description: "Integrated Camera"     Device Manufacturer: "Ricoh"     Device Friendly Name: "Integrated Camera"     Device Location Info: "0000.001a.0000.001.006.000.000.000.000"     ContainerId: "{00000000-0000-0000-FFFF-FFFFFFFFFFFF}"     Device Display Category: "Imaging.Webcam"     vid: "VID_17EF"     pid: "PID_480F"     mi: "MI_00" USB\VID_8087&PID_0020\5&15BBD570&0&1     Device Description: "Generic USB Hub"     Hardware IDs:         "USB\VID_8087&PID_0020&REV_0000"         "USB\VID_8087&PID_0020"     vid: "VID_8087"     pid: "PID_0020" USB\VID_8087&PID_0020\5&29432BF7&0&1     Device Description: "Generic USB Hub"     Hardware IDs:         "USB\VID_8087&PID_0020&REV_0000"         "USB\VID_8087&PID_0020"     vid: "VID_8087"     pid: "PID_0020"  ------------------- - USBSTOR devices - ------------------- USBSTOR\DISK&VEN_KINGSTON&PROD_DATATRAVELER_108&REV_PMAP\00D0C9CCDF49EBC06000806C&0     Device Description: "Disk drive"     Hardware IDs:         "USBSTOR\DiskKingstonDataTraveler_108PMAP"         "USBSTOR\DiskKingstonDataTraveler_108"         "USBSTOR\DiskKingston"         "USBSTOR\KingstonDataTraveler_108P"         "KingstonDataTraveler_108P"         "USBSTOR\GenDisk"         "GenDisk"     Bus Reported Device Description: "Kingston DataTraveler 108 USB Device"     Device Manufacturer: "(Standard disk drives)"     Device Friendly Name: "Kingston DataTraveler 108 USB Device"     ContainerId: "{D9CC9C62-4C1D-5CC2-953C-9B0E27AB05E0}" USBSTOR\DISK&VEN_SANDISK&PROD_CRUZER_TITANIUM&REV_2000\00000000000000031753&0     Device Description: "Disk drive"     Hardware IDs:         "USBSTOR\DiskSanDisk_Cruzer_Titanium_2000"         "USBSTOR\DiskSanDisk_Cruzer_Titanium_"         "USBSTOR\DiskSanDisk_"         "USBSTOR\SanDisk_Cruzer_Titanium_2"         "SanDisk_Cruzer_Titanium_2"         "USBSTOR\GenDisk"         "GenDisk"     Bus Reported Device Description: "SanDisk Cruzer Titanium USB Device"     Device Manufacturer: "(Standard disk drives)"     Device Friendly Name: "SanDisk Cruzer Titanium USB Device"     ContainerId: "{DB834D8A-6F58-11E2-AA64-70F3954A2325}"  -------------- - SD devices - -------------- SD\VID_74&OID_4A45&PID_USD&REV_1.0\5&3369D5EF&0&0     Device Description: "SD Storage Card"     Hardware IDs:         "SD\VID_74&OID_4a45&PID_USD&REV_1.0"         "SD\VID_74&OID_4a45&PID_USD"     Bus Reported Device Description: "SD Memory Card"     Device Manufacturer: "Generic"     Device Friendly Name: "SD Memory Card"     ContainerId: "{C17922A4-7814-11E2-BF78-70F3954A2325}"     vid: "VID_74"     pid: "PID_USD"  ----------- - Volumes - ----------- STORAGE\VOLUME\_??_USBSTOR#DISK&VEN_SANDISK&PROD_CRUZER_TITANIUM&REV_2000#00000000000000031753&0#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}     Device Description: "Generic volume"     Hardware IDs:         "STORAGE\Volume" STORAGE\VOLUME\{0A6B09D2-D440-11E1-9886-806E6F6E6963}#0000000000100000     Device Description: "Generic volume"     Hardware IDs:         "STORAGE\Volume" STORAGE\VOLUME\{0A6B09D2-D440-11E1-9886-806E6F6E6963}#0000000006500000     Device Description: "Generic volume"     Hardware IDs:         "STORAGE\Volume" STORAGE\VOLUME\_??_USBSTOR#DISK&VEN_KINGSTON&PROD_DATATRAVELER_108&REV_PMAP#00D0C9CCDF49EBC06000806C&0#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}     Device Description: "Generic volume"     Hardware IDs:         "STORAGE\Volume" STORAGE\VOLUME\_??_SD#VID_74&OID_4A45&PID_USD&REV_1.0#5&3369D5EF&0&0#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}     Device Description: "Generic volume"     Hardware IDs:         "STORAGE\Volume"     vid: "VID_74"     pid: "PID_USD"  ---------------------------- - devices with disk drives - ---------------------------- IDE\DISKSAMSUNG_SSD_830_SERIES__________________CXM02B1Q\4&398487B7&0&0.0.0     Device Description: "Disk drive"     Hardware IDs:         "IDE\DiskSAMSUNG_SSD_830_Series__________________CXM02B1Q"         "IDE\SAMSUNG_SSD_830_Series__________________CXM02B1Q"         "IDE\DiskSAMSUNG_SSD_830_Series__________________"         "SAMSUNG_SSD_830_Series__________________CXM02B1Q"         "GenDisk"     Bus Reported Device Description: "SAMSUNG SSD 830 Series"     Device Manufacturer: "(Standard disk drives)"     Device Friendly Name: "SAMSUNG SSD 830 Series"     Device Location Info: "0"     ContainerId: "{00000000-0000-0000-FFFF-FFFFFFFFFFFF}" USBSTOR\DISK&VEN_KINGSTON&PROD_DATATRAVELER_108&REV_PMAP\00D0C9CCDF49EBC06000806C&0     Device Description: "Disk drive"     Hardware IDs:         "USBSTOR\DiskKingstonDataTraveler_108PMAP"         "USBSTOR\DiskKingstonDataTraveler_108"         "USBSTOR\DiskKingston"         "USBSTOR\KingstonDataTraveler_108P"         "KingstonDataTraveler_108P"         "USBSTOR\GenDisk"         "GenDisk"     Bus Reported Device Description: "Kingston DataTraveler 108 USB Device"     Device Manufacturer: "(Standard disk drives)"     Device Friendly Name: "Kingston DataTraveler 108 USB Device"     ContainerId: "{D9CC9C62-4C1D-5CC2-953C-9B0E27AB05E0}" SD\VID_74&OID_4A45&PID_USD&REV_1.0\5&3369D5EF&0&0     Device Description: "SD Storage Card"     Hardware IDs:         "SD\VID_74&OID_4a45&PID_USD&REV_1.0"         "SD\VID_74&OID_4a45&PID_USD"     Bus Reported Device Description: "SD Memory Card"     Device Manufacturer: "Generic"     Device Friendly Name: "SD Memory Card"     ContainerId: "{C17922A4-7814-11E2-BF78-70F3954A2325}"     vid: "VID_74"     pid: "PID_USD" USBSTOR\DISK&VEN_SANDISK&PROD_CRUZER_TITANIUM&REV_2000\00000000000000031753&0     Device Description: "Disk drive"     Hardware IDs:         "USBSTOR\DiskSanDisk_Cruzer_Titanium_2000"         "USBSTOR\DiskSanDisk_Cruzer_Titanium_"         "USBSTOR\DiskSanDisk_"         "USBSTOR\SanDisk_Cruzer_Titanium_2"         "SanDisk_Cruzer_Titanium_2"         "USBSTOR\GenDisk"         "GenDisk"     Bus Reported Device Description: "SanDisk Cruzer Titanium USB Device"     Device Manufacturer: "(Standard disk drives)"     Device Friendly Name: "SanDisk Cruzer Titanium USB Device"     ContainerId: "{DB834D8A-6F58-11E2-AA64-70F3954A2325}" 

The lines with "Bus Reported Device Description" displays results of SetupDiGetDeviceProperty call. You can get some additional information about devices if you would follow another answers: this one and another one.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!