IoAllocateIrp 関数 (wdm.h)

IoAllocateIrp ルーチンは、呼び出し元の下に階層化された各ドライバーの I/O スタックの場所の数と、必要に応じて呼び出し元の I/O スタックの場所の数を指定して、IRP を割り当てます。 「IoAllocateIrpEx」も参照してください。

構文

PIRP IoAllocateIrp(
  [in] CCHAR   StackSize,
  [in] BOOLEAN ChargeQuota
);

パラメーター

[in] StackSize

IRP に割り当てる I/O スタックの場所の数を指定します。 この値は、次の下位ドライバーのデバイス オブジェクトの StackSize と少なくとも等しい必要がありますが、この値より 1 大きい値を指定できます。 呼び出し元のドライバーは、それ自体の IRP にスタックの場所を割り当てる必要はありません。

[in] ChargeQuota

これを TRUE に設定すると、現在のプロセスのクォータに対して IRP に割り当てられたメモリが課金されます。 中間ドライバーで FALSE に設定する必要があります。 これは、ドライバーが別の IRP を割り当てる I/O 要求を開始するスレッドのコンテキストで呼び出される最上位レベルのドライバーによってのみ TRUE に設定できます。

戻り値

IoAllocateIrp は、非ページ システム領域から割り当てられた IRP へのポインターを返します。IRP を割り当てられなかった場合は NULL を 返します。

注釈

IoAllocateIrp ルーチンは、IRP をスレッドに関連付けません。 割り当てるドライバーは、I/O マネージャーに戻す代わりに IRP を解放する必要があります。

中間または最上位レベルのドライバーは 、IoAllocateIrp を呼び出して、下位レベルのドライバーに送信する要求の IRP を作成できます。 このようなドライバーは、IRP を初期化する必要があり、下位レベルのドライバーが要求の処理を完了したときに呼び出し元が IRP を破棄できるように、作成する IRP で IoCompletion ルーチンを設定する必要があります。

IoAllocateIrp は、IRP のメンバーを自動的に初期化します。 最初に使用する前に 、IoInitializeIrp を使用して IRP を初期化しないでください。 ( IoInitializeIrp を使用して、特定の特殊な状況で既に使用している IRP を再利用できます。詳細については、「 IRP の再利用 」を参照してください)。

中間または最上位レベルのドライバーは、 IoBuildDeviceIoControlRequestIoBuildAsynchronousFsdRequest 、または IoBuildSynchronousFsdRequest を呼び出して、下位レベルのドライバーに送信する要求を設定することもできます。 IoMakeAssociatedIrp を呼び出すことができるのは、最上位レベルのドライバーのみです。

要件

要件
サポートされている最小のクライアント Windows 2000 以降で使用できます。
対象プラットフォーム ユニバーサル
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI コンプライアンス規則 ForwardedAtBadIrqlAllocate(wdm)HwStorPortProhibitedDDIs(storport)IoAllocateComplete(wdm)IoAllocateForward(wdm)IoAllocateFree(wdm)IoAllocateIrpSignalEventInCompletion(wdm)IoAllocateIrpSignalEventInCompletion2(wdm)IoAllocateIrpSignalEventInCompletion3(wdm)IoAllocateIrpSignalEventInCompletionTimeout(wdm)IoFreeIrp(storport)IoReuseIrp(wdm)、、 MarkPower(wdm)MarkPowerDown(wdm)MarkQueryRelations(wdm)MarkStartDevice(wdm)SpNoWait(storport)StorPortStartIo(storport)

こちらもご覧ください

IO_STACK_LOCATION

IRP

IoAllocateIrpEx

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoBuildSynchronousFsdRequest

IoFreeIrp

IoMakeAssociatedIrp

IoReuseIrp

IoSetCompletionRoutine