WDM の IRP と WDF のイベント コールバック関数

カーネル モード ドライバー フレームワーク (KMDF) とユーザー モード ドライバー フレームワーク (UMDF) は、Windows IRP のサブセットをサポートします。 次の表に、主要な WDM IRP の種類と、対応するフレームワーク イベント コールバック関数の一覧を示します。 特に指定しない限り、コールバックは KMDF と UMDF の両方に適用されます。

主要な IRP コード WDF イベント コールバック関数
IRP_MJ_CLEANUP EvtFileCleanup
IRP_MJ_CLOSE EvtFileClose
IRP_MJ_CREATE EvtDeviceFileCreate または EvtIoDefault
IRP_MJ_CREATE_MAILSLOT 直接サポートなし。EvtDeviceWdmIrpPreprocess (KMDF のみ)を実装する
IRP_MJ_DEVICE_CHANGE 直接サポートなし。EvtDeviceWdmIrpPreprocess (KMDF のみ)を実装する
IRP_MJ_DEVICE_CONTROL EvtIoDeviceControl または EvtIoDefault
IRP_MJ_DIRECTORY_CONTROL 直接サポートなし。EvtDeviceWdmIrpPreprocess (KMDF のみ)を実装する
IRP_MJ_FILE_SYSTEM_CONTROL 直接サポートなし。EvtDeviceWdmIrpPreprocess (KMDF のみ)を実装する
IRP_MJ_FLUSH_BUFFERS 直接サポートなし。EvtDeviceWdmIrpPreprocess (KMDF のみ)を実装する
IRP_MJ_INTERNAL_DEVICE_CONTROL EvtIoInternalDeviceControl または EvtIoDefault
IRP_MJ_LOCK_CONTROL 直接サポートなし。EvtDeviceWdmIrpPreprocess (KMDF のみ)を実装する
IRP_MJ_PNP 多数:KMDF Callbacks for IRP_MJ_PNP コールバックをご参照ください。
IRP_MJ_POWER 多数:IRP_MJ_POWERのKMDF コールバックをご参照ください。
IRP_MJ_QUERY_EA 直接サポートなし。EvtDeviceWdmIrpPreprocess (KMDF のみ)を実装する
IRP_MJ_QUERY_INFORMATION 直接サポートなし。EvtDeviceWdmIrpPreprocess (KMDF のみ)を実装する
IRP_MJ_QUERY_QUOTA 直接サポートなし。EvtDeviceWdmIrpPreprocess (KMDF のみ)を実装する
IRP_MJ_QUERY_SECURITY 直接サポートなし。EvtDeviceWdmIrpPreprocess (KMDF のみ)を実装する
IRP_MJ_QUERY_VOLUME_INFORMATION 直接サポートなし。EvtDeviceWdmIrpPreprocess (KMDF のみ)を実装する
IRP_MJ_READ EvtIoRead または EvtIoDefault
IRP_MJ_SET_EA 直接サポートなし。EvtDeviceWdmIrpPreprocess (KMDF のみ)を実装する
IRP_MJ_SET_INFORMATION 直接サポートなし。EvtDeviceWdmIrpPreprocess (KMDF のみ)を実装する
IRP_MJ_SET_QUOTA 直接サポートなし。EvtDeviceWdmIrpPreprocess (KMDF のみ)を実装する
IRP_MJ_SET_SECURITY 直接サポートなし。EvtDeviceWdmIrpPreprocess (KMDF のみ)を実装する
IRP_MJ_SET_VOLUME_INFORMATION 直接サポートなし。EvtDeviceWdmIrpPreprocess (KMDF のみ)を実装する
IRP_MJ_SHUTDOWN

コントロール デバイス オブジェクトの場合は、EvtDeviceShutdownNotification (KMDF のみ)を実装 します

すべてのプラグ アンド プレイデバイス オブジェクトの場合:サポートされていません。EvtDeviceWdmIrpPreprocess (KMDF のみ) を実装します。

IRP_MJ_SYSTEM_CONTROL WDFWMIPROVIDER オブジェクトと WDFWMIINSTANCE オブジェクトを作成し、EvtWmiXxx (KMDF のみ) コールバックを実装します。
IRP_MJ_WRITE EvtIoWrite または EvtIoDefault

IRP_MJ_PNPの KMDF コールバック

次の表に、実行順に、IRP_MJ_PNP のマイナー IRP コードに対応する KMDF コールバックを示します。 矢印は、WDM FDO がスタックを上下に移動する IRP を処理するかどうかを示します。

