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
WDM(Windows 드라이버 모델) 드라이버 개체를 나타내는 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 콜백 함수를 지정했습니다. |
반환 값에 대한 자세한 내용은 Framework 개체 만들기 오류참조하세요.
이 메서드는 다른NTSTATUS 값을 반환할 수도 있습니다.
DriverObject, RegistryPath또는 DriverConfig 매개 변수가 NULL 시스템 버그 검사가 발생합니다.
비고
Kernel-Mode 드라이버 프레임워크를 사용하는 드라이버는 다른 프레임워크 루틴을 호출하기 전에 DriverEntry 루틴 내에서 WdfDriverCreate 호출해야 합니다. DriverEntry대한 자세한 내용은 프레임워크 기반 드라이버 대한DriverEntry를 참조하세요.
드라이버가 WdfDriverCreate 호출하기 전에 드라이버는 WDF_DRIVER_CONFIG_INIT 호출하여 WDF_DRIVER_CONFIG 구조를 초기화해야 합니다.
프레임워크 드라이버 개체는 드라이버의 프레임워크 개체 트리 맨 위에 있으므로 부모 개체가 없습니다.
드라이버가 드라이버 개체에 대한 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 |
헤더 | wdfdriver.h(Wdf.h 포함) |
라이브러리 | Wdf01000.sys(KMDF); WUDFx02000.dll(UMDF) |
IRQL | PASSIVE_LEVEL |
DDI 규정 준수 규칙 | ChangeQueueState(kmdf), DriverAttributeChanged(kmdf), DriverCreate(kmdf), KmdfIrql(km)df), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), MiniportOnlyWdmDevice(kmdf) |