CM_Get_DevNode_Registry_PropertyW 函数是 Win32 API 中的一个函数,位于 Cfgmgr32.h 头文件中。这个函数用于检索指定设备节点(Device Node)的注册属性。

以下是该函数的一般格式:
CMAPI CONFIGRET CM_Get_DevNode_Registry_PropertyW(
  DEVINST      dnDevInst,
  ULONG        ulProperty,
  PULONG       pulRegDataType,
  PVOID        Buffer,
  PULONG       pulLength,
  ULONG        ulFlags,
  HMACHINE     hMachine
);

参数说明:
  •  dnDevInst:设备节点的句柄。

  •  ulProperty:要检索的注册属性。

  •  pulRegDataType:指向 ULONG 的指针,用于接收注册数据的类型。

  •  Buffer:指向接收注册数据的缓冲区。

  •  pulLength:指向 ULONG 的指针,用于指定缓冲区大小和接收实际数据的大小。

  •  ulFlags:标志,控制函数的行为。

  •  hMachine:指定设备节点所在的计算机。


这个函数用于获取设备节点的注册信息,如硬件 ID、设备描述等。需要注意的是,调用这个函数前需要初始化配置管理器,可以使用 CM_Locate_DevNodeW 函数定位设备节点。

以下是一个简单的示例代码:
#include <Cfgmgr32.h>

void GetDevNodeRegistryProperty() {
    DEVINST dnDevInst; // 设备节点的句柄
    ULONG ulProperty = CM_DRP_HARDWAREID; // 获取硬件 ID
    ULONG ulRegDataType;
    ULONG ulLength = 0;
    CONFIGRET cr;

    // 初始化设备节点,假设 dnDevInst 是你的设备节点句柄
    // 这里使用 CM_LOCATE_DEVNODE_NORMAL,可以根据需要修改标志
    cr = CM_Locate_DevNodeW(&dnDevInst, NULL, CM_LOCATE_DEVNODE_NORMAL);

    // 获取缓冲区大小
    cr = CM_Get_DevNode_Registry_PropertyW(dnDevInst, ulProperty, &ulRegDataType, NULL, &ulLength, 0, NULL);

    if (cr == CR_SUCCESS) {
        // 分配足够大小的缓冲区
        PVOID pBuffer = malloc(ulLength);

        // 获取注册属性
        cr = CM_Get_DevNode_Registry_PropertyW(dnDevInst, ulProperty, &ulRegDataType, pBuffer, &ulLength, 0, NULL);

        // 处理获取到的注册属性数据

        // 释放缓冲区
        free(pBuffer);
    }
}

请注意,这只是一个简单的示例,实际使用时需要根据具体情况进行适当的错误处理和资源管理。


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