次の方法で共有


KsProbeStreamIrp 関数 (ks.h)

KsProbeStreamIrp 関数は、渡されたフラグに基づいて、指定された IRP の入力バッファーと出力バッファーに指定された変更を加え、ストリーム ヘッダーを検証します。 これは、例外処理をローカライズしたり、IRP で非同期作業を実行したりする場合に便利です。 結果として得られる IRP は、基本的にMETHOD_OUT_DIRECT形式またはMETHOD_IN_DIRECT形式になります。ただし、この関数に渡されるフラグまたはストリーム ヘッダー内のフラグに応じて、データ バッファーへのアクセスが IoModifyAccess になる場合があります。

構文

KSDDKAPI NTSTATUS KsProbeStreamIrp(
  [in, out]      PIRP  Irp,
  [in]           ULONG ProbeFlags,
  [in, optional] ULONG HeaderSize
);

パラメーター

[in, out] Irp

入力バッファーと出力バッファーをマップする IRP を指定します。 バッファーをプローブするときに、IRP のリクエスター モードが使用されます。

[in] ProbeFlags

ストリーミング IRP をプローブする方法を指定するフラグを指定します。フラグを次の表に示します。

[in, optional] HeaderSize

このクライアントに渡された各ヘッダーを検証するサイズを指定します。検証を行う必要がない場合は 0 を指定します。 使用する場合、渡されるバッファー全体がこのヘッダー サイズの倍数であると見なされます。ただし、バッファーに 1 つの書式変更ヘッダーが含まれていないと見なされます。

戻り値

KsProbeStreamIrp 関数は、成功した場合はSTATUS_SUCCESSを返すか、メモリまたはアクセス エラーを返します。

注釈

関数が MDL の割り当てにのみ使用され、アドレスをプローブおよびロックしない場合、呼び出し元には MDL をクリーンするための完了ルーチンが必要です。 たとえば、Just-In-Time ロック メカニズムでは MDL リストを割り当てることができますが、必要に応じてメモリのみをロックできます。 クライアントは、IRP が完了する前に部分的にロックされた MDL リストを削除するクリーンアップ コードを提供する必要があります (おそらく、完了ルーチン)。

ヘッダーがシステム バッファーに既にコピーされているように見える場合は、もう一度検証されません。 一般に、IRP を使用して KsProbeStreamIrp 関数を複数回呼び出すことは有害ではありません。 関数を呼び出した後、ストリーム ヘッダーは PIRP で使用できます。AssociatedIrp.SystemBuffer。 ストリーム バッファーの MDL が割り当てられている場合は、PIRP を介して使用できます。MdlAddress。

ProbeFlags 変数には、次の定義が使用されます。

ProbeFlags 説明
KSPROBE_READ 操作がデバイスで読み取られたストリームであることを示します。 既定値です。
KSPROBE_WRITE 操作がデバイスでのストリーム書き込みであることを示します。
KSPROBE_ALLOCATEMDL まだ割り当てられていない場合は、ストリーム バッファーに MLS を割り当てる必要があることを示します。 ストリーム バッファーが存在しない場合、フラグは無視されます。 KSPROBE_PROBEANDLOCKがこのフラグと同時に指定されていない場合は、すべての MDL が正常にプローブおよびロックされていない場合に MDL をクリーンするために、呼び出し元に完了ルーチンが必要です。
KSPROBE_PROBEANDLOCK KSPROBE_ALLOCATEMDLが設定されている場合は、ストリーム バッファーの MDL によって参照されるメモリをプローブしてロックする必要があることを示します。 MDL 割り当てフラグが設定されていない場合、MDL 割り当てが以前に行われた場合でも、このフラグは無視されます。 プローブの方法は、渡される IRP の種類によって決まります。 書き込み操作では、 IoReadAccess が使用されます。 読み取り操作では、 IoWriteAccess が使用されます。 データを送信したクライアントが非ページ プールを使用している場合は、プローブとロックではなく、適切な MDL が初期化されます。
KSPROBE_SYSTEMADDRESS 呼び出し元が別の手順でこれを行う必要がないように、チェーン内の各 MDL のシステム アドレスを取得します。 これは、MCL が以前にプローブされている場合でも、プローブとロック フラグが設定されていない場合は無視されます。
KSPROBE_ALLOWFORMATCHANGE Stream書き込みの場合は、ストリーム ヘッダーで KSSTREAM_HEADER_OPTIONSF_TYPECHANGED フラグを設定できます。 これは、拡張ヘッダー サイズが示された場合でも、ストリーム ヘッダーが拡張長ではないことを意味します。 また、この場合、IRP に含まれるストリーム ヘッダーは 1 つだけである可能性があります。 このヘッダーに関連付けられているバッファーには、新しいデータ形式が含まれています。 システム メモリ データ ストリームの場合、バッファーは、データ ストリームに含まれていないため、ネゴシエートされたアロケーターから取得しないでください。

要件

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