CM_Get_Device_Interface_ListA 函数 (cfgmgr32.h)
CM_Get_Device_Interface_List 函数检索属于指定设备接口类的设备接口实例的列表。
语法
CMAPI CONFIGRET CM_Get_Device_Interface_ListA(
[in] LPGUID InterfaceClassGuid,
[in, optional] DEVINSTID_A pDeviceID,
[out] PZZSTR Buffer,
[in] ULONG BufferLen,
[in] ULONG ulFlags
);
参数
[in] InterfaceClassGuid
提供标识设备接口类的 GUID。
[in, optional] pDeviceID
调用方提供的指向以 NULL 结尾的字符串的指针,该字符串表示 设备实例 ID。 如果指定,函数将检索指定类的设备支持的设备接口。 如果此值为 NULL,或者如果它指向长度为零的字符串,则该函数将检索属于指定类的所有接口。
[out] Buffer
调用方提供的指向缓冲区的指针,该缓冲区接收多个以 NULL 结尾的 Unicode 字符串,每个字符串表示接口实例的符号链接名称。
[in] BufferLen
调用方提供的值,该值指定 Buffer 指向的缓冲区的长度(以字符为单位)。 调用 CM_Get_Device_Interface_List_Size 以确定所需的缓冲区大小。
[in] ulFlags
包含以下调用方提供的标志之一:
CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES
函数提供一个列表,其中包含与与指定 GUID 和设备实例 ID(如果有)匹配的所有设备关联的设备接口。
CM_GET_DEVICE_INTERFACE_LIST_PRESENT
函数提供一个列表,其中包含与当前处于活动状态的设备关联的设备接口,这些接口与指定的 GUID 和设备实例 ID(如果有)匹配。
返回值
如果操作成功,函数将返回CR_SUCCESS。 否则,它将返回 cfgmgr32.h 中定义的具有CR_前缀的错误代码之一。
下表包含此函数可能返回的一些更常见的错误代码。
返回代码 | 说明 |
---|---|
|
缓冲区太小,无法保存请求的设备接口列表。 |
注解
在调用 CM_Get_Device_Interface_List_Size 获取列表的大小和调用 CM_Get_Device_Interface_List 以获取列表之间,可以向系统添加新的设备接口,导致返回的大小不再有效。 如果CM_Get_Device_Interface_List返回CR_BUFFER_SMALL,调用方应对该条件保持可靠,并重试获取大小和列表。
示例
此代码片段演示了如何重试获取大小和列表,如“备注”部分中所述。
CONFIGRET cr = CR_SUCCESS;
PWSTR DeviceInterfaceList = NULL;
ULONG DeviceInterfaceListLength = 0;
do {
cr = CM_Get_Device_Interface_List_Size(&DeviceInterfaceListLength,
(LPGUID)&GUID_DEVINTERFACE_VOLUME,
NULL,
CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES);
if (cr != CR_SUCCESS)
{
break;
}
if (DeviceInterfaceList != NULL) {
HeapFree(GetProcessHeap(),
0,
DeviceInterfaceList);
}
DeviceInterfaceList = (PWSTR)HeapAlloc(GetProcessHeap(),
HEAP_ZERO_MEMORY,
DeviceInterfaceListLength * sizeof(WCHAR));
if (DeviceInterfaceList == NULL)
{
cr = CR_OUT_OF_MEMORY;
break;
}
cr = CM_Get_Device_Interface_List((LPGUID)&GUID_DEVINTERFACE_VOLUME,
NULL,
DeviceInterfaceList,
DeviceInterfaceListLength,
CM_GET_DEVICE_INTERFACE_LIST_ALL_DEVICES);
} while (cr == CR_BUFFER_SMALL);
if (cr != CR_SUCCESS)
{
goto Exit;
}
注意
cfgmgr32.h 标头将CM_Get_Device_Interface_List定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 在 Microsoft Windows 2000 及更高版本的 Windows 中可用。 |
目标平台 | 通用 |
标头 | cfgmgr32.h (包括 Cfgmgr32.h) |
Library | Cfgmgr32.lib |
DLL | CfgMgr32.dll |
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