注意 KMDF ドライバーでは、プラグ アンド プレイと電源管理は統合された操作であり、ドライバーは個々のマイナー IRP_MJ_PNP または IRP_MJ_POWER 要求を受け取りません。 代わりに、フレームワークは、電源投入時にコア コールバックのセットと、対応するセットを電源ダウン時に呼び出し、個々のプラグ アンド プレイ要求に応じて、このコア セットの前後に追加のコールバックを呼び出します。 電源投入シーケンスと電源ダウン シーケンスを示す包括的な図については、「PnP と電源管理機能の移植」をご’参照ください。

IRP_MJ_PNP マイナー コード KMDF コールバック
IRP_MN_CANCEL_REMOVE_DEVICE なし
IRP_MN_CANCEL_STOP_DEVICE なし
IRP_MN_DEVICE_USAGE_NOTIFICATION EvtDeviceUsageNotification
IRP_MN_EJECT EvtDeviceEject (KMDF のみ)
IRP_MN_FILTER_RESOURCE_REQUIREMENTS EvtDeviceFilterRemoveResourceRequirements (KMDF のみ)
IRP_MN_FILTER_RESOURCE_REQUIREMENTS EvtDeviceFilterAddResourceRequirements (KMDF only)
IRP_MN_QUERY_BUS_INFORMATION なし。 KMDF ドライバーは WdfDeviceInitXxx メソッドを呼び出して、初期化中にデバイスプロパティを設定し、フレームワークがドライバーに通知せずに独自にこのクエリに応答できるようにします。
IRP_MN_QUERY_CAPABILITIES なし。 KMDF ドライバーは WdfDeviceInitXxx メソッドを呼び出して、初期化中にデバイスプロパティを設定し、フレームワークがドライバーに通知せずに独自にこのクエリに応答できるようにします。
IRP_MN_QUERY_DEVICE_RELATIONS (バス、取り外し、イジェクト関係) EvtDeviceRelationsQuery
IRP_MN_QUERY_DEVICE_TEXT なし。 KMDF ドライバーは WdfDeviceInitXxx メソッドを呼び出して、初期化中にデバイスプロパティを設定し、フレームワークがドライバーに通知せずに独自にこのクエリに応答できるようにします。
IRP_MN_QUERY_ID なし。 KMDF ドライバーは WdfDeviceInitXxx メソッドを呼び出して、初期化中にデバイスプロパティを設定し、フレームワークがドライバーに通知せずに独自にこのクエリに応答できるようにします。
IRP_MN_QUERY_INTERFACE EvtDeviceProcessQueryInterfaceRequest (KMDF のみ)
IRP_MN_QUERY_PNP_DEVICE_STATE なし。 KMDF ドライバーは WdfDeviceInitXxx メソッドを呼び出して、初期化中にデバイスプロパティを設定し、フレームワークがドライバーに通知せずに独自にこのクエリに応答できるようにします。
IRP_MN_QUERY_REMOVE_DEVICE EvtDeviceQueryRemove
IRP_MN_QUERY_RESOURCE_REQUIREMENTS EvtDeviceResourceRequirementsQuery (KMDF only)
IRP_MN_QUERY_RESOURCES EvtDeviceResourcesQuery (KMDF only)
IRP_MN_QUERY_STOP_DEVICE EvtDeviceQueryStop
IRP_MN_READ_CONFIG なし。 KMDF ドライバーは WdfDeviceInitXxx メソッドを呼び出して、初期化中にデバイスプロパティを設定し、フレームワークがドライバーに通知せずに独自にこのクエリに応答できるようにします。
IRP_MN_REMOVE_DEVICE

After IRP_MN_QUERY_REMOVE_DEVICE:

EvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend フラグ) EvtDmaEnablerSelfManagedIoStop (KMDF のみ)EvtDmaEnablerDisable (KMDF のみ)EvtDmaEnablerFlush (KMDF のみ)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit (WdfPowerDeviceD3Final ステート) EvtDeviceReleaseHardwareEvtIoStop 電源管理キュー用 (WdfRequestStopActionPurge フラグ) EvtDeviceSelfManagedIoFlushEvtIoStop 電源管理キュー用(WdfRequestStopActionPurge フラグ) EvtDeviceSelfManagedIoCleanup WDFDEVICE 用 EvtCleanupCallback WDFDEVICE 用 EvtDestroyCallback

IRP_MN_SURPRISE_REMOVAL後:

