WdfDriverCreate 関数 (wdfdriver.h)

[KMDF と UMDF に適用]

WdfDriverCreate メソッドは、呼び出し元ドライバーのフレームワーク ドライバー オブジェクトを作成します。

構文

NTSTATUS WdfDriverCreate(
  [in]            PDRIVER_OBJECT         DriverObject,
  [in]            PCUNICODE_STRING       RegistryPath,
  [in, optional]  PWDF_OBJECT_ATTRIBUTES DriverAttributes,
  [in]            PWDF_DRIVER_CONFIG     DriverConfig,
  [out, optional] WDFDRIVER              *Driver
);

パラメーター

[in] DriverObject

Windows ドライバー モデル (WDM) ドライバー オブジェクトを表す DRIVER_OBJECT 構造体へのポインター。 ドライバーは、 DriverEntry ルーチンへの入力としてこのポインターを受け取ります。

[in] RegistryPath

ドライバーが DriverEntry ルーチンへの入力として受け取ったレジストリ パス文字列を含むUNICODE_STRING構造体へのポインター。

[in, optional] DriverAttributes

呼び出し元によって割り当てられた WDF_OBJECT_ATTRIBUTES 構造体へのポインター。 (構造体の ParentObject メンバーは NULL である必要があります)。このパラメーターは省略可能であり、WDF_NO_OBJECT_ATTRIBUTESできます。

[in] DriverConfig

呼び出し元によって割り当てられた WDF_DRIVER_CONFIG 構造体へのポインター。

[out, optional] Driver

新しいフレームワーク ドライバー オブジェクトへのハンドルを受け取る場所へのポインター。 このパラメーターは省略可能であり、WDF_NO_HANDLEできます。

戻り値

操作が成功した場合、WdfDriverCreate はSTATUS_SUCCESSを返します。 それ以外の場合、このメソッドは次のいずれかの値を返す可能性があります。

リターン コード 説明
STATUS_DRIVER_INTERNAL_ERROR
WdfDriverCreate というドライバーが複数回作成されます。
STATUS_INVALID_PARAMETER
非プラグ アンド プレイ (PnP) ドライバーEvtDriverDeviceAdd コールバック関数が指定されました。
 

戻り値の詳細については、「 フレームワーク オブジェクト作成エラー」を参照してください。

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

DriverObjectRegistryPath、または DriverConfig パラメーターが NULL の場合、システム バグ チェックが発生します。

注釈

Kernel-Mode Driver Framework を使用するドライバーは、他のフレームワーク ルーチンを呼び出す前に、その DriverEntry ルーチン内から WdfDriverCreate を呼び出す必要があります。 DriverEntry の詳細については、「DriverEntry for Framework ベースのドライバー」を参照してください。

ドライバーが WdfDriverCreate を呼び出す前に、ドライバーは WDF_DRIVER_CONFIG構造体を 初期化するために WDF_DRIVER_CONFIG_INIT を呼び出す必要があります。

フレームワーク ドライバー オブジェクトは、ドライバーのフレームワーク オブジェクトのツリーの最上位であるため、親オブジェクトがありません。

ドライバーがドライバー オブジェクト の EvtCleanupCallback または EvtDestroyCallback コールバック関数を提供する場合、フレームワークは IRQL = PASSIVE_LEVELでこれらのコールバック関数を呼び出します。

次のコード例は、WDF_DRIVER_CONFIG構造体を初期化し、フレームワーク ドライバー オブジェクトを作成する DriverEntry ルーチンです。

NTSTATUS
DriverEntry(
    IN PDRIVER_OBJECT  DriverObject,
    IN PUNICODE_STRING  RegistryPath
    )
{
    WDF_DRIVER_CONFIG  config;
    NTSTATUS  status = STATUS_SUCCESS;

    WDF_DRIVER_CONFIG_INIT(
                           &config,
                           MyEvtDeviceAdd
                           );
    config.EvtDriverUnload = MyEvtDriverUnload;
    status = WdfDriverCreate(
                             DriverObject,
                             RegistryPath,
                             WDF_NO_OBJECT_ATTRIBUTES,
                              &config,
                             WDF_NO_HANDLE
                             );
    if (!NT_SUCCESS(status)) {
        TraceEvents(
                    TRACE_LEVEL_ERROR,
                    DBG_PNP,
                    "WdfDriverCreate failed with status %!STATUS!",
                    status
                    );
    }
    return status;
}

要件

要件
対象プラットフォーム ユニバーサル
最小 KMDF バージョン 1.0
最小 UMDF バージョン 2.0
Header wdfdriver.h (Wdf.h を含む)
Library Wdf01000.sys (KMDF);WUDFx02000.dll (UMDF)
IRQL PASSIVE_LEVEL
DDI コンプライアンス規則 ChangeQueueState(kmdf)DriverAttributeChanged(kmdf)DriverCreate(kmdf)KmdfIrql(kmdf)KmdfIrql2(kmdf)、KmdfIrqlExplicit(kmdf)、 MiniportOnlyWdmDevice(kmdf)

こちらもご覧ください

DRIVER_OBJECT

DriverEntry

EvtDriverDeviceAdd

UNICODE_STRING

WDF_DRIVER_CONFIG

WDF_DRIVER_CONFIG_INIT

WDF_OBJECT_ATTRIBUTES