다음을 통해 공유


KMDF 드라이버를 UMDF 2 드라이버로 변환하는 방법(그 반대의 경우도 마찬가지)

이 항목에서는 KMDF(Kernel-Mode Driver Framework) 드라이버를 UMDF(User-Mode Driver Framework) 버전 2 드라이버로 변환하는 방법을 설명합니다.

Visual Studio를 사용한 드라이버 변환

  1. KMDF에서 UMDF로 전환하는 경우 UMDF V2(사용자 모드 드라이버, 비어 있음) 프로젝트 템플릿을 사용하여 Visual Studio에서 빈 UMDF 프로젝트를 만듭니다. UMDF에서 KMDF로 전환하는 경우 커널 모드 드라이버, 빈 (KMDF) 프로젝트 템플릿을 사용하여 Visual Studio에서 빈 KMDF 프로젝트를 만듭니다.

    Visual Studio는 지정된 프레임워크를 대상으로 하는 INF 파일과 함께 적절한 설정을 사용하여 빈 드라이버 프로젝트를 만듭니다.

  2. 이전 드라이버의 소스 코드 및 헤더 파일을 새 프로젝트로 복사합니다.

  3. 헤더 파일을 업데이트합니다. UMDF의 경우 Windows.h를 포함합니다. KMDF의 경우 Ntddk.h를 포함합니다. Wdf.h는 KMDF와 UMDF 모두에 공통적이므로 두 가지 유형의 드라이버에 모두 포함합니다.

    필요에 따라 _KERNEL_MODE 전처리기 매크로를 사용하여 조건부로 올바른 시스템 헤더를 추가합니다.

    #ifndef _KERNEL_MODE
    // This is a user-mode driver
    #include <windows.h>
    
    #else
    // This is a kernel-mode driver
    #include <ntddk.h>
    #define NTSTRSAFE_LIB
    #include <ntstrsafe.h>
    #endif
    
    // This is a common WDF header (for both KMDF and UMDF)
    #include <wdf.h> 
    
  4. 소스 코드를 업데이트하여 대상 드라이버 모델에서 지원되지 않는 기능을 제거하거나 조건부로 컴파일합니다( _KERNEL_MODE 매크로 사용). 예를 들면 다음과 같습니다.

    • 드라이버에서 WPP 추적을 사용하는 경우 WPP_INIT_TRACING 매크로를 업데이트합니다. 이 매크로는 사용자 모드 및 커널 모드에서 다른 매개 변수를 사용합니다.

      WPP_INIT_TRACING ( DriverObject, RegistryPath ); // KMDF and UMDF 2
      WPP_INIT_TRACING ( “<MyDriverNameString>” ); // UMDF 1
      

      UMDF 2의 경우 Visual Studio에서 실행 중인 추적 레코더를 사용하도록 설정하는 방법에 설명된 대로 를 추가WPP_MACRO_USE_KM_VERSION_FOR_UM=1해야 합니다.

    • ExAllocatePoolWithTag와 같은 WDM 루틴을 호출하는 KMDF 드라이버를 변환하는 경우 WdfMemoryCreate와 같은 해당 WDF 메서드로 바꿉니다. 마찬가지로 사용자 모드 함수를 호출하는 UMDF 드라이버를 변환하는 경우 해당 커널 모드 루틴으로 대체합니다.

    • 일부 메서드는 KMDF에서만 지원되지만 다른 메서드는 UMDF에서만 지원됩니다. 모든 WDF(Windows 드라이버 프레임워크) 메서드 및 해당 프레임워크 적용 가능성 목록은 WDF 콜백 및 메서드 요약을 참조하세요.