다음을 통해 공유


자습서: 템플릿을 기반으로 유니버설 Windows 드라이버(UMDF 2) 작성

이 항목에서는 UMDF(User-Mode Driver Framework) 2를 사용하여 유니버설 Windows 드라이버 작성하는 방법을 설명합니다. Microsoft Visual Studio 템플릿으로 시작한 다음, 별도의 컴퓨터에 드라이버를 배포하고 설치합니다.

필수 구성 요소

  • 단계에 따라 Windows 드라이버 키트(WDK)을 설치하십시오. WDK를 설치할 때 Windows 디버깅 도구가 포함됩니다.

  • Visual Studio 2022설치합니다. Visual Studio 2022를 설치할 때 C++ 워크로드를 사용하여 Desktop 개발을 선택한 다음, 개별 구성 요소에서 다음을 추가할 있습니다.

    • MSVC v143 - VS 2022 C++ ARM64/ARM64EC Spectre 공격 완화 라이브러리 (최신)
    • MSVC v143 - VS 2022 C++ x64/x86 Spectre 위험 완화 라이브러리 (최신)
    • 최신 v143 빌드 도구(ARM64/ARM64EC)용 Spectre 완화 기능이 있는 C++ ATL
    • Spectre 완화를 사용하는 최신 v143 빌드 도구용 C++ ATL(x86 및 x64 &)
    • 최신 v143 빌드 도구 및 ARM64/ARM64EC용 Spectre 완화를 지원하는 C++ MFC
    • Spectre 완화를 사용하는 최신 v143 빌드 도구용 C++ MFC(x86 & x64)
    • Windows 드라이버 키트

드라이버 만들기 및 빌드

메모

새 KMDF 또는 UMDF 드라이버를 만들 때 32자 이하의 드라이버 이름을 선택해야 합니다. 이 길이 제한은 wdfglobals.h에 정의되어 있습니다.

  1. Visual Studio를 엽니다. 파일 메뉴에서 새 프로젝트 >선택합니다.

  2. 새 프로젝트 만들기 대화 상자의 왼쪽 드롭다운에서 C++ 선택하고, 가운데 드롭다운에서 Windows 선택하고, 오른쪽 드롭다운에서 드라이버 선택합니다.

  3. 프로젝트 형식 목록에서 UMDF V2(사용자 모드 드라이버) 선택합니다. 을 선택한 다음을 누르세요.

    선택한 사용자 모드 드라이버를 보여 주는 새 프로젝트 대화 상자의 스크린샷을 .

    Visual Studio에서 드라이버 프로젝트 템플릿을 찾을 수 없는 경우 WDK Visual Studio 확장이 제대로 설치되지 않았습니다. 이 문제를 해결하려면 Visual Studio 설치 관리자을 시작하고, 수정을선택한 다음, 개별 구성 요소 탭에서 Windows 드라이버 키트를 추가하고, 수정을선택합니다.

  4. 새 프로젝트 구성 대화 상자의 프로젝트 이름 필드에 "UmdfDriver"를 입력합니다.

    메모

    새 KMDF 또는 UMDF 드라이버를 만들 때 32자 이하의 드라이버 이름을 선택해야 합니다. 이 길이 제한은 wdfglobals.h에 정의되어 있습니다.  

  5. 위치 필드에 새 프로젝트를 만들 디렉터리를 입력합니다.

  6. 솔루션과 프로젝트를 동일한 디렉토리에 배치하고선택한 후만드십시오.

    프로젝트 구성 대화 상자의 스크린샷을 .

    Visual Studio는 하나의 프로젝트와 솔루션을 만듭니다. 솔루션 탐색기 창에서 볼 수 있습니다. (솔루션 탐색기 창이 표시되지 않으면 보기 메뉴에서 솔루션 탐색기 선택합니다.) 솔루션에는 UmdfDriver라는 드라이버 프로젝트가 있습니다. 드라이버 소스 코드를 보려면 소스 파일아래의 파일을 엽니다. Driver.c 및 Device.c는 시작하기에 좋은 장소입니다.

    드라이버 프로젝트의 파일을 보여 주는 솔루션 탐색기의 스크린샷입니다.

  7. 솔루션 탐색기 창에서 솔루션 'UmdfDriver'(프로젝트 1개 중 1개)선택하고 마우스 오른쪽 단추로 클릭한 다음, 구성 관리자를 선택합니다. 드라이버 프로젝트에 대한 구성 및 플랫폼을 선택합니다. 예를 들어 디버그x64을 선택하세요.

  8. 솔루션 탐색기 창에서 UmdfDriver를 선택하고 길게 누르거나(또는 마우스 오른쪽 단추로 클릭하여) 속성을 선택합니다. 구성 속성 > 드라이버 설정 > 일반으로 이동한 다음 대상 플랫폼 기본값이 유니버설임을 주목하세요.

  9. 드라이버를 빌드하려면 빌드 메뉴에서 빌드 솔루션 선택합니다. Microsoft Visual Studio는 출력 창에 빌드 진행률을 표시합니다. (출력 창이 표시되지 않으면 보기 메뉴에서 출력 선택합니다.)

    빌드 출력에 다음이 포함되는지 확인합니다.

    >    Driver is 'Universal'.
    

    솔루션이 성공적으로 빌드되었는지 확인하면 Visual Studio를 닫을 수 있습니다.

  10. 빌드된 드라이버를 보려면 파일 탐색기에서 UmdfDriver 폴더로 이동한 다음, x64\Debug\UmdfDriver으로 이동하세요. 디렉터리에는 다음 파일이 포함됩니다.

    • UmdfDriver.dll - 사용자 모드 드라이버 파일
    • UmdfDriver.inf - 드라이버를 설치할 때 Windows에서 사용하는 정보 파일

