Share via


フレームワークでサポートされない IRP の処理

フレームワークは、IRP_MJ_FILE_SYSTEM_CONTROL または IRP_MJ_FLUSH_BUFFERS メジャー I/O ファンクション コード、あるいはファイル システムのドライバーまたは他の特別なドライバーが主に処理するその他のメジャー ファンクション コードが含まれた I/O 要求パケット (IRP) を処理しません。フレームワークでサポートされるかどうかを示す IRP の一覧については、「WDF_REQUEST_TYPE」(英語の可能性あり) を参照してください。

フレームワークは、これらの I/O ファンクション コードのいずれかが含まれた IRP を受信しても、その IRP を処理しません。ドライバーがフィルター ドライバーの場合、フレームワークはその IRP をドライバー スタックの次の下位ドライバーに渡します。ドライバーがフィルター ドライバーでない場合、フレームワークは IoCompleteRequest を呼び出し、状態の値が STATUS_INVALID_DEVICE_REQUEST の IRP の処理を実行します。

ドライバーがこれらの I/O ファンクション コードのいずれかが含まれた IRP を処理する必要がある場合、ドライバーは WdfDeviceInitAssignWdmIrpPreprocessCallbackを呼び出し、I/O ファンクション コードの EvtDeviceWdmIrpPreprocess イベント コールバック関数を登録する必要があります。

ドライバーは、EvtDeviceWdmIrpPreprocess コールバック関数を登録した I/O ファンクション コードが含まれた IRP を受信すると、フレームワークが IRP をコールバック関数に渡します。次に、コールバック関数が、「IRP を処理する WDM の規則」(英語の可能性あり) の説明に従って IRP を処理する必要があります。ドライバーは、IoCompleteRequest を呼び出して IRP の処理を実行するか、IoCallDriver を呼び出して次の下位ドライバーに IRP を渡す必要があります。

フレームワークでサポートされない IRP を処理する EvtDeviceWdmIrpPreprocess コールバック関数の例については、「Serial」のサンプル ドライバーを参照してください。