バス ドライバーでのデバイス オブジェクトの作成
各バス ドライバーは、子デバイスが親デバイスに接続されたことを検出したときに、フレームワーク デバイス オブジェクトを作成する必要があります。 親デバイスは通常バスですが、各機能に個別のドライバー セットが必要な多機能デバイス (デジタル オーディオと MIDI をサポートするサウンド カードなど) の場合もあります。 バス ドライバーが作成するデバイス オブジェクトは、物理デバイス オブジェクト (PDO) と呼ばれます。これは、それぞれが 1 つのハードウェア (子) から別のハードウェア (親) への実際の接続を表しているためです。
バスに接続されているデバイスを識別して報告するプロセスは、バス列挙と呼ばれます。
バス ドライバーが動的バス列挙を実行する場合、その EvtChildListCreateDevice コールバック関数は、WDFDEVICE_INIT 構造体へのハンドルを受け取ります。
バス ドライバーが静的バス列挙を実行する場合は、WdfPdoInitAllocate を呼び出して、WDFDEVICE_INIT 構造体へのハンドルを取得する必要があります。
バスの列挙の詳細については、「バス上のデバイスの列挙」を参照してください。
バス ドライバーは、WDFDEVICE_INIT 構造体に情報を格納するフレームワーク デバイス オブジェクト初期化メソッドのセットを呼び出すことができます。 さらに、バス ドライバーは、フレームワーク PDO 初期化メソッドを呼び出すことができます。
列挙子デバイスのフレームワーク デバイス オブジェクトの作成には、通常、次の手順が含まれます。
バス ドライバー固有のコールバック関数の登録。
ほとんどのバス ドライバーは、デバイスに必要なシステム ハードウェア リソースを指定する必要があるため、WdfPdoInitSetEventCallbacks を呼び出します。 ハードウェア リソースの指定の詳細については、「フレームワークベースのドライバーのハードウェア リソース」を参照してください。 デバイスとドライバーが取り出しをサポートしている場合は、追加のコールバック関数を登録できます。
デバイス識別文字列の報告。
バス ドライバーは、デバイスがサポートする文字列の種類ごとに WdfPdoInitAssignDeviceID、WdfPdoInitAssignInstanceID、WdfPdoInitAddCompatibleID、および WdfPdoInitAddHardwareID を呼び出すことによって、デバイスの識別文字列を報告する必要があります。 さらに、バージョン 1.9 以降のフレームワークを使用するバス ドライバーは、WdfPdoInitAssignContainerID を呼び出すことができます。
バス ドライバーが raw モードでデバイスをサポートできるかどうかを報告。
バス ドライバーがデバイスの raw モードをサポートしている場合は、WdfPdoInitAssignRawDevice を呼び出す必要があります。
デバイスを説明する表示可能なテキストの提供。
バス ドライバーは、WdfPdoInitAddDeviceText と WdfPdoInitSetDefaultLocale を呼び出して、デバイスをユーザーに説明するテキストを複数の言語で提供します。
デバイス オブジェクトの作成。
デバイス オブジェクトを作成する最後の手順は、WdfDeviceCreate を呼び出すことです。
ドライバーが WdfPdoInitAllocate から取得した WDFDEVICE_INIT 構造体の初期化中にエラーが発生した場合、ドライバーは WdfDeviceCreate ではなく WdfDeviceInitFree を呼び出す必要があります。
バス ドライバーは、デバイス オブジェクトを作成した後、通常、デバイスのプラグ アンド プレイと電源機能を報告する WdfDeviceSetPnpCapabilities と WdfDeviceSetPowerCapabilities を呼び出します。
各バス ドライバーは、バス アダプターのファンクション ドライバーでもあります。 そのため、ドライバーは EvtDriverDeviceAdd コールバック関数も提供する必要があります。 このコールバック関数は、システム上のバス アダプターごとに機能デバイス オブジェクト (FDO) を作成します。 FDO の作成の詳細については、「ファンクション ドライバーでのデバイス オブジェクトの作成」を参照してください。