フレームワークでサポートされていない IRP の処理
[KMDF のみに適用]
フレームワークは、次の主要な IRP コードを持つ I/O リクエストをサポートしていません。
- IRP_MJ_CREATE_MAILSLOT
- IRP_MJ_CREATE_NAMED_PIPE
- IRP_MJ_DEVICE_CHANGE
- IRP_MJ_DIRECTORY_CONTROL
- IRP_MJ_FILE_SYSTEM_CONTROL
- IRP_MJ_FLUSH_BUFFERS
- IRP_MJ_LOCK_CONTROL
- IRP_MJ_QUERY_EA
- IRP_MJ_QUERY_INFORMATION
- IRP_MJ_QUERY_QUOTA
- IRP_MJ_QUERY_SECURITY
- IRP_MJ_QUERY_VOLUME_INFORMATION
- IRP_MJ_SET_EA
- IRP_MJ_SET_INFORMATION
- IRP_MJ_SET_QUOTA
- IRP_MJ_SET_SECURITY
- IRP_MJ_SET_VOLUME_INFORMATION
フレームワークがこれらの I/O 関数コードのいずれかを含む IRP を受信した場合、フレームワークは IRP を処理しません。 ドライバーがフィルター ドライバーである場合、フレームワークは、ドライバー スタック内の次の下位ドライバーに IRP を渡します。 ドライバーがフィルター ドライバーでない場合、フレームワークはIoCompleteRequestを呼び出して、STATUS_INVALID_DEVICE_REQUESTのステータス値でIRPを完了します。
ドライバーがこれらの I/O 関数コードのいずれかを含む IRP を処理する必要がある場合、ドライバーは WdfDeviceInitAssignWdmIrpPreprocessCallbackを呼び出して、 I/O 関数コード用のEvtDeviceWdmIrpPreprocessイベント コールバック関数を登録する必要があります。
ドライバーがEvtDeviceWdmIrpPreprocessコールバック関数を登録したI/O 関数コードを含む IRP を受信した場合、フレームワークは IRP をコールバック関数に渡します。 コールバック関数は、 IRPsを処理するための WDM ルールに従ってIRPを処理する必要があります。 ドライバーは、IRP を完了するためにIoCompleteRequestを呼び出す必要があります。または、次の下位ドライバーに IRP を渡すためにIoCallDriverを呼び出す必要があります。
フレームワークがサポートしていない IRP を処理するEvtDeviceWdmIrpPreprocess コールバック関数の例については、 シリアルサンプル ドライバーをご参照ください。