서로 다른 Windows 버전용 드라이버 빌드
서로 다른 Windows 버전용 드라이버를 작성하는 경우 다음 섹션에서는 WDK(Windows 드라이버 키트) 8.1 또는 WDK 8, Visual Studio 및 MSBuild를 사용하여 해당 드라이버를 빌드하는 방법에 대한 몇 가지 지침을 제공합니다.
사용자 모드 및 커널 모드 드라이버 빌드에 적용되는 지침
- WDK에서 제공하는 플랫폼 및 대상 구성을 사용하여 드라이버를 빌드합니다. 항상 대상으로 지정할 Windows 버전을 지원하는 최신 버전의 WDK를 사용합니다. 예를 들어 Windows XP용 드라이버를 빌드하려면 Windows 7 WDK를 사용해야 합니다. 그러나 Windows 8.1, Windows 8, Windows 7용 드라이버를 빌드하려면 WDK 8.1과 Visual Studio를 사용합니다.
- 드라이버가 단일 버전의 Windows에서만 실행되어야 하는 경우 대상 Windows 버전과 일치하는 플랫폼 및 대상 구성용 드라이버를 빌드합니다. 예를 들어 WDK 8.1에서만 실행될 드라이버를 빌드하려면 구성 관리자에서 Win8.1을 지정합니다.
- 드라이버가 여러 버전의 Windows에서 실행되지만 최신 버전에서만 제공되는 기능은 사용하지 않도록 하려면 드라이버에서 지원하도록 할 가장 오래된 버전용 드라이버를 빌드합니다. 예를 들어 드라이버가 Windows Vista부터 시작되는 모든 Windows 버전에서 실행되고 Windows Vista에서 제공되는 기능만 사용하도록 하려면 프로젝트 구성에 Vista를 지정합니다.
커널 모드 드라이버 빌드에 적용되는 지침
커널 모드 드라이버가 여러 버전의 Windows에서 실행되도록 하고 드라이버에서 사용할 수 있는 기능을 동적으로 결정하려면 최신 운영 체제 버전의 빌드 구성을 사용하여 드라이버를 빌드합니다. 예를 들어 드라이버가 Windows 7부터 시작되는 모든 Windows 버전을 지원하지만 드라이버가 Windows 8.1 이상의 운영 체제 버전에서 실행되는 경우 Windows 8.1에서 처음 제공된 특정 기능을 사용하도록 하려면 Windows 8.1(Win8.1)을 대상 구성으로 지정합니다.
RtlIsNtDdiVersionAvailable 및 RtlIsServicePackVersionInstalled 함수를 사용하여 런타임 시 드라이버에서 사용할 수 있는 Windows 버전을 결정합니다. 자세한 내용은 서로 다른 Windows 버전용 드라이버 작성을 참조하세요.
드라이버가 조건부로 호출해야 하는 함수에 대한 포인터의 프로토타입을 만듭니다.
WDM 드라이버 또는 KMDF 이외의 커널 모드 드라이버가 있는 경우 Windows 8.1 또는 Windows 8을 대상으로 하지만 이전 버전의 Windows에서 실행되도록 하려면 링커 $(KernelBufferOverflowLib) 옵션을 재정의해야 합니다. Windows 8 또는 Windows 8.1 구성을 선택하면 드라이버가 이전 Windows 버전에서는 사용할 수 없는 BufferOverflowFastFailK.lib와 연결됩니다. 대신 Windows 7과 Vista는 BufferOverflowK.lib와 연결해야 합니다.
$(KernelBufferOverflowLib) 링커 옵션을 MSBuild 또는 Visual Studio를 사용하여 두 가지 방법으로 재정의할 수 있습니다.
MSBuild 사용:
msbuild /p:KernelBufferOverflowLib="C:\Program Files (x86)\Windows Kits\8.1\Lib\win8\km\x64\BufferOverflowK.lib" /p:platform=x64 /p:Configuration="Win8 Release" myDriver.sln
Visual Studio 사용:
메모장이나 다른 텍스트 편집기를 사용하여 드라이버 프로젝트 파일(*.vcxproj)을 엽니다. 프로젝트 파일에서 드라이버가 지원하는 구성에 대한 **<PropertyGroup>**을 찾고 다음 줄을 추가하여 기본 링커 옵션을 재정의합니다.
<KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib</KernelBufferOverflowLib>
예를 들어 드라이버가 Windows 8.1 및 Windows 8 디버그와 릴리스 빌드를 지원하는 경우 해당 구성 섹션은 다음과 같습니다.
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Debug|Win32'" Label="Configuration"> <TargetVersion>WindowsV6.3</TargetVersion> <UseDebugLibraries>true</UseDebugLibraries> <KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib</KernelBufferOverflowLib> <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> <ConfigurationType>Driver</ConfigurationType> <DriverType>KMDF</DriverType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Release|Win32'" Label="Configuration"> <TargetVersion>WindowsV6.3</TargetVersion> <UseDebugLibraries>false</UseDebugLibraries> <KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib</KernelBufferOverflowLib> <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> <ConfigurationType>Driver</ConfigurationType> <DriverType>KMDF</DriverType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Debug|Win32'" Label="Configuration"> <TargetVersion>Windows8</TargetVersion> <UseDebugLibraries>true</UseDebugLibraries> <KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib</KernelBufferOverflowLib> <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> <ConfigurationType>Driver</ConfigurationType> <DriverType>KMDF</DriverType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Release|Win32'" Label="Configuration"> <TargetVersion>Windows8</TargetVersion> <UseDebugLibraries>false</UseDebugLibraries> <KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib</KernelBufferOverflowLib> <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> <ConfigurationType>Driver</ConfigurationType> <DriverType>KMDF</DriverType> </PropertyGroup>
드라이버 프로젝트 파일에서 <KernelBufferOverflowLib> 요소는 도구 집합을 가져오는 Microsoft.Cpp.props를 가져오는 요소 앞에 나타나야 합니다.
드라이버 프로젝트 파일을 수정하고 저장한 후 Visual Studio에서 프로젝트 파일을 열고 드라이버를 빌드할 수 있습니다.