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)

另請參閱

IoAttachDevice

IoDetachDevice

IoGetDeviceObjectPointer

ObDereferenceObject