在Windows的 Cfgmgr32.h 头文件中,确实存在 CM_Get_Class_Key_NameW 函数。以下是其原型:
CMAPI CONFIGRET WINAPI CM_Get_Class_Key_NameW(
  _In_  LPGUID ClassGuid,
  _Out_writes_opt_(*pulLength) LPWSTR Buffer,
  _Inout_ PULONG pulLength,
  _In_  ULONG ulFlags
);

这个函数的作用是获取指定设备类 GUID 的注册表键名。其中参数含义如下:

  •  ClassGuid: 指向设备类的 GUID 的指针。

  •  Buffer: 指向接收设备类键名的缓冲区的指针。可以为NULL,用于查询所需缓冲区大小。

  •  pulLength: 指向一个变量,用于输入缓冲区大小和输出实际缓冲区大小。

  •  ulFlags: 保留,必须为0。


示例用法:
#include <windows.h>
#include <Cfgmgr32.h>
#include <tchar.h>

int main() {
    CONFIGRET cr;
    GUID classGuid = { /* your class GUID here */ };
    ULONG bufferSize = 0;
    
    // Query the required buffer size
    cr = CM_Get_Class_Key_NameW(&classGuid, NULL, &bufferSize, 0);
    if (cr != CR_SUCCESS && cr != CR_BUFFER_SMALL) {
        // Handle error
        return 1;
    }

    // Allocate buffer
    LPWSTR buffer = (LPWSTR)malloc(bufferSize * sizeof(WCHAR));
    if (buffer == NULL) {
        // Handle memory allocation error
        return 1;
    }

    // Get the class key name
    cr = CM_Get_Class_Key_NameW(&classGuid, buffer, &bufferSize, 0);
    if (cr == CR_SUCCESS) {
        // Use the class key name
        _tprintf(_T("Class Key Name: %s\n"), buffer);
    } else {
        // Handle error
    }

    // Cleanup
    free(buffer);

    return 0;
}

请确保在使用时将 classGuid 替换为实际的设备类 GUID。


转载请注明出处:http://www.pingtaimeng.com/article/detail/24292/Win32 API/Cfgmgr32.h/CM_Get_Class_Key_NameW