(wdm.h) IoGetDeviceProperty 函式

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 中特定總線驅動程式儲存的資訊:

匯流排 Description
1394 不會提供地址,因為位址是變動的。 默認為 0xFFFFFFFF。
EISA 插槽號碼 (0-F) 。
IDE 若為 IDE 裝置,位址會包含目標標識碼和 LUN。 若為 IDE 通道,位址為零或一個 (0 = 主要通道,而 1 = 次要通道) 。
ISApnp 不提供位址。 默認為 0xFFFFFFFF。
PC Card (PCMCIA) 套接字號碼 (通常會0x00或0x40) 。
PCI 高字的裝置編號,以及低字的函式編號。
SCSI 目標標識碼。
USB 連接埠號碼。

DevicePropertyBootConfiguration

以原始形式要求韌體指派給裝置的硬體資源。 PropertyBuffer 指向 CM_RESOURCE_LIST 結構。

DevicePropertyBootConfigurationTranslated

韌體指派給裝置的硬體資源,格式為已轉譯。 PropertyBuffer 指向 CM_RESOURCE_LIST 結構。

DevicePropertyBusNumber

要求裝置所連線的舊版總線號碼。 PropertyBuffer 指向 ULONG。

DevicePropertyBusTypeGuid

要求裝置所連線總線的 GUID。 系統定義的總線類型 GUID 會列在 Wdmguid.h 頭檔中。 PropertyBuffer 指向 GUID,這是包含二進位格式 GUID 的 16 位元組結構。

DevicePropertyClassGuid

要求裝置設定類別的 GUID。 PropertyBuffer 指向 WCHAR 的 NULL 終止數位。 此例程會以字串格式傳回 GUID,其中每個 “c” 代表十六進位字元: {cccccccc-cccc-cccc-cc}

DevicePropertyClassName

以文字格式要求裝置的安裝類別名稱。 PropertyBuffer 指向 NULL 終止的 WCHAR 字串。

DevicePropertyCompatibleIDs

要求裝置所報告的 相容標識碼PropertyBuffer 指向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

要求裝置提供 的硬體 識別碼,以識別裝置。 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。 可能的錯誤傳回值包括下列專案。

傳回碼 Description
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 開始提供。
目標平台 Universal
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 合規性規則 HwStorPortProhibitedDDIs (storport) PowerIrpDDis (wdm)

另請參閱

CM_RESOURCE_LIST

DEVICE_REMOVAL_POLICY

ExAllocatePoolWithTag

GUID

INTERFACE_TYPE

IO_RESOURCE_REQUIREMENTS_LIST