IoAttachDeviceToDeviceStack 函式 (wdm.h)
IoAttachDeviceToDeviceStack 例程會將呼叫端的裝置物件附加至鏈結中最高的裝置物件,並傳回先前最高裝置物件的指標。
語法
PDEVICE_OBJECT IoAttachDeviceToDeviceStack(
[in] PDEVICE_OBJECT SourceDevice,
[in] PDEVICE_OBJECT TargetDevice
);
參數
[in] SourceDevice
呼叫端所建立裝置物件的指標。
[in] TargetDevice
另一個驅動程式裝置物件的指標,例如先前呼叫 IoGetDeviceObjectPointer所傳回的指標。
傳回值
IoAttachDeviceToDeviceStack 會傳回 SourceDevice 所附加裝置物件的指標。 如果 TargetDevice 有額外的驅動程式分層,則傳回的裝置對象指標可能與 TargetDevice 不同。
IoAttachDeviceToDeviceStack 如果無法附加裝置物件,就會傳回 NULL ,例如,目標裝置正在卸除。
備註
IoAttachDeviceToDeviceStack 會在驅動程式之間建立分層,讓相同的 IRP 傳送至鏈結中的每個驅動程式。
中繼驅動程式可以在初始化期間使用此例程,將自己的裝置物件附加至另一個驅動程式的裝置物件。 傳送至 TargetDevice 的後續 I/O 要求會先傳送至中繼驅動程式。
這個例程會將 SourceDevice 中的 AlignmentRequirement 設定為下一個較低裝置物件中的值,並將 StackSize 設定為下一個較低物件的值加上一個。
驅動程式寫入器必須小心呼叫此例程 ,才能 在驅動程式之上必須分層的任何驅動程式。 IoAttachDeviceToDeviceStack 會將 SourceDevice 附加至鏈結中目前分層的最高裝置物件,而且無法判斷驅動程式是否以正確的順序分層。
藉由呼叫 IoGetDeviceObjectPointer 取得目標裝置指標的驅動程式,應該使用 IoGetDeviceObject 所傳回的檔案對象指標呼叫 ObDereferenceObject,在卸離檔案物件之前釋放其檔案對象的參考,例如,卸除這類較高層級驅動程式時。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 從 Windows 2000 開始提供。 |
目標平台 | Universal |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
DDI 合規性規則 | AddDevice (wdm) 、 HwStorPortProhibitedDIs (storport ) 、 PnpSameDeviceObject (wdm) |