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を返します。 それ以外の場合、このメソッドは次のいずれかの値を返す可能性があります。
リターン コード | 説明 |
---|---|
|
WdfDriverCreate というドライバーが複数回作成されます。 |
|
非プラグ アンド プレイ (PnP) ドライバーで EvtDriverDeviceAdd コールバック関数が指定されました。 |
戻り値の詳細については、「 フレームワーク オブジェクト作成エラー」を参照してください。
このメソッドは、他の NTSTATUS 値も返す場合があります。
DriverObject、RegistryPath、または 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) |