ioGetDeviceProperty 函数 (wdm.h)

IoGetDeviceProperty 例程检索有关设备的信息,例如配置信息及其 PDO 的名称。

语法

NTSTATUS IoGetDeviceProperty(
  [in]            PDEVICE_OBJECT           DeviceObject,
  [in]            DEVICE_REGISTRY_PROPERTY DeviceProperty,
  [in]            ULONG                    BufferLength,
  [out, optional] PVOID                    PropertyBuffer,
  [out]           PULONG                   ResultLength
);

参数

[in] DeviceObject

指向要查询的设备 (PDO) 的物理设备对象的指针。

[in] DeviceProperty

指定要请求的设备属性。 必须是下列 DEVICE_REGISTRY_PROPERTY 枚举值之一:

DevicePropertyAddress

请求总线上设备的地址。 PropertyBuffer 指向 ULONG。

此地址的解释是特定于总线的。 此例程的调用方应再次调用例程以请求 DevicePropertyBusTypeGuid,或者可能调用 DevicePropertyLegacyBusType,以便可以解释地址。 地址值 0xFFFFFFFF 指示基础总线驱动程序未为设备提供总线地址。

以下列表描述了某些总线驱动程序在其子设备的 PropertyBuffer 中存储的信息:

公共汽车 说明
1394 不提供地址,因为地址不稳定。 默认为 0xFFFFFFFF。
EISA 槽号 (0-F) 。
IDE 对于 IDE 设备,地址包含目标 ID 和 LUN。 对于 IDE 通道,地址为零或一 (0 = 主通道,1 = 辅助通道) 。
ISApnp 不提供地址。 默认为 0xFFFFFFFF。
PC 卡 (PCMCIA) 套接字编号 (通常0x00或0x40) 。
PCI 高字中的设备编号和低字中的函数编号。
SCSI 目标 ID。
USB 端口号。

DevicePropertyBootConfiguration

请求固件以原始形式分配给设备的硬件资源。 PropertyBuffer 指向 CM_RESOURCE_LIST 结构。

DevicePropertyBootConfigurationTranslated

固件分配给设备的硬件资源(已翻译形式)。 PropertyBuffer 指向 CM_RESOURCE_LIST 结构。

DevicePropertyBusNumber

请求设备连接到的总线的旧总线编号。 PropertyBuffer 指向 ULONG。

DevicePropertyBusTypeGuid

请求设备连接到的总线的 GUID。 Wdmguid.h 头文件中列出了系统定义的总线类型 GUID。 PropertyBuffer 指向 GUID,该 GUID 是一个包含二进制形式的 GUID 的 16 字节结构。

DevicePropertyClassGuid

请求设备的安装类的 GUID。 PropertyBuffer 指向以 NULL 结尾的 WCHAR 数组。 此例程以如下字符串格式返回 GUID,其中每个“c”表示十六进制字符:{cccccc-cccc-cccc-cccc-cccccccc}

DevicePropertyClassName

以文本格式请求设备的安装类的名称。 PropertyBuffer 指向以 NULL 结尾的 WCHAR 字符串。

DevicePropertyCompatibleIDs

请求设备报告的 兼容 IDPropertyBuffer 指向REG_MULTI_SZ值。

DevicePropertyDeviceDescription

请求描述设备的字符串,例如通常由制造商定义的“Microsoft PS/2 端口鼠标”。 PropertyBuffer 指向以 NULL 结尾的 WCHAR 字符串。

DevicePropertyDriverKeyName

请求特定于驱动程序的注册表项的名称。 PropertyBuffer 指向以 NULL 结尾的 WCHAR 字符串。

DevicePropertyEnumeratorName

请求设备的枚举器的名称,例如“PCI”或“root”。 PropertyBuffer 指向以 NULL 结尾的 WCHAR 字符串。

DevicePropertyFriendlyName

请求一个字符串,该字符串可用于区分两个类似的设备,通常由类安装程序定义。 PropertyBuffer 指向以 NULL 结尾的 WCHAR 字符串。

DevicePropertyHardwareID

请求标识设备的设备提供 的硬件 ID。 PropertyBuffer 指向REG_MULTI_SZ值。