EvtIoStop 非電源管理キュー用 (WdfRequestStopActionPurge フラグ) EvtDeviceSelfManagedIoCleanupWDFDEVICE用 EvtCleanupCallback WDFDEVICE用 EvtDestroyCallback
IRP_MN_SET_LOCK EvtDeviceSetLock (KMDF のみ)
IRP_MN_START_DEVICE

エニュメレーションの後:

EvtDeviceRemoveAddedResources (KMDF のみ)EvtDevicePrepareHardwareEvtDeviceD0EntryEvtInterruptEnableEvtDeviceD0EntryPostInterruptsEnabledEvtDmaEnablerFill (KMDF のみ)EvtDmaEnablerEnable (KMDF のみ)EvtDmaEnablerSelfManagedIoStart (KMDF のみ)EvtDeviceSelfManagedIoInit

IRP_MN_STOP_DEVICE 後:

EvtDeviceRemoveAddedResources (KMDF のみ)EvtDevicePrepareHardwareEvtDeviceD0EntryEvtInterruptEnableEvtDeviceD0EntryPostInterruptsEnabledEvtDmaEnablerFill (KMDF のみ)EvtDmaEnablerEnable (KMDF のみ)EvtDmaEnablerSelfManagedIoStart (KMDF のみ)EvtIoResumeEvtDeviceSelfManagedIoRestart
IRP_MN_STOP_DEVICE EvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend フラグ) EvtDmaEnablerSelfManagedIoStop (KMDF のみ)EvtDmaEnablerDisable (KMDF のみ)EvtDmaEnablerFlush (KMDF のみ)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit (WdfPowerDeviceD3Final ステート) EvtDeviceReleaseHardware
IRP_MN_SURPRISE_REMOVAL EvtDeviceSurpriseRemovalEvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend フラグ) EvtDmaEnablerSelfManagedIoStop (KMDF のみ)EvtDmaEnablerDisable (KMDF のみ)EvtDmaEnablerFlush (KMDF のみ)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit (WdfPowerDeviceD3Final ステート) EvtDeviceReleaseHardwareEvtIoStop 電源管理キュー用 (WdfRequestStopActionPurge flag) EvtDeviceSelfManagedIoFlush
IRP_MN_WRITE_CONFIG なし。 KMDF ドライバーは WdfDeviceInitXxx メソッドを呼び出して、初期化中にデバイスプロパティを設定し、フレームワークがドライバーに通知せずに独自にこのクエリに応答できるようにします。

KMDF IRP_MJ_POWER 用コールバック

次の表に、実行順に、IRP_MJ_POWER のマイナー IRP コードに対応する KMDF コールバックを示します。 矢印は、WDM FDO がスタックを上下に移動する IRP を処理するかどうかを示します。

注意 注意:KMDF ドライバーでは、プラグ アンド プレイと電源管理は統合された操作であり、ドライバーは個々のマイナー IRP_MJ_PNP または IRP_MJ_POWER 要求を受け取りません。 代わりに、フレームワークは、電源投入時にコア コールバックのセットと、対応するセットを電源ダウン時に呼び出し、個々のプラグ アンド プレイ要求に応じて、このコア セットの前後に追加のコールバックを呼び出します。 電源投入シーケンスと電源ダウン シーケンスを示す包括的な図については、「PnP と電源管理機能の移植」をご’参照ください。

IRP_MJ_POWER マイナー コード フレームワーク コールバック
↓D1、D2、または D3 の IRP_MN_SET_POWER (電源を切る) EvtDeviceSelfManagedIoSuspendEvtIoStop (WdfRequestStopActionSuspend フラグ) EvtDeviceArmWakeFromS0 または EvtDeviceArmWakeFromSxEvtDmaEnablerSelfManagedIoStop (KMDF のみ)EvtDmaEnablerDisable (KMDF のみ)EvtDmaEnablerFlush (KMDF のみ)EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisableEvtDeviceD0Exit
↑D0 のIRP_MN_SET_POWER (電源投入) EvtDeviceD0EntryEvtInterruptEnableEvtDeviceD0EntryPostInterruptsEnabledEvtDmaEnablerFill (KMDF のみ)EvtDmaEnablerEnable (KMDF のみ)EvtDmaEnablerSelfManagedIoStart (KMDF のみ)EvtIoResumeEvtDeviceSelfManagedIoRestart
↓Sx の IRP_MN_SET_POWER なし
↑Sx の IRP_MN_SET_POWER なし
IRP_MN_POWER_SEQUENCE なし
IRP_MN_WAIT_WAKE EvtDeviceEnableWakeAtBus (KMDF のみ)
IRP_MN_WAIT_WAKE EvtDeviceDisableWakeAtBus (KMDF のみ)