IoStartPacket 函数 (ntifs.h)

IoStartPacket 例程使用给定的 IRP 调用驱动程序的 StartIo 例程,或者将 IRP 插入到与给定设备对象关联的设备队列(如果设备已经繁忙)。

语法

void IoStartPacket(
  [in]           PDEVICE_OBJECT DeviceObject,
  [in]           PIRP           Irp,
  [in, optional] PULONG         Key,
  [in, optional] PDRIVER_CANCEL CancelFunction
);

参数

[in] DeviceObject

指向 IRP 的目标设备对象的指针。

[in] Irp

指向要处理的 IRP 的指针。

[in, optional] Key

指向一个值的指针,该值确定将数据包插入设备队列的位置。 如果为零,数据包将插入到设备队列的末尾。

[in, optional] CancelFunction

指定驱动程序提供的 Cancel 例程的入口点。

返回值

备注

如果驱动程序已忙于处理目标设备对象的请求,则数据包在设备队列中排队。 否则,此例程使用指定的 IRP 调用驱动程序的 StartIo 例程。

如果提供了非 NULL CancelFunction 指针,则会在 IRP 中设置该指针,以便在 IRP 完成之前取消该 IRP 时调用驱动程序的 Cancel 例程。

没有 StartIo 例程的驱动程序不能调用 IoStartPacket

IoStartPacket 的调用方必须在 IRQL <= DISPATCH_LEVEL 运行。 通常,此例程是从设备驱动程序的 Dispatch 例程(IRQL = PASSIVE_LEVEL)调用的。

要求

   
最低受支持的客户端 Windows 2000
目标平台 通用
标头 ntifs.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (请参阅备注部分)

另请参阅

DEVICE_OBJECT

IoMarkIrpPending

IoSetCancelRoutine

IoStartNextPacket

IoStartNextPacketByKey