バス ドライバーでのデバイス オブジェクトの作成

バス ドライバーは、子デバイスが親デバイスに接続されたことを検出したときに、フレームワーク デバイス オブジェクトを作成する必要があります。 親デバイスは通常バスですが、各機能に個別のドライバー セットが必要な多機能デバイス (デジタル オーディオと MIDI をサポートするサウンド カードなど) の場合もあります。 バス ドライバーが作成するデバイス オブジェクトは、物理デバイス オブジェクト (PDO) と呼ばれます。これは、それぞれが 1 つのハードウェア (子) から別のハードウェア (親) への実際の接続を表しているためです。

バスに接続されているデバイスを識別して報告するプロセスは、バス列挙と呼ばれます。

バスの列挙の詳細については、「バス上のデバイスの列挙」を参照してください。

バス ドライバーは、WDFDEVICE_INIT 構造体に情報を格納するフレームワーク デバイス オブジェクト初期化メソッドのセットを呼び出すことができます。 さらに、バス ドライバーは、フレームワーク PDO 初期化メソッドを呼び出すことができます。

列挙子デバイスのフレームワーク デバイス オブジェクトの作成には、通常、次の手順が含まれます。

  • バス ドライバー固有のコールバック関数の登録。

    ほとんどのバス ドライバーは、デバイスに必要なシステム ハードウェア リソースを指定する必要があるため、WdfPdoInitSetEventCallbacks を呼び出します。 ハードウェア リソースの指定の詳細については、「フレームワークベースのドライバーのハードウェア リソース」を参照してください。 デバイスとドライバーが取り出しをサポートしている場合は、追加のコールバック関数を登録できます。

  • デバイス識別文字列の報告。

    バス ドライバーは、デバイスがサポートする文字列の種類ごとに WdfPdoInitAssignDeviceIDWdfPdoInitAssignInstanceIDWdfPdoInitAddCompatibleID、および WdfPdoInitAddHardwareID を呼び出すことによって、デバイスの識別文字列を報告する必要があります。 さらに、バージョン 1.9 以降のフレームワークを使用するバス ドライバーは、WdfPdoInitAssignContainerID を呼び出すことができます。

  • バス ドライバーが raw モードでデバイスをサポートできるかどうかを報告。

    バス ドライバーがデバイスの raw モードをサポートしている場合は、WdfPdoInitAssignRawDevice を呼び出す必要があります。

  • デバイスを説明する表示可能なテキストの提供。

    バス ドライバーは、WdfPdoInitAddDeviceTextWdfPdoInitSetDefaultLocale を呼び出して、デバイスをユーザーに説明するテキストを複数の言語で提供します。

  • デバイス オブジェクトの作成。

    デバイス オブジェクトを作成する最後の手順は、WdfDeviceCreate を呼び出すことです。

ドライバーが WdfPdoInitAllocate から取得した WDFDEVICE_INIT 構造体の初期化中にエラーが発生した場合、ドライバーは WdfDeviceCreate ではなく WdfDeviceInitFree を呼び出す必要があります。

バス ドライバーは、デバイス オブジェクトを作成した後、通常、デバイスのプラグ アンド プレイと電源機能を報告する WdfDeviceSetPnpCapabilitiesWdfDeviceSetPowerCapabilities を呼び出します。

各バス ドライバーは、バス アダプターのファンクション ドライバーでもあります。 そのため、ドライバーは EvtDriverDeviceAdd コールバック関数も提供する必要があります。 このコールバック関数は、システム上のバス アダプターごとに機能デバイス オブジェクト (FDO) を作成します。 FDO の作成の詳細については、「ファンクション ドライバーでのデバイス オブジェクトの作成」を参照してください。