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 總線上裝置的函式驅動程式可以使用 DevicePropertyBusNumber、DevicePropertyBusTypeGuid和 DevicePropertyLegacyBusType 属性來區分總線。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 從 Windows 2000 開始提供。 |
目標平臺 | 普遍 |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI 合規性規則 | HwStorPortProhibitedDIs(storport),PowerIrpDDis(wdm) |