次の方法で共有


IoStartNextPacket 関数 (ntifs.h)

IoStartNextPacket ルーチンは、指定されたデバイス オブジェクトの関連付けられたデバイス キューから次の IRP (存在する場合) をデキューし、ドライバーの StartIo ルーチンを呼び出します。

構文

void IoStartNextPacket(
  [in] PDEVICE_OBJECT DeviceObject,
  [in] BOOLEAN        Cancelable
);

パラメーター

[in] DeviceObject

IRP をデキューするデバイス オブジェクトへのポインター。

[in] Cancelable

デバイス キュー内の IRP を取り消すことができるかどうかを指定します。

戻り値

なし

解説

ターゲット DeviceObject のデバイス キューに現在 IRP がない場合、このルーチンは単に呼び出し元に制御を返します。

ドライバーが IoStartPacket を呼び出したときにキャンセル ルーチンへのポインターを渡した場合、このルーチンの Cancelable パラメーターで TRUE を渡す必要があります。 Cancelable が TRUE の場合、I/O マネージャーはキャンセル スピン ロックを使用して、デバイス キューと現在の IRP を保護します。

StartIo ルーチンを持たないドライバーは、IoStartNextPacket を呼び出すことができません。

StartIo ルーチンから IoStartNextPacket を呼び出すドライバーは、再帰の問題に注意する必要があります。 ドライバーが StartIo ルーチンから連続して多数の要求で IoStartNextPacket を呼び出すことができる場合 (たとえば、デバイス エラーが発生し、ドライバーがデバイス キューをクリアしている場合)、IoSetStartIoAttributes ルーチンを使用してデバイスの DeferredStartIo 属性を設定する必要があります。 この属性は、前の StartIo 呼び出しが返されるまで、次のパケットが発行されないことを保証します。

IoStartNextPacket の呼び出し元は IRQL = DISPATCH_LEVELで実行されている必要があります。 通常、このルーチンはデバイス ドライバーの DpcForIsr または CustomDpc ルーチンから呼び出され、どちらも IRQL = DISPATCH_LEVELで実行されます。

要件

要件
サポートされている最小のクライアント Windows 2000
対象プラットフォーム ユニバーサル
Header ntifs.h (Wdm.h、Ntddk.h、Ntifs.h を含みます)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL DISPATCH_LEVEL (「解説」セクションを参照)
DDI コンプライアンス規則 HwStorPortProhibitedDDIs(storport)IrqlDispatch(storport)、IrqlDispatch(storport)、 IrqlDispatch(wdm)SpinLockSafe(storport)、SpinLockSafe(storport)、 SpinLockSafe(wdm)StartIoRecursion(wdm)

こちらもご覧ください

DEVICE_OBJECT

IoSetStartIoAttributes

IoStartNextPacketByKey

IoStartPacket