草庐IT

c++ - SetupDiGetDeviceProperty 使用示例

coder 2023-05-31 原文

谁能给我一个使用SetupDiGetDeviceProperty的例子吗? ?

最佳答案

以下代码

#include <windows.h>
#include <devguid.h>    // for GUID_DEVCLASS_CDROM etc
#include <setupapi.h>
#include <cfgmgr32.h>   // for MAX_DEVICE_ID_LEN, CM_Get_Parent and CM_Get_Device_ID
#define INITGUID
#include <tchar.h>
#include <stdio.h>

//#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) <= szHardwareIDs + ARRAYSIZE(szHardwareIDs);
                 pszId += lstrlen(pszId)+1) {

                _tprintf (TEXT("        \"%s\"\n"), pszId);
            }
        }

        // Retreive the device description as reported by the device itself
        // On Vista and earlier, we can use only SPDRP_DEVICEDESC
        // On Windows 7, the information we want ("Bus reported device description") is
        // accessed through DEVPKEY_Device_BusReportedDeviceDesc
        if (fn_SetupDiGetDevicePropertyW && fn_SetupDiGetDevicePropertyW (hDevInfo, &DeviceInfoData, &DEVPKEY_Device_BusReportedDeviceDesc,
                                                                          &ulPropertyType, (BYTE*)szBuffer, sizeof(szBuffer), &dwSize, 0)) {

            if (fn_SetupDiGetDevicePropertyW (hDevInfo, &DeviceInfoData, &DEVPKEY_Device_BusReportedDeviceDesc,
                                              &ulPropertyType, (BYTE*)szBuffer, sizeof(szBuffer), &dwSize, 0))
                _tprintf (TEXT("    Bus Reported Device Description: \"%ls\"\n"), szBuffer);
            if (fn_SetupDiGetDevicePropertyW (hDevInfo, &DeviceInfoData, &DEVPKEY_Device_Manufacturer,
                                              &ulPropertyType, (BYTE*)szBuffer, sizeof(szBuffer), &dwSize, 0)) {
                _tprintf (TEXT("    Device Manufacturer: \"%ls\"\n"), szBuffer);
            }
            if (fn_SetupDiGetDevicePropertyW (hDevInfo, &DeviceInfoData, &DEVPKEY_Device_FriendlyName,
                                              &ulPropertyType, (BYTE*)szBuffer, sizeof(szBuffer), &dwSize, 0)) {
                _tprintf (TEXT("    Device Friendly Name: \"%ls\"\n"), szBuffer);
            }
            if (fn_SetupDiGetDevicePropertyW (hDevInfo, &DeviceInfoData, &DEVPKEY_Device_LocationInfo,
                                              &ulPropertyType, (BYTE*)szBuffer, sizeof(szBuffer), &dwSize, 0)) {
                _tprintf (TEXT("    Device Location Info: \"%ls\"\n"), szBuffer);
            }
            if (fn_SetupDiGetDevicePropertyW (hDevInfo, &DeviceInfoData, &DEVPKEY_Device_SecuritySDS,
                                              &ulPropertyType, (BYTE*)szBuffer, sizeof(szBuffer), &dwSize, 0)) {
                // See Security Descriptor Definition Language on MSDN
                // (http://msdn.microsoft.com/en-us/library/windows/desktop/aa379567(v=vs.85).aspx)
                _tprintf (TEXT("    Device Security Descriptor String: \"%ls\"\n"), szBuffer);
            }
            if (fn_SetupDiGetDevicePropertyW (hDevInfo, &DeviceInfoData, &DEVPKEY_Device_ContainerId,
                                              &ulPropertyType, (BYTE*)szDesc, sizeof(szDesc), &dwSize, 0)) {
                StringFromGUID2((REFGUID)szDesc, szBuffer, ARRAY_SIZE(szBuffer));
                _tprintf (TEXT("    ContainerId: \"%ls\"\n"), szBuffer);
            }
            if (fn_SetupDiGetDevicePropertyW (hDevInfo, &DeviceInfoData, &DEVPKEY_DeviceDisplay_Category,
                                              &ulPropertyType, (BYTE*)szBuffer, sizeof(szBuffer), &dwSize, 0))
                _tprintf (TEXT("    Device Display Category: \"%ls\"\n"), szBuffer);
        }

        pszToken = _tcstok_s (szDeviceInstanceID , TEXT("\\#&"), &pszNextToken);
        while(pszToken != NULL) {
            szVid[0] = TEXT('\0');
            szPid[0] = TEXT('\0');
            szMi[0] = TEXT('\0');
            for (j = 0; j < 3; j++) {
                if (_tcsncmp(pszToken, arPrefix[j], lstrlen(arPrefix[j])) == 0) {
                    switch(j) {
                        case 0:
                            _tcscpy_s(szVid, ARRAY_SIZE(szVid), pszToken);
                            break;
                        case 1:
                            _tcscpy_s(szPid, ARRAY_SIZE(szPid), pszToken);
                            break;
                        case 2:
                            _tcscpy_s(szMi, ARRAY_SIZE(szMi), pszToken);
                            break;
                        default:
                            break;
                    }
                }
            }
            if (szVid[0] != TEXT('\0'))
                _tprintf (TEXT("    vid: \"%s\"\n"), szVid);
            if (szPid[0] != TEXT('\0'))
                _tprintf (TEXT("    pid: \"%s\"\n"), szPid);
            if (szMi[0] != TEXT('\0'))
                _tprintf (TEXT("    mi: \"%s\"\n"), szMi);
            pszToken = _tcstok_s (NULL, TEXT("\\#&"), &pszNextToken);
        }
    }

    return;
}

