KsStreamIo 関数 (ks.h)

KsStreamIo 関数は、指定されたファイル オブジェクトに対してストリームの読み取りまたは書き込みを実行します。 この関数は、可能であれば FastIoDispatch の使用を試みます。または、デバイス オブジェクトに対して読み取りまたは書き込み要求を生成します。

構文

KSDDKAPI NTSTATUS KsStreamIo(
  [in]           PFILE_OBJECT            FileObject,
  [in, optional] PKEVENT                 Event,
  [in, optional] PVOID                   PortContext,
  [in, optional] PIO_COMPLETION_ROUTINE  CompletionRoutine,
  [in, optional] PVOID                   CompletionContext,
  [in, optional] KSCOMPLETION_INVOCATION CompletionInvocationFlags,
  [out]          PIO_STATUS_BLOCK        IoStatusBlock,
  [in, out]      PVOID                   StreamHeaders,
  [in]           ULONG                   Length,
  [in]           ULONG                   Flags,
  [in]           KPROCESSOR_MODE         RequestorMode
);

パラメーター

[in] FileObject

I/O を実行するファイル オブジェクトを指定します。

[in, optional] Event

必要に応じて、I/O で使用するイベントを格納します。 何も渡されない場合、呼び出しは同期ファイル オブジェクト上にあるか、呼び出し元がファイル オブジェクトのイベントを待機していると見なされます。そうしないと、非同期的に完了できます。 を使用し、KSSTREAM_SYNCHRONOUS フラグが設定されていない場合、これはオブジェクト マネージャーによって割り当てられるイベントである必要があります。 呼び出し元が非同期 I/O を実行している場合は、ファイル オブジェクトのイベントを待機するか、このパラメーターにイベントを渡して待機する必要があります。 これが行われなかった場合、呼び出し元は、呼び出しによって IoStatusBlock がいつ更新されたかを知る方法はありません。

[in, optional] PortContext

必要に応じて、完了ポートのコンテキスト情報を格納します。

[in, optional] CompletionRoutine

必要に応じて、この IRP の完了ルーチンを指します。

[in, optional] CompletionContext

CompletionRoutine を指定すると、完了ルーチン コールバックにコンテキスト ポインターが提供されます。

[in, optional] CompletionInvocationFlags

完了ルーチンを呼び出すタイミングを指定する呼び出しフラグを指定します。 使用される値については、次の表を参照してください。

[out] IoStatusBlock

状態情報を返す場所。 これは、リクエスター モードに関係なく、常に有効なアドレスであると見なされます。 値は、呼び出しが状態を更新するまで有効なままである必要があります。 呼び出し元は、同期 I/O を実行するか、ファイル オブジェクトのイベントまたは Event パラメーターで渡されたイベントを待ってから、このアドレスが無効になることを許可する必要があります。

[in, out] StreamHeaders

ストリーム ヘッダーの一覧を指定します。 このアドレスとデータ バッファーのアドレスは、適切なアクセスのためにプローブされていると見なされます。 ストリーミング ヘッダーを送信するカーネル モード クライアントは、NonPagedPool メモリからヘッダーを割り当てる必要があります。

[in] Length

渡される StreamHeaders のサイズを指定します。

[in] Flags

I/O のさまざまなフラグを指定します。 使用される値については、次の表を参照してください。

[in] RequestorMode

IRP を生成する必要がある場合に配置するプロセッサ モードを示します。 この変数は、高速 I/O 呼び出しを実行できるかどうかを決定します。 リクエスター・モードがカーネル・モードではなく、前のモードである場合、高速入出力は使用できません。

戻り値

KsStreamIo 関数は、成功した場合はSTATUS_SUCCESSを返し、アクションが保留中の場合はSTATUS_PENDING、失敗した場合は I/O エラーを返します。

注釈

CompletionInvocationFlags 変数には次の列挙値が使用され、型は KSCOMPLETION_INVOCATION です。

CompletionInvocationFlags 説明
KsInvokeOnSuccess 成功した場合に完了ルーチンを呼び出します。
KsInvokeOnError エラー時に完了ルーチンを呼び出します。
KsInvokeOnCancel 取り消し時に完了ルーチンを呼び出します。

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

Flags 説明
KSSTREAM_READ IOCTL_KS_STREAMREAD IRP をビルドすることを指定します。 既定値です。
KSSTREAM_WRITE IOCTL_KS_STREAMWRITE IRP をビルドすることを指定します。
KSSTREAM_PAGED_DATA データがページング可能であることを指定します。 これは既定値であり、常に使用できます。
KSSTREAM_NONPAGED_DATA データが非ページであり、パフォーマンスの向上として使用できることを指定します。
KSSTREAM_SYNCHRONOUS IRP が同期的であることを指定します。 これは、 Event パラメーターが渡された場合、オブジェクト マネージャー イベントとして扱われず、参照も逆参照もされないことを意味します。

KSSTREAM_READは、KSPROBE_STREAMREADと同じです。

同様に、KSSTREAM_WRITE はKSPROBE_STREAMWRITEと同じです。

要件

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