DevicePropertyInstallState

请求设备的安装状态。 安装状态作为 DEVICE_INSTALL_STATE 枚举值返回。

DevicePropertyLegacyBusType

请求总线类型,例如 PCIBus 或 PCMCIABus。 PropertyBuffer 指向 INTERFACE_TYPE 枚举值。

DevicePropertyLocationInformation

请求有关设备在总线上的位置的信息;此信息的解释是特定于总线的。 PropertyBuffer 指向以 NULL 结尾的 WCHAR 字符串。

DevicePropertyManufacturer

请求标识设备制造商的字符串。 PropertyBuffer 指向以 NULL 结尾的 WCHAR 字符串。

DevicePropertyPhysicalDeviceObjectName

请求此设备的 PDO 的名称。 PropertyBuffer 指向以 NULL 结尾的 WCHAR 字符串。

DevicePropertyRemovalPolicy

请求设备的当前删除策略。 操作系统使用此值作为一个提示,以确定如何正常删除设备。 PropertyBuffer 参数指向DEVICE_REMOVAL_POLICY枚举值。

DevicePropertyUINumber

请求与可在用户界面中显示的设备关联的数字。 PropertyBuffer 指向 ULONG 值。

此数字通常是用户感知到的槽号,例如在开发板上的插槽旁边打印的数字,或使用户更容易找到物理设备的其他数字。 如果设备位于没有 UI 编号约定的总线上,或者设备的总线驱动程序无法确定 UI 编号,则此值0xFFFFFFFF。

[in] BufferLength

指定调用方提供的 PropertyBuffer 的大小(以字节为单位)。

[out, optional] PropertyBuffer

指向调用方提供的缓冲区的指针,用于接收属性信息。 可以从可分页内存分配缓冲区。 缓冲区的类型由 DeviceProperty 确定 (如上) 所示。

[out] ResultLength

指向 ULONG 的指针,用于接收 PropertyBuffer 中返回的属性信息的大小。 如果 IoGetDeviceProperty 返回STATUS_BUFFER_TOO_SMALL,则会将此参数设置为所需的缓冲区长度。

返回值

如果调用成功,IoGetDeviceProperty 将返回STATUS_SUCCESS。 可能的错误返回值包括以下内容。

返回代码 说明
STATUS_BUFFER_TOO_SMALL PropertyBuffer 处的缓冲区太小。 ResultLength 指向所需的缓冲区长度。
STATUS_INVALID_PARAMETER_2 给定 的 DeviceProperty 不是此例程处理的属性之一。
STATUS_INVALID_DEVICE_REQUEST 可能指示给定的 DeviceObject 不是有效的 PDO 指针。

注解

IoGetDeviceProperty 从注册表中检索设备设置信息。 使用此例程(而不是直接访问注册表)使驱动程序免受平台差异和注册表结构中可能更改的隔离。

对于许多 DeviceProperty 请求,可能需要对 IoGetDeviceProperty 进行两次或更多次调用来确定所需的 BufferLength。 第一次调用应使用最佳猜测值。 如果返回状态为STATUS_BUFFER_TOO_SMALL,则驱动程序应释放其当前缓冲区,分配 ResultLength 中返回的大小的缓冲区,然后再次调用 IoGetDeviceProperty 。 由于某些设置属性是动态的,因此在返回所需大小和驱动程序再次调用此例程之间,数据大小可能会更改。 因此,驱动程序应在循环中调用 IoGetDeviceProperty ,该循环将一直运行到返回状态不STATUS_BUFFER_TOO_SMALL。

支持旧式总线和 PnP 总线上的设备的函数驱动程序可以使用 DevicePropertyBusNumberDevicePropertyBusTypeGuidDevicePropertyLegacyBusType 属性来区分总线。

要求

要求
最低受支持的客户端 从 Windows 2000 开始可用。
目标平台 通用
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 符合性规则 HwStorPortProhibitedDDI (storport) PowerIrpDDis (wdm)

另请参阅

CM_RESOURCE_LIST

DEVICE_REMOVAL_POLICY

ExAllocatePoolWithTag

GUID

INTERFACE_TYPE

IO_RESOURCE_REQUIREMENTS_LIST