int _tmain()
{
    // List all connected USB devices
    _tprintf (TEXT("---------------\n"));
    _tprintf (TEXT("- USB devices -\n"));
    _tprintf (TEXT("---------------\n"));
    ListDevices(NULL, TEXT("USB"));

    _tprintf (TEXT("\n"));
    _tprintf (TEXT("-------------------\n"));
    _tprintf (TEXT("- USBSTOR devices -\n"));
    _tprintf (TEXT("-------------------\n"));
    ListDevices(NULL, TEXT("USBSTOR"));

    _tprintf (TEXT("\n"));
    _tprintf (TEXT("--------------\n"));
    _tprintf (TEXT("- SD devices -\n"));
    _tprintf (TEXT("--------------\n"));
    ListDevices(NULL, TEXT("SD"));

    //_tprintf (TEXT("\n"));
    //ListDevices(&GUID_DEVCLASS_USB, NULL);
    //_tprintf (TEXT("\n"));

    _tprintf (TEXT("\n"));
    _tprintf (TEXT("-----------\n"));
    _tprintf (TEXT("- Volumes -\n"));
    _tprintf (TEXT("-----------\n"));
    //ListDevices(NULL, TEXT("STORAGE\\VOLUME"));
    //_tprintf (TEXT("\n"));
    ListDevices(&GUID_DEVCLASS_VOLUME, NULL);

    _tprintf (TEXT("\n"));
    _tprintf (TEXT("----------------------------\n"));
    _tprintf (TEXT("- devices with disk drives -\n"));
    _tprintf (TEXT("----------------------------\n"));
    ListDevices(&GUID_DEVCLASS_DISKDRIVE, NULL);

    return 0;
}

在我的 Windows 7 计算机上产生以下输出

---------------
- 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}"

带有“总线报告设备描述”的行显示 SetupDiGetDeviceProperty 调用的结果。如果您愿意遵循其他答案,您可以获得有关设备的一些其他信息:this oneanother one .

关于c++ - SetupDiGetDeviceProperty 使用示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3438366/

有关c++ - SetupDiGetDeviceProperty 使用示例的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  6. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  7. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  8. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  9. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  10. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

随机推荐