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 반환합니다. 그렇지 않으면 이 메서드는 다음 값 중 하나를 반환할 수 있습니다.

반환 코드 설명
STATUS_DRIVER_INTERNAL_ERROR
WdfDriverCreate라는 드라이버가 두 번 이상 생성되었습니다.
STATUS_INVALID_PARAMETER
PnP(비 플러그 앤 플레이) 드라이버EvtDriverDeviceAdd 콜백 함수를 지정했습니다.
 

반환 값에 대한 자세한 내용은 Framework 개체 만들기 오류를 참조하세요.

이 메서드는 다른 NTSTATUS 값을 반환할 수도 있습니다.

DriverObject, RegistryPath 또는 DriverConfig 매개 변수가 NULL인 경우 시스템 버그 검사 발생합니다.

설명

Kernel-Mode Driver Framework를 사용하는 드라이버는 다른 프레임워크 루틴을 호출하기 전에 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(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), MiniportOnlyWdmDevice(kmdf)

추가 정보

DRIVER_OBJECT

DriverEntry

EvtDriverDeviceAdd

UNICODE_STRING

WDF_DRIVER_CONFIG

WDF_DRIVER_CONFIG_INIT

WDF_OBJECT_ATTRIBUTES