IoCallDriver routine
IoCallDriver 例程发送一个IRP给指定设备对象关联的驱动程序。
Syntax
NTSTATUS IoCallDriver(
_In_ PDEVICE_OBJECT DeviceObject,
_Inout_ PIRP Irp
);
Parameters
DeviceObject [in]
指向一个 device object, 代表了请求的IO操作的目标设备。
Irp [in, out]
IRP指针
Return value
IoCallDriver returns the NTSTATUS value that a lower driver set in the I/O status block for the given request, or STATUS_PENDING if the request was queued for additional processing.
返回底层驱动改程序为给定的请求在I/O status block 设置的一个值。或者是STATUS_PENDING,如果求被排队作额外的处理。
Remarks
在调用 IoCallDriver之前,调用者驱动程序必须为目标驱动程序在IRP中安装I/O stack location。更多信息见Passing IRPs Down the Driver Stack.
IoCallDriver 将为被调用驱动程序准备的IO_STACK_LOCATION 结构的DeviceObject成员赋值为DeviceObject 输入参数。一个传递给IoCallDriver 的IRP在被传递给低层之后,该IRP不再能被高层级的驱动程序访问。除非高层级驱动程序调用了IoSetCompletionRoutine 去为IRP安装一个IoCompletion 例程。 如果例程存在,传递给IoCompletion 例程的输入参数IRP拥有它的被底层驱动程序设置的 I/O status block 。并且所有低层级驱动程序的I/O stack locations 给填充0,为 Windows Server 2003, Windows XP, and Windows 2000 编写的驱动程序必须使用 PoCallDriver 传递电源 IRPs (IRP_MJ_POWER) 而不是 IoCallDriver 。更多信息见 Calling IoCallDriver vs. Calling PoCallDriver.