次の方法で共有


ユーザーがデバイスを接続する

次のシナリオでは、デバイス ノードには、KMDF バス ドライバーと、PnP デバイスをサポートする 1 つ以上の KMDF 機能またはフィルター ドライバーが含まれています。

システムの実行中にユーザーがデバイスをバスに接続すると、デバイスのバス ドライバーとフレームワークは次のタスクを実行します。

  • デバイスのバス ドライバーはデバイスを検出し、WdfChildListAddOrUpdateChildDescriptionAsPresent を呼び出します。 (このプロセスは「動的列挙」と呼ばれます。)

  • フレームワークはバス ドライバーの EvtChildListCreateDevice コールバック関数を呼び出すため、バス ドライバーは WdfDeviceCreate を呼び出して物理デバイスのフレームワーク デバイス オブジェクト (PDO) を作成できます。

  • フレームワークは、バス ドライバーの EvtDeviceResourcesQuery および EvtDeviceResourceRequirementsQuery コールバック関数を呼び出して、デバイスが必要とするシステム ハードウェア リソースを特定します。

KMDF バス ドライバーの一連の電源投入手順の詳細については、「バス ドライバーの一連の電源投入手順」を参照してください。

次に、PnP マネージャーは、デバイスに必要な追加のドライバー (ファンクション ドライバーとフィルター ドライバー) を特定します。 これらのドライバーがまだ読み込まれていない場合、PnP マネージャーはドライバーを読み込み、DriverEntry ルーチンを呼び出します。 ファンクション ドライバーまたはフィルター ドライバーごとに、次のアクションが実行されます。

  • フレームワークは、追加の各ドライバーの EvtDriverDeviceAdd コールバック関数を呼び出して、ドライバーが WdfDeviceCreate を呼び出して、対応するデバイスを表現するフレームワーク デバイス オブジェクトを作成できるようにします。 ファンクション ドライバーは機能デバイス オブジェクト (FDO) を作成し、フィルター ドライバーはフィルター デバイス オブジェクト (Filter DO) を作成します。

  • フレームワークは、各ファンクション ドライバーとフィルタードライバーの EvtDeviceFilterRemoveResourceRequirements コールバック関数を呼び出した後、各ドライバーの EvtDeviceFilterAddResourceRequirements コールバック関数を呼び出します。 デバイスが起動する直前に、フレームワークは EvtDeviceRemoveAddedResources コールバック関数を呼び出します。 これら 3 つのコールバック関数により、フィルター ドライバーとファンクション ドライバーは、PnP マネージャーがデバイスにリソースを割り当てる前に、デバイスが必要とするハードウェア リソースのリストを変更できます。 詳細については、「フレームワークベースのドライバーのハードウェア リソース」を参照してください。

  • フレームワークは、デバイスが動作 (D0) 電力状態に達していることを確認します。

  • デバイスをサポートする機能とフィルター ドライバーごとに、フレームワークは、ドライバー スタックの最下位にあるドライバーから始めて、一度に 1 つのドライバーずつ、以下の一連の手順を進めていきます。

    1. フレームワークは、ドライバーの EvtDevicePrepareHardware コールバック関数 (存在する場合) を呼び出し、PnP マネージャーがデバイスに割り当てたハードウェア リソースのリストを渡します。
    2. フレームワークは、ドライバーの EvtDeviceD0Entry コールバック関数 (存在する場合) を呼び出します。
    3. フレームワークは、割り込みごとにドライバーの EvtInterruptEnable コールバック関数 (存在する場合) を呼び出した後、ドライバーがデバイスの割り込みを有効にできるように、ドライバーの EvtDeviceD0EntryPostInterruptsEnabled コールバック関数 (存在する場合) を呼び出します。
    4. ハードウェアとドライバーが DMA をサポートしている場合、フレームワークは、作成された各 DMA チャネルのドライバーの EvtDmaEnablerFillEvtDmaEnablerEnableEvtDmaEnablerSelfManagedIoStart コールバック関数 (存在する場合) を呼び出します。
    5. フレームワークは、ドライバーの EvtChildListScanForChildren コールバック関数 (存在する場合) を呼び出します。
    6. フレームワークは、デバイスの電源管理 I/O キューをすべて開始します。
    7. ドライバーが自己管理 I/O を使用している場合、フレームワークはドライバーの EvtDeviceSelfManagedIoInit コールバック関数を呼び出します。

KMDF ファンクション ドライバーまたはフィルター ドライバーの一連の電源投入手順の詳細については、「ファンクション ドライバーまたはフィルター ドライバーの一連の電源投入手順」を参照してください。