다음을 통해 공유


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라는 드라이버가 두 번 이상.
파라미터 값이 잘못되었습니다
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)

참고하십시오

DRIVER_OBJECT

DriverEntry

EvtDriverDeviceAdd

UNICODE_STRING

WDF_DRIVER_CONFIG

WDF_DRIVER_CONFIG_INIT

WDF_OBJECT_ATTRIBUTES