次の方法で共有


KsForwardAndCatchIrp 関数 (ks.h)

KsForwardAndCatchIrp 関数は、次のスタックの場所を初期化した後、指定したドライバーに IRP を転送し、そのドライバーから完了時に IRP の制御を回復します。 関数は、スタック可能なデバイスと共に使用され、通信にファイル オブジェクトを使用しません。

ファイル オブジェクトが使用されている場合、呼び出し元は KsForwardAndCatchIrp 関数を呼び出す前に、そのファイル オブジェクトを使用して現在のスタックの場所を初期化する必要があります。 関数は、コピー先の新しいスタックの場所があることを確認してから、コピーを試みます。 新しいスタックの場所がない場合、関数はSTATUS_INVALID_DEVICE_REQUESTを返します。 新しいスタックの場所が存在するかどうかに関係なく、IRP は完了しません。

構文

KSDDKAPI NTSTATUS KsForwardAndCatchIrp(
  [in] PDEVICE_OBJECT DeviceObject,
  [in] PIRP           Irp,
  [in] PFILE_OBJECT   FileObject,
  [in] KSSTACK_USE    StackUse
);

パラメーター

[in] DeviceObject

IRP を転送するデバイスを指定します。

[in] Irp

指定したドライバーに転送される IRP を指定します。

[in] FileObject

次のスタックの場所にコピーするファイル オブジェクト値を指定します。 ファイル オブジェクトを設定するために NULL を指定できますが、値は常に次のスタックの場所にコピーされます。 現在のファイル オブジェクトを保持する場合は、このパラメーターで渡す必要があります。

[in] StackUse

KSSTACK_USEによって列挙される値を指定します。 値が KsStackCopyToNewLocation の場合、パラメーターは次のスタックの場所にコピーされます。 値が KsStackReuseCurrentLocation の場合、IRP が転送され、スタックの場所が現在の場所に返されるときに、現在のスタックの場所が再利用されます。 値が KsStackUseNewLocation の場合、新しいスタックの場所はそのまま使用されます。

戻り値

KsForwardAndCatchIrp 関数は、IoCallDriver の結果を返すか、スタックの深さがこれ以上使用できない場合は無効な状態を返します。

注釈

列挙KSSTACK_USE型は、IRP を次のドライバーに転送するときに IRP スタックを使用する方法を指定します。

列挙 説明
KsStackCopyToNewLocation パラメーターを次のスタックの場所にコピーすることを示します。
KsStackReuseCurrentLocation 現在のスタックの場所を再利用することを示します。
KsStackUseNewLocation 次のスタックの場所を変更せずに使用することを示します。

要件

要件
対象プラットフォーム ユニバーサル
Header ks.h (Ks.h を含む)
Library Ks.lib