IoAttachDeviceToDeviceStackSafe 函数 (ntddk.h)
IoAttachDeviceToDeviceStackSafe 例程将调用方的设备对象附加到驱动程序堆栈中最顶层的设备对象。
语法
NTSTATUS IoAttachDeviceToDeviceStackSafe(
[in] PDEVICE_OBJECT SourceDevice,
[in] PDEVICE_OBJECT TargetDevice,
[out] PDEVICE_OBJECT *AttachedToDeviceObject
);
参数
[in] SourceDevice
指向调用方创建的设备对象的指针。
[in] TargetDevice
指向 堆栈中 SourceDevice 对象要附加到的设备对象的指针。
[out] AttachedToDeviceObject
输入时,此参数指定 SourceDevice-DeviceExtension-AttachedToDeviceObject>> 的地址,该地址必须包含 NULL 指针。 在输出时,此参数接收指向 SourceDevice 所附加到的设备对象的指针。
返回值
如果 SourceDevice 成功附加到 TargetDevice 上方,IoAttachDeviceToDeviceStackSafe 将返回STATUS_SUCCESS;否则返回STATUS_NO_SUCH_DEVICE。
注解
与 IoAttachDeviceToDeviceStack 一样, IoAttachDeviceToDeviceStackSafe 在驱动程序之间建立分层,以便将相同的 IRP 发送到堆栈中的每个驱动程序。 但是,与 IoAttachDeviceToDeviceStack 不同, IoAttachDeviceToDeviceStackSafe 具有附加参数 AttachedToDeviceObject,筛选器驱动程序使用该参数传递 SourceDevice 对象的 AttachedToDeviceObject 字段的地址。 IoAttachDeviceToDeviceStackSafe 在保留 I/O 系统数据库锁时更新此字段。 由于它持有此锁, IoAttachDeviceToDeviceStackSafe 可避免在 SourceDevice 对象在其 AttachedToDeviceObject 字段更新之前收到 IRP 时可能出现的争用条件。
文件系统筛选器驱动程序调用 IoAttachDeviceToDeviceStackSafe 以将自己的筛选器设备对象 (SourceDevice) 附加到属于文件系统或其他筛选器驱动程序的设备对象 (TargetDevice) 上方。 发送到 AttachedToDeviceObject 的后续 I/O 请求首先由筛选器驱动程序接收,筛选器驱动程序会处理这些请求,并通过调用 IoCallDriver 将它们转发到堆栈中的下一个驱动程序。
如果 TargetDevice 指定的设备对象当前位于驱动程序堆栈的顶部,则 SourceDevice 将直接附加到 TargetDevice。 在这种情况下, TargetDevice 和返回的 AttachedToDeviceObject 指针相等。
如果驱动程序堆栈中的 TargetDevice 上方已附加了一个或多个筛选器设备对象, IoAttachDeviceToDeviceStackSafe 会将 SourceDevice 附加到最顶层的筛选器设备对象。 在 AttachedToDeviceObject 中返回指向后者的指针。
在附加到堆栈顶部后, SourceDevice 立即占据驱动程序堆栈的顶部。 但请注意,这并不一定意味着 SourceDevice 将保留在驱动程序堆栈的顶部。 其他筛选器可以在堆栈中的 SourceDevice 上方附加其自己的筛选器设备对象。
IoAttachDeviceToDeviceStackSafe 将 SourceDevice 指向的设备对象的 AlignmentRequirement 成员设置为下一个下限设备对象中相应的 值,并将 SourceDevice 中的 StackSize 设置为下一个下限对象中的值加 1。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 此例程适用于 Windows 2000 Service Pack 4 (SP4) 以及 Windows XP 及更高版本的更新汇总。 |
目标平台 | 通用 |
标头 | ntddk.h (包括 Ntddk.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
DDI 符合性规则 | HwStorPortProhibitedDDI (storport) |