Each driver-specific I/O stack ___location (IO_STACK_LOCATION) for every IRP contains a major function code (IRP_MJ_XXX), which tells the driver what operation it or the underlying device driver should carry out to satisfy the I/O request. 各カーネル モード ドライバーは、サポートする必要がある主要な関数コードのディスパッチ ルーチンを提供する必要があります。
The specific operations a driver carries out for a given IRP_MJ_XXX code depend somewhat on the underlying device, particularly for IRP_MJ_DEVICE_CONTROL and IRP_MJ_INTERNAL_DEVICE_CONTROL requests. たとえば、キーボード ドライバーに送信される要求は、ディスク ドライバーに送信される要求とは必ずしも多少異なります。 ただし、I/O マネージャーは、システム定義の各メジャー関数コードのパラメーターと I/O スタック位置の内容を定義します。
Every higher-level driver must set up the appropriate I/O stack ___location in IRPs for the next-lower-level driver and call IoCallDriver, either with each input IRP, or with a driver-created IRP (if the higher-level driver holds on to the input IRP). そのため、すべての中間ドライバーは、基になるデバイス ドライバーが処理する主要な関数コードごとにディスパッチ ルーチンを提供する必要があります。 それ以外の場合、アプリケーションまたは上位レベルのドライバーが基になるデバイス ドライバーに I/O 要求を送信しようとするたびに、新しい中間ドライバーが "チェーンを中断" します。
File system drivers and legacy file system filter drivers also handle a required subset of system-defined IRP_MJ_XXX function codes, some with subordinate IRP_MN_XXX function codes. これらの IRP を処理する方法の詳細については、 ファイル システム ドライバーとレガシ FS フィルター ドライバーの IRP の主要な関数コードを参照してください。
ドライバーは、次の主要な関数コードの一部またはすべてを使用して設定された IRP を処理します。
IRP_MJ_INTERNAL_DEVICE_CONTROL
このセクションで説明する入力パラメーターと出力パラメーターは、IRP の関数固有のパラメーターです。
For more information about IRPs, see Handling IRPs.