유니버설 Windows 드라이버 배포 및 설치

일반적으로 드라이버를 테스트하고 디버그할 때 디버거와 드라이버는 별도의 컴퓨터에서 실행됩니다. 디버거를 실행하는 컴퓨터는 호스트 컴퓨터라고 하며, 드라이버를 실행하는 컴퓨터는 대상 컴퓨터라고 합니다. 대상 컴퓨터는 테스트 컴퓨터라고도 불립니다.

중요하다

지금까지 Visual Studio를 사용하여 호스트 컴퓨터에서 드라이버를 빌드했습니다. 이제 대상 컴퓨터를 구성해야 합니다. 지침 드라이버 배포 및 테스트용 컴퓨터 준비(WDK 10)에 따라 프로비저닝을 수행하십시오. 그런 다음 드라이버를 배포, 설치, 로드 및 디버그할 준비가 됩니다.

  1. 호스트 컴퓨터에서 Visual Studio에서 솔루션을 엽니다. UmdfDriver 폴더에서 솔루션 파일 UmdfDriver.sln 두 번 클릭할 수 있습니다.

  2. 솔루션 탐색기 창에서 UmdfDriver을(를) 선택하고 길게 누르거나 (마우스 오른쪽 단추로 클릭) 속성을(를) 선택합니다.

  3. UmdfDriver 속성 페이지 창에서 여기 표시된 대로 구성 속성 > 드라이버 설치 > 배포로 이동합니다.

  4. 배포전에 이전 드라이버 버전을 제거합니다.

  5. 대상 디바이스 이름테스트 및 디버깅을 위해 구성한 컴퓨터의 이름을 선택합니다.

  6. 하드웨어 ID 드라이버 업데이트선택하고 드라이버의 하드웨어 ID를 입력합니다. 이 연습에서 하드웨어 ID는 Root\UmdfDriver입니다. 확인을 선택합니다.

    배포 드라이버 설치가 선택된 것을 보여주는 UMDF 드라이버 속성 페이지의 스크린샷

    참고 이 연습에서는 하드웨어 ID가 실제 하드웨어 부분을 식별하지 않습니다. 루트 노드의 자식으로 디바이스 트리에 배치될 가상 디바이스를 식별합니다. 실제 하드웨어의 경우, 하드웨어 ID 드라이버 업데이트을 선택하지 말고, 대신 설치 및 확인을 선택하세요. 드라이버의 정보(INF) 파일에서 하드웨어 ID를 볼 수 있습니다. 솔루션 탐색기 창에서 UmdfDriver > 드라이버 파일들로 이동한 후, UmdfDriver.inf를 두 번 클릭합니다. 하드웨어 ID는 [Standard.NT$ARCH$]에 있습니다.

    [Standard.NT$ARCH$]
    %DeviceName%=MyDevice_Install,Root\UmdfDriver
    
  7. 디버그 메뉴에서 디버깅 시작선택하거나 키보드에서 F5 누릅니다.

  8. 드라이버가 대상 컴퓨터에 배포, 설치 및 로드될 때까지 기다립니다. 몇 분 정도 걸릴 수 있습니다.

DMF(드라이버 모듈 프레임워크) 사용

드라이버 모듈 프레임워크(DMF)는 WDF 드라이버 개발자가 추가 기능을 사용할 수 있도록 하는 WDF의 확장 기능입니다. 개발자가 모든 유형의 WDF 드라이버를 더 빠르고 더 빠르게 작성할 수 있도록 도와줍니다.

DMF를 프레임워크로 사용하면 DMF 모듈이라는 WDF 개체를 만들 수 있습니다. 이러한 DMF 모듈에 대한 코드는 서로 다른 드라이버 간에 공유할 수 있습니다. 또한 DMF는 드라이버를 위해 개발한 DMF 모듈 라이브러리를 번들로 묶어 다른 드라이버 개발자에게 가치를 제공할 것이라고 생각합니다.

DMF는 WDF를 대체하지 않습니다. DMF는 WDF와 함께 사용되는 두 번째 프레임워크입니다. DMF를 활용하는 개발자는 여전히 WDF 및 모든 기본 형식을 사용하여 디바이스 드라이버를 작성합니다.

자세한 내용은 DMF(드라이버 모듈 프레임워크)참조하세요.

드라이버 개발, 테스트 및 배포

Windows용 디버깅 도구

첫 번째 드라이버 작성하기