必須のディスパッチ ルーチン
ほとんどのドライバーは、次の Dispatch ルーチンを処理する必要があります。
-
IRP_MJ_PNP は、PnP デバイス認識、ハードウェア構成、またはリソース割り当てに関連する要求を示します。 このような要求は、通常、PnP マネージャーまたは密接に結合された上位レベルのドライバーからデバイス ドライバーに送信されます。
-
IRP_MJ_POWER は、デバイスまたはシステムの電源状態に関連する要求を示します。 このような要求は、電源マネージャーまたは密接に結合された上位レベルのドライバーによってデバイス ドライバーに送信されます。
-
IRP_MJ_CREATE は、おそらくアプリケーションまたはサブシステム固有のドライバーに代わって、ユーザーモードで保護されたサブシステムが、ターゲット デバイス オブジェクトに関連付けられているファイル オブジェクトのハンドルを要求したか、上位レベルのドライバーがそのデバイス オブジェクトをターゲット デバイス オブジェクトに接続しているか、アタッチしていることを示します。
-
IRP_MJ_CLOSE は、ターゲット デバイス オブジェクトに関連付けられたファイル オブジェクトの最後のハンドルが閉じられ、解放されたことを示します。 すべての I/O 要求が完了したか、取り消されたため、ファイル オブジェクト ポインターへの未処理の参照はありません。
-
IRP_MJ_READ は、基になる物理デバイスからシステムにデータを転送するための I/O 要求を示します。
-
IRP_MJ_WRITE は、システムから基になる物理デバイスにデータを転送するための I/O 要求を示します。
-
IRP_MJ_DEVICE_CONTROL は、デバイスの種類固有の操作を指定するシステム定義のデバイスの種類固有の I/O 制御コードを含む要求を示します。 上位レベルのドライバーは、これらの IRP を基になるデバイス ドライバーに渡します。デバイス ドライバーは通常、デバイスにアクセスして要求を処理します。
-
IRP_MJ_INTERNAL_DEVICE_CONTROL は、ほとんどの場合、密接に結合された上位レベルのドライバーからデバイス ドライバーに送信された要求を示します。通常は、デバイスの種類固有またはデバイス固有の操作を要求する、プライベートに定義されたドライバー固有で、デバイス固有の I/O コントロール コードまたはデバイス固有の I/O コントロール コードを使用します。
システム定義の内部デバイス I/O 制御要求を処理するために必要なドライバーは、特定の SCSI ドライバー、キーボードまたはマウス デバイス ドライバー、そしてシステム提供のドライバーと相互運用する並列ドライバーなど、特定の種類のドライバーのみです。
-
IRP_MJ_SYSTEM_CONTROL は、ドライバーへの WMI 要求を指定するために使用します。 WMI の詳細については、「Windows Management Instrumentation」を参照してください。
ドライバーが提供する必要があるディスパッチ ルーチンは、基になる物理デバイスの種類と機能によって異なります。 ドライバーが処理する必要がある IRP の主要な関数コードに関するデバイスの種類固有の情報については、Windows ドライバー キット (WDK) のデバイスの種類に固有のドキュメントを参照してください。