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 |