共用方式為


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型別列舉值。

[in] BufferLength

指定呼叫端提供 PropertyBuffer的大小,以位元組為單位。

[out, optional] PropertyBuffer

呼叫端提供的緩衝區指標,以接收屬性資訊。 您可以從可分頁記憶體配置緩衝區。 緩衝區的類型取決於 DeviceProperty (請參閱上圖)。

[out] ResultLength

ULONG 的指標,接收在 PropertyBuffer 傳回之屬性資訊的大小,。 如果 IoGetDeviceProperty 傳回STATUS_BUFFER_TOO_SMALL,則會將此參數設定為所需的緩衝區長度。

傳回值

如果呼叫成功,IoGetDeviceProperty 會傳回STATUS_SUCCESS。 可能的錯誤傳回值包括下列專案。

傳回碼 描述
STATUS_BUFFER_TOO_SMALL 屬性Buffer 緩衝區太小。 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)
連結庫 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 合規性規則 HwStorPortProhibitedDIs(storport)PowerIrpDDis(wdm)

另請參閱

CM_RESOURCE_LIST

DEVICE_REMOVAL_POLICY

ExAllocatePoolWithTag

GUID

INTERFACE_TYPE

IO_RESOURCE_REQUIREMENTS_LIST