WdfDeviceMiniportCreate 関数 (wdfminiport.h)

[KMDF にのみ適用]

WdfDeviceMiniportCreate メソッドは、ミニポート ドライバーが使用できるフレームワーク デバイス オブジェクトを作成します。

構文

NTSTATUS WdfDeviceMiniportCreate(
  [in]           WDFDRIVER              Driver,
  [in, optional] PWDF_OBJECT_ATTRIBUTES Attributes,
  [in]           PDEVICE_OBJECT         DeviceObject,
  [in, optional] PDEVICE_OBJECT         AttachedDeviceObject,
  [in, optional] PDEVICE_OBJECT         Pdo,
  [out]          WDFDEVICE              *Device
);

パラメーター

[in] Driver

WdfDriverCreate の以前の呼び出しによって取得された、ドライバーのフレームワーク ドライバー オブジェクトへのハンドル。

[in, optional] Attributes

新しいオブジェクトの属性を含む呼び出し元によって割り当てられた WDF_OBJECT_ATTRIBUTES 構造体へのポインター。 このパラメーターは省略可能であり、WDF_NO_OBJECT_ATTRIBUTESできます。

[in] DeviceObject

ミニポート ドライバーの機能デバイス オブジェクト (FDO) を表す WDM DEVICE_OBJECT 構造体へのポインター。

[in, optional] AttachedDeviceObject

デバイス スタック内の次の下位デバイス オブジェクトを表す WDM DEVICE_OBJECT 構造体へのポインター。

[in, optional] Pdo

デバイスの物理デバイス オブジェクト (PDO) を表す WDM DEVICE_OBJECT 構造体へのポインター。

[out] Device

新しいフレームワーク デバイス オブジェクトへのハンドルを受け取る場所へのポインター。

戻り値

WdfDeviceMiniportCreate メソッドでエラーが発生しない場合は、STATUS_SUCCESSを返します。 その他の戻り値は次のとおりです。

リターン コード 説明
STATUS_INSUFFICIENT_RESOURCES
デバイス オブジェクトを割り当てませんでした。
 

WdfDeviceMiniportCreate が返すことができるその他の戻り値の一覧については、「Framework オブジェクト作成エラー」を参照してください。

メソッドは、他の NTSTATUS 値を返す場合があります。

ドライバーが無効なオブジェクト ハンドルを提供すると、バグ チェックが発生します。

注釈

ミニポート ドライバーがフレームワークを使用する場合、ミニポート ドライバーは、デバイスが使用可能であることを通知するときに WdfDeviceMiniportCreate を呼び出す必要があります。 ミニポート ドライバーは WdfDeviceCreate を呼び出しません。

ミニポート ドライバーは、 そのポート ドライバーから DeviceObjectAttachedDeviceObject、および PDO ポインターを受け取る可能性があります。 たとえば、NDIS ミニポート ドライバーは、 NdisMGetDeviceProperty を呼び出すことによって、これらのポインターを取得できます。

WdfDeviceMiniportCreate を呼び出してミニポート ドライバーが取得するフレームワーク デバイス オブジェクトには、次の制限が適用されます。

  • デバイス オブジェクトが表すデバイスは、プラグ アンド プレイをサポートする必要があります。
  • デバイス オブジェクトは、デバイス オブジェクトのイベント コールバック関数をサポートしていません。 そのため、ポート ドライバーは、すべてのプラグ アンド プレイ (PnP) と電源管理操作を処理する必要があります。
  • デバイス オブジェクト ハンドルを WdfWmiProviderCreate に渡すことができないので、ポート ドライバーは Windows Management Instrumentation (WMI) に必要なサポートを提供する必要があります。
  • デバイス オブジェクト ハンドルを WdfIoQueueCreate に渡すことができないので、フレームワークはミニポート ドライバーの I/O キューをサポートしていません。
  • デバイス オブジェクト ハンドルを WdfInterruptCreate に渡すことができないので、フレームワークはミニポート ドライバーの割り込みオブジェクトをサポートしていません。
  • デバイス オブジェクト ハンドルは、WdfDeviceGetIoTarget、WdfDeviceWdmGetDeviceObjectWdfDeviceWdmGetAttachedDeviceWdfDeviceWdmGetPhysicalDevice を除く、一般的なフレームワーク デバイス オブジェクト メソッドには渡すことができません。
  • デバイス オブジェクト ハンドルを WdfFdoQueryForInterface 以外のフレームワーク FDO メソッドに渡すことはできません。
  • デバイス オブジェクト ハンドルは、 どのフレームワーク PDO メソッド にも WdfChildListCreate にも渡すことができないため、ミニポート ドライバーをバス ドライバーにすることはできません。
  • ドライバーは最終的に WdfObjectDelete を呼び出して 、WdfDeviceMiniportCreate によって作成されるデバイス オブジェクトを削除する必要があります。
WdfDeviceMiniportCreate が作成するフレームワーク デバイス オブジェクトは、後続に作成されたフレームワーク オブジェクトの親オブジェクトとして使用できます。

I/O 要求を I/O ターゲットに送信するために、ミニポート ドライバーはデバイス オブジェクト ハンドルを WdfDeviceGetIoTargetWdfIoTargetCreate、または WdfUsbTargetDeviceCreateWithParameters に渡す場合があります。

デバイスが DMA 操作をサポートしている場合、ミニポート ドライバーは WdfDmaEnablerCreate にデバイス オブジェクト ハンドルを渡すことができます。

ミニポート ドライバーの詳細については、「ミニポート ドライバー での Kernel-Mode ドライバー フレームワークの使用」を参照してください。

次のコード例では 、NdisMGetDeviceProperty を呼び出して 、DeviceObjectAttachedDeviceObjectおよび PDO ポインターを取得します。は、デバイス オブジェクトのコンテキスト空間を初期化し、ミニポート デバイス オブジェクトを作成します。

WDF_OBJECT_ATTRIBUTES  ObjectAttributes;

NdisMGetDeviceProperty(
                       MiniportAdapterHandle,
                       &Adapter->Pdo,
                       &Adapter->Fdo,
                       &Adapter->NextDeviceObject,
                       NULL,
                       NULL
                       );
WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(
                                        &ObjectAttributes,
                                        WDF_DEVICE_INFO
                                        );
ntStatus = WdfDeviceMiniportCreate(
                                   WdfGetDriver(),
                                   &ObjectAttributes,
                                   Adapter->Fdo,
                                   Adapter->NextDeviceObject,
                                   Adapter->Pdo,
                                   &Adapter->WdfDevice
                                   );
if (!NT_SUCCESS (ntStatus)) {
    Status = NDIS_STATUS_FAILURE;
    break;
}

要件

要件
対象プラットフォーム ユニバーサル
最小 KMDF バージョン 1.0
Header wdfminiport.h (Wdfminiport.h を含む)
Library Wdf01000.sys (「Framework ライブラリのバージョン管理」を参照)。
IRQL PASSIVE_LEVEL
DDI コンプライアンス規則 DriverCreate(kmdf)KmdfIrql(kmdf)KmdfIrql2(kmdf)、KmdfIrqlExplicit(kmdf)

こちらもご覧ください

WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE

WdfDeviceCreate

WdfDriverMiniportUnload