-
EWDK(Enterprise WDK) 를 사용하여 여러 Visual Studio 에서 Driver 개발하기윈도우/커널 드라이버 2026. 1. 8. 18:19반응형
개요
EWDK란?
EWDK(Enterprise Windows Driver Kit)는 Microsoft에서 제공하는 독립 실행형 드라이버 개발 키트입니다. 일반 WDK와 달리 시스템에 설치할 필요 없이 ISO 파일 하나로 모든 빌드 도구를 포함하고 있어, 여러 WDK 버전을 충돌 없이 사용할 수 있습니다.
일반 WDK vs EWDK 비교
항목WDKEWDK설치 방식 시스템에 설치 ISO 마운트 또는 압축 해제 Visual Studio 필요 필수 불필요 (자체 포함) MSVC 컴파일러 VS에 의존 자체 포함 여러 버전 공존 충돌 발생 가능 충돌 없음 시스템 영향 레지스트리, 환경변수 변경 없음 이 가이드의 목적
일반적으로 EWDK는 커맨드라인 빌드 전용으로 사용됩니다. 하지만 적절한 환경 구성을 통해 Visual Studio IDE에서도 EWDK를 활용할 수 있습니다. 이 가이드에서는 여러 버전의 EWDK를 Visual Studio와 함께 사용하는 방법을 설명합니다.
사전 준비
1. EWDK 다운로드
최신 EWDK (Windows 11, Windows 10 22H2 이상)
레거시 EWDK (Windows 10 이전 버전 타겟)
위 링크에서 필요한 EWDK 버전의 ISO 파일을 다운로드합니다.
2. EWDK 압축 해제
ISO 파일을 마운트하여 원하는 경로에 복사합니다. 버전별로 폴더를 분리하는 것을 권장합니다.
D:\EWDKs\ ├── 10.0.14393.0\ ← Windows 10 1607 (레거시) │ ├── BuildEnv\ │ ├── Program Files\ │ └── LaunchBuildEnv.cmd ├── 10.0.22621.0\ ← Windows 11 22H2 │ ├── BuildEnv\ │ ├── Program Files\ │ └── LaunchBuildEnv.cmd └── 10.0.26100.0\ ← Windows 11 24H2 ├── BuildEnv\ ├── Program Files\ └── LaunchBuildEnv.cmd3. Visual Studio 설치
Visual Studio 2022를 설치하고, 다음 구성 요소가 포함되어 있는지 확인합니다.
- C++를 사용한 데스크톱 개발
- Windows용 C++ Spectre 완화 라이브러리 (선택)
참고: EWDK에 MSVC가 포함되어 있지만, VS의 IntelliSense 및 일부 기능을 위해 기본 C++ 도구는 설치하는 것이 좋습니다.
환경 구성
방법 1: Junction을 사용한 경로 연결 (권장)
Junction은 Windows의 디렉토리 심볼릭 링크로, 프로그램이 특정 경로에 접근할 때 다른 경로로 투명하게 리다이렉트합니다.
1단계: 기존 WDK 폴더 처리
관리자 권한 명령 프롬프트에서 실행:
cmd:: 기존 WDK가 설치되어 있다면 백업 또는 삭제 :: 백업하는 경우 ren "C:\Program Files (x86)\Windows Kits\10" "Windows Kits_backup" :: 또는 삭제하는 경우 (재설치로 복구 가능) rmdir /s /q "C:\Program Files (x86)\Windows Kits\10"2단계: Junction 생성
cmd:: EWDK 경로로 Junction 생성 mklink /J "C:\Program Files (x86)\Windows Kits\10" "D:\EWDKs\10.0.22621.0\Program Files\Windows Kits\10"3단계: WDK 버전 전환
다른 EWDK 버전으로 전환하려면:
cmd:: 기존 Junction 제거 rmdir "C:\Program Files (x86)\Windows Kits\10" :: 새 버전으로 Junction 생성 mklink /J "C:\Program Files (x86)\Windows Kits\10" "D:\EWDKs\10.0.14393.0\Program Files\Windows Kits\10"방법 2: 시스템 환경변수 설정
Junction만으로는 일부 MSBuild 변수가 설정되지 않을 수 있습니다. 필요한 경우 시스템 환경변수를 추가합니다.
필수 환경변수
변수명값 예시WDKContentRoot C:\Program Files (x86)\Windows Kits\10\ WindowsSdkDir C:\Program Files (x86)\Windows Kits\10\ DisableRegistryUse True EnterpriseWDK True 환경변수 설정 방법
GUI 방식:
- 시스템 속성 → 고급 → 환경 변수
- 시스템 변수에서 "새로 만들기" 클릭
- 위 변수들을 추가
명령줄 방식 (관리자 권한):
cmdsetx WDKContentRoot "C:\Program Files (x86)\Windows Kits\10\" /M setx WindowsSdkDir "C:\Program Files (x86)\Windows Kits\10\" /M setx DisableRegistryUse "True" /M setx EnterpriseWDK "True" /M버전 전환 자동화 스크립트
자주 버전을 전환한다면 배치 스크립트를 만들어 사용합니다.
switch-ewdk.cmd:
cmd@echo off setlocal if "%1"=="" ( echo 사용법: switch-ewdk.cmd [버전] echo 예시: switch-ewdk.cmd 10.0.22621.0 echo. echo 사용 가능한 버전: dir /b /ad "D:\EWDKs" exit /b 1 ) set "EWDK_PATH=D:\EWDKs\%1\Program Files\Windows Kits\10" set "WDK_LINK=C:\Program Files (x86)\Windows Kits\10" if not exist "%EWDK_PATH%" ( echo 오류: %EWDK_PATH% 경로가 존재하지 않습니다. exit /b 1 ) echo 기존 Junction 제거 중... rmdir "%WDK_LINK%" 2>nul echo Junction 생성 중: %1 mklink /J "%WDK_LINK%" "%EWDK_PATH%" if %errorlevel%==0 ( echo. echo ✓ EWDK %1 버전으로 전환 완료 ) else ( echo. echo ✗ Junction 생성 실패. 관리자 권한으로 실행하세요. ) endlocal사용 예:
cmd:: 관리자 권한으로 실행 switch-ewdk.cmd 10.0.22621.0 switch-ewdk.cmd 10.0.14393.0
사용 방법
Visual Studio에서 프로젝트 빌드
Junction과 환경변수 설정이 완료되면, Visual Studio에서 일반적인 방법으로 드라이버 프로젝트를 열고 빌드할 수 있습니다.
- Visual Studio 실행
- 드라이버 프로젝트(.vcxproj) 열기
- 구성(Debug/Release) 및 플랫폼(x64/Win32) 선택
- 빌드 → 솔루션 빌드 (Ctrl+Shift+B)
커맨드라인 빌드 (MSBuild)
EWDK 환경에서 직접 빌드하려면:
cmd:: EWDK 환경 진입 D:\EWDKs\10.0.22621.0\LaunchBuildEnv.cmd :: 프로젝트 폴더로 이동 cd C:\MyDriver :: 빌드 실행 msbuild MyDriver.vcxproj /p:Configuration=Release /p:Platform=x64프로젝트 설정 확인
드라이버 프로젝트의 .vcxproj 파일에서 타겟 플랫폼 버전이 설치된 EWDK 버전과 일치하는지 확인합니다.
xml<PropertyGroup Label="Globals"> <WindowsTargetPlatformVersion>10.0.22621.0</WindowsTargetPlatformVersion> <!-- ... --> </PropertyGroup>
트러블슈팅
오류: SUBSYSTEM_NATVER 관련 오류
증상:
"$(MIDL_TARGET)" == "$(MIDL_TARGET_WIN7)" AND $(SUBSYSTEM_NATVER) < 6.01" 조건에서 숫자 대신 ""(으)로 계산되는 "$(SUBSYSTEM_NATVER)"에 대해 숫자 비교를 시도했습니다.해결: 프로젝트 파일의 <PropertyGroup Label="Globals">에 다음을 추가:
xml<SUBSYSTEM_NATVER>6.01</SUBSYSTEM_NATVER> <MIDL_TARGET>NT62</MIDL_TARGET>오류: FltMgr.lib 링크 오류
증상:
unresolved external symbol FltRegisterFilter unresolved external symbol FltUnregisterFilter해결: $(DDK_LIB_PATH) 변수가 제대로 설정되지 않은 경우입니다. 프로젝트 속성에서 직접 경로를 지정:
프로젝트 속성 → Linker → Input → Additional DependenciesC:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\km\$(Platform)\fltmgr.lib오류: MSVC 도구 집합을 찾을 수 없음
증상:
error MSB8070: MSVC 도구 집합 버전 '14.xx.xxxxx'을(를) 찾을 수 없습니다.해결: Visual Studio Installer에서 해당 버전의 MSVC를 설치:
- Visual Studio Installer 실행
- 수정 → 개별 구성 요소
- 필요한 MSVC 버전 선택 (예: "MSVC v143 - VS 2022 C++ x64/x86 빌드 도구")
- 설치
오류: IntelliSense가 헤더를 찾지 못함
증상: 코드에서 #include <ntddk.h> 등에 빨간 밑줄 표시
해결: 프로젝트 속성에서 Include 경로를 명시적으로 추가:
프로젝트 속성 → C/C++ → General → Additional Include DirectoriesC:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\km; C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\shared; C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\um;
부록
EWDK 주요 환경변수 목록
WDKContentRoot WDK 루트 경로 C:\Program Files (x86)\Windows Kits\10\ WindowsSdkDir Windows SDK 경로 C:\Program Files (x86)\Windows Kits\10\ VCTargetsPath MSBuild VC targets 경로 ...\MSBuild\Microsoft\VC\v170\ VCToolsInstallDir MSVC 도구 설치 경로 ...\VC\Tools\MSVC\14.xx.xxxxx\ DisableRegistryUse 레지스트리 사용 비활성화 True EnterpriseWDK EWDK 모드 플래그 True EWDK 내부 스크립트 구조
EWDK ISO/폴더 ├── LaunchBuildEnv.cmd ← 메인 진입점 └── BuildEnv\ ├── SetupBuildEnv.cmd ← WDK/SDK 환경 설정 ├── SetupVSEnv.cmd ← VS/MSBuild 변수 설정 └── SetDevEnv.cmd ← 사용자 커스텀 설정실행 순서:
- LaunchBuildEnv.cmd 실행
- SetupBuildEnv.cmd → WDK 경로 및 vsdevcmd.bat 호출
- SetupVSEnv.cmd → VCTargetsPath 등 MSBuild 변수 설정
- SetDevEnv.cmd → 사용자 정의 설정 (선택)
지원되는 타겟 OS 버전
최신 EWDK로도 하위 버전 Windows를 타겟으로 빌드할 수 있습니다.
EWDK 버전지원 타겟 OS10.0.26100.0 (24H2) Windows 7 ~ Windows 11 24H2 10.0.22621.0 (22H2) Windows 7 ~ Windows 11 22H2 10.0.14393.0 (1607) Windows 7 ~ Windows 10 1607 프로젝트 설정에서 TargetVersion을 원하는 OS로 지정하면 됩니다.
xml<PropertyGroup Label="Configuration"> <TargetVersion>Windows7</TargetVersion> <!-- 또는 Windows10, Windows11 등 --> </PropertyGroup>
참고 자료
반응형'윈도우 > 커널 드라이버' 카테고리의 다른 글
Windows 커널 IRQL 완벽 가이드: 레벨별 제약사항과 크래시 방지 전략 (0) 2025.12.22