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 设置为下一个下一个对象中的值。

驱动程序编写者必须注意在驱动程序之上必须分层的任何驱动程序 之前 调用此例程。 IoAttachDeviceToDeviceStackSourceDevice 附加到链中当前分层的最高设备对象,并且无法确定驱动程序是否按正确的顺序分层。

通过调用 IoGetDeviceObjectPointer 获取指向目标设备的指针的驱动程序应使用 IoGetDeviceObjectPointer 返回的文件对象指针调用 ObDereferenceObject,以便在分离自己的设备对象之前释放对文件对象的引用,例如,卸载此类更高级别的驱动程序时。

要求

要求
最低受支持的客户端 从 Windows 2000 开始可用。
目标平台 通用
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI 符合性规则 AddDevice (wdm) HwStorPortProhibitedDDi (storport) PnpSameDeviceObject (wdm)

另请参阅

IoAttachDevice

IoDetachDevice

IoGetDeviceObjectPointer

ObDereferenceObject