Criando drivers para diferentes versões do Windows
Se você estiver escrevendo drivers para diferentes versões do Windows, a seção a seguir fornecerá algumas diretrizes sobre como você deve criar esses drivers usando o WDK (Kit de Driver do Windows), o Visual Studio e o MSBuild.
Diretrizes que se aplicam à criação de drivers no modo de usuário e no modo kernel
- Crie seus drivers usando as configurações e plataformas de destino que o WDK fornece. Sempre use a versão mais recente do WDK que dá suporte à versão do Windows que você deseja direcionar. Para obter informações sobre o WDK e o suporte à versão do sistema operacional, consulte Instalando versões prévias do Kit de Driver do Windows e Baixar o Kit de Driver do Windows.
- Se o driver precisar ser executado apenas em uma única versão do Windows, crie o driver para a configuração e a plataforma de destino que correspondem à sua versão de destino do Windows.
- Se você quiser que o driver seja executado em várias versões do Windows, mas sem recursos disponíveis apenas em versões mais recentes, crie o driver para a versão mais antiga à qual você deseja que o driver dê suporte.
Se você estiver direcionando o Windows 7, Windows 8 ou Windows 8.1, defina TargetVersion usando o Configuration Manager ou manualmente no arquivo .vcxproj, por exemplo<TargetVersion>Windows7</TargetVersion>
.
Se você estiver direcionando Windows 10 ou Windows 11, defina TargetVersion e _NT_TARGET_VERSION, por exemplo<TargetVersion>Windows10</TargetVersion> <_NT_TARGET_VERSION>0xA000006</_NT_TARGET_VERSION>
.
_NT_TARGET_VERSION valores são listados no arquivo de cabeçalho Sdkddkver.h no formato NTDDI_WIN10_*
, por exemplo #define NTDDI_WIN10_RS5 0x0A000006
, .
Diretrizes que se aplicam à criação de drivers no modo kernel
Se você quiser que o driver do modo kernel seja executado em várias versões do Windows e determine dinamicamente os recursos disponíveis para o driver, crie o driver usando a configuração de build para a versão mais recente do sistema operacional. Por exemplo, se você quiser que o driver dê suporte a todas as versões do Windows começando com Windows 8.1, mas para usar determinados recursos que estavam disponíveis pela primeira vez em Windows 10 quando o driver estiver em execução em Windows 10 ou versões posteriores do sistema operacional, especifique Windows 10 (Win10) como a configuração de destino.
Use as funções RtlIsNtDdiVersionAvailable e RtlIsServicePackVersionInstalled para determinar a versão do Windows que está disponível para o driver em tempo de execução. Para obter mais informações, consulte Escrevendo drivers para versões diferentes do Windows.
Crie protótipos para ponteiros para funções que seu driver deve chamar condicionalmente.
Se você tiver um driver WDM ou um driver de modo kernel não KMDF e estiver direcionando Windows 8.1 ou Windows 8, mas também quiser executar em versões anteriores do Windows, será necessário substituir a opção $(KernelBufferOverflowLib) do vinculador. Quando você seleciona Windows 8 ou Windows 8.1 configurações, o driver é vinculado ao BufferOverflowFastFailK.lib, que não está disponível em versões anteriores do Windows. Para o Windows 7 e o Vista, você deve vincular ao BufferOverflowK.lib.
Há duas maneiras de substituir a opção de vinculador $(KernelBufferOverflowLib), usando o MSBuild ou o Visual Studio.
Usando o 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
Usando o Visual Studio:
Usando o Bloco de Notas ou outro editor de texto, abra o arquivo de projeto do driver (*.vcxproj). No arquivo de projeto, localize o <PropertyGroup> para as configurações compatíveis com o driver e adicione a seguinte linha para substituir a opção de vinculador padrão:
XML <KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib</KernelBufferOverflowLib>
Por exemplo, se o driver der suporte a Windows 8.1 e Windows 8 builds de depuração e lançamento, essas seções de configuração seriam semelhantes às seguintes:
XML <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>
Os <elementos KernelBufferOverflowLib> devem aparecer no arquivo de projeto do driver antes do elemento que importa Microsoft.Cpp.props, que importa o conjunto de ferramentas.
Depois de modificar e salvar o arquivo de projeto do driver, você pode abrir o arquivo de projeto no Visual Studio e compilar o driver.