IRP の主要な関数コード
すべての IRP の各ドライバー固有の I/O スタックの場所 (IO_STACK_LOCATION) には、主要な関数コード (IRP_MJ_XXX) が含まれています。このコードは、ドライバーまたは基となっているデバイス ドライバーが、I/O 要求を満たすためにどのような操作を実行する必要があるかを、ドライバーに指示します。 各カーネル モード ドライバーは、サポートする必要がある主要な関数コードのディスパッチ ルーチンを提供する必要があります。
ドライバーが指定された IRP_MJ_XXX コードに対して実行する特定の操作は、特に IRP_MJ_DEVICE_CONTROL 要求と IRP_MJ_INTERNAL_DEVICE_CONTROL 要求について当てはまりますが、基になるデバイスによって多少異なります。 たとえば、キーボード ドライバーに送信される要求は、ディスク ドライバーに送信される要求とは必然的に多少異なります。 ですが、I/O マネージャーは、システム定義の各主要な関数コードに対して、パラメーターと I/O スタックの場所の内容を定義します。
上位レベルのすべてのドライバーは、各入力 IRP で、またはドライバーによって作成された IRP (上位レベルのドライバーが入力 IRP を保持する場合) を使用して、次の下位レベル ドライバー用の IRP で適切な I/O スタックの場所を設定し、 IoCallDriver を呼び出す必要があります。 そのため、すべての中間ドライバーは、基になるデバイス ドライバーが処理する主要な関数コードごとにディスパッチ ルーチンを提供する必要があります。 これが行われないと、アプリケーションまたは上位レベルのドライバーが基になるデバイス ドライバーに I/O 要求を送信しようとするたびに、新しい中間ドライバーが、"チェーンを切断" することになります。
ファイル システム ドライバーとレガシ ファイル システム フィルター ドライバーは、システム定義の IRP_MJ_XXX 関数コードの必須のサブセットも処理します。その中の一部は、従属 IRP_MN_XXX 関数コードを持ちます。 これらの IRP を処理する方法の詳細については、「ファイル システム ドライバーとレガシ FS フィルター ドライバーの IRP の主要な関数コード」を参照してください。
ドライバーは、次の主要な関数コードの一部またはすべてを使用して設定された IRP を処理します。
IRP_MJ_INTERNAL_DEVICE_CONTROL
このセクションで説明する入力パラメーターと出力パラメーターは、IRP の関数固有のパラメーターです。
IRP の詳細については、「IRP の処理」を参照してください。