次の方法で共有


IoSetNextIrpStackLocation 関数 (wdm.h)

IoSetNextIrpStackLocation ルーチンは、ドライバーによって割り当てられた IRP 内の IRP スタックの場所を呼び出し元の IRP に設定します。

構文

void IoSetNextIrpStackLocation(
  [in, out] PIRP Irp
);

パラメーター

[in, out] Irp

スタックの場所を設定する IRP へのポインター。

戻り値

なし

解説

一般に、このルーチンはドライバーではほとんど使用しません。 これは主に、別のドライバーに送信するために割り当てた IRP 内の独自のスタックの場所を必要とするドライバーによって使用されます。

IoSetNextIrpStackLocation は一般に、次のいずれかの理由で必要ありません。

  • ドライバーは、別の上位レベルのドライバーから渡す IRP を受け取ったので、既にスタックの場所を所有しています。
  • または、ドライバーは IRP を割り当てたが、その IoCompletion ルーチンにアドレスを渡すことができるコンテキスト ブロックに必要なすべてのものを保持できるため、独自のスタックの場所は必要ありません。
特に 、IoAllocateIrp または IoMakeAssociatedIrp を使用して IRP を割り当てる場合は、このルーチンが呼び出される場合は注意が必要です。 割り当てるドライバーのライターは、呼び出し元固有のスタックの場所が 、IoCallDriver で IRP を送信する下位レベルのドライバーで必要なスタックの場所の数に含まれていないことを覚えておく必要があります。 ドライバーは、いずれかのルーチンによって返される IRP で IoSetNextIrpStackLocation を呼び出す場合、IoAllocateIrp または IoMakeAssociatedIrp への呼び出しで、それ自体のスタックの場所を明示的に指定する必要があります。

ドライバーは、IoBuildAsynchronousFsdRequest、IoBuildDeviceIoControlRequest、または IoBuildSynchronousFsdRequest を呼び出すことによって、割り当てる IRP で IoSetNextIrpStackLocation を呼び出すことはできません。

要件

要件
サポートされている最小のクライアント Windows 2000 以降で使用できます。
対象プラットフォーム デスクトップ
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
IRQL 任意のレベル

こちらもご覧ください

IO_STACK_LOCATION

IoAllocateIrp

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoBuildSynchronousFsdRequest

IoCallDriver

IoSetCompletionRoutine