次の方法で共有


KsSetMajorFunctionHandler 関数 (ks.h)

KsSetMajorFunctionHandler 関数は、内部ディスパッチを使用するように指定されたメジャー関数のハンドラーを設定します。 非透過的なオブジェクト ヘッダーに含まれるKSDISPATCH_TABLEを介してルーティングされ、ファイル オブジェクト内の FsContext によって指される構造体内の最初の要素になります。 ディスパッチでは、テーブルと FsContext 構造体が、KsAllocateObjectHeaderを使用してデバイスによって初期化されていることを前提としています。

構文

KSDDKAPI NTSTATUS KsSetMajorFunctionHandler(
  [in] PDRIVER_OBJECT DriverObject,
  [in] ULONG          MajorFunction
);

パラメーター

[in] DriverObject

主な関数を処理するドライバー オブジェクトを指定します。

[in] MajorFunction

処理するメジャー関数識別子を指定します。 これにより、ドライバー オブジェクト内のメジャー関数ポインターが内部関数に設定され、KSDISPATCH_TABLE 関数にディスパッチされます。 このテーブルへのポインターは、ディスパッチされる特定の IRP のファイル オブジェクト内の FsContext が指す構造体の最初の要素であると見なされます。 有効なメジャー関数識別子が一覧表示されます。

識別子 形容
IRP_MJ_CREATE IRP を作成します。 この例では、フィルターの新しいインスタンスを作成したり、フィルターの下にピンやピンの下のクロックなどのオブジェクトを作成したりするために、作成要求を使用できます。 これは、ドライバー オブジェクトのエクステントの最初の要素に、渡された名前に基づいて作成するオブジェクトの種類を検索するために使用されるKSDEVICE_HEADER構造体が含まれていることを前提としています。 親ファイル オブジェクトが指定されている場合、そのオブジェクトのKSDISPATCH_TABLE。FsContext の ChildCreateHandlerTable を調べて、作成に使用するハンドラーを決定するか、デバイス オブジェクトのテーブルを使用します。
IRP_MJ_CLOSE IRP を閉じます。
IRP_MJ_DEVICE_CONTROL デバイス コントロール IRP。
IRP_MJ_READ IRP の読み取り。
IRP_MJ_WRITE IRP を書き込みます。
IRP_MJ_FLUSH_BUFFERS IRP をフラッシュします。
IRP_MJ_QUERY_SECURITY セキュリティ情報のクエリを実行します。
IRP_MJ_SET_SECURITY セキュリティ情報を設定します。
KSDISPATCH_FASTIO このフラグは、エントリが一般的なメジャー関数エントリではなく高速 I/O ディスパッチ テーブルを参照することを指定するために、MajorFunction 識別子に追加できます。 これは、IRP_MJ_READ、IRP_MJ_WRITE、またはIRP_MJ_DEVICE_CONTROLでのみ有効です。 ドライバーは、DriverObject->FastIoDispatch テーブルの作成を担当します。 通常のディスパッチと同様に、ドライバー オブジェクトにハンドラーが設定されている場合、エントリが DispatchFastIoDeviceControlFailure または同様の関数を指している場合でも、すべてのファイル オブジェクトでその高速 I/O を処理する必要があります。

戻り値

MajorFunction 識別子が有効な場合にSTATUS_SUCCESSを返します。

備考

ドライバー オブジェクトにメジャー関数ハンドラーが設定されている場合、エントリが KsDispatchInvalidDeviceRequest を指している場合でも、すべてのファイル オブジェクトがそのメジャー関数を処理必要があります。

KSDISPATCH_FASTIO

このフラグを使用して、IRP ベースのエントリではなく高速 I/O エントリを設定する必要があることを指定できます。

必要条件

要件 価値
ターゲット プラットフォーム 万国
ヘッダー ks.h (Ks.h を含む)
ライブラリ Ks.lib