Partilhar via


Criando drivers para diferentes versões do Windows

Se você estiver escrevendo drivers para diferentes versões do Windows, a seção a seguir fornece algumas diretrizes sobre como você deve criar esses drivers usando o Kit de Driver do Windows (WDK), Visual Studio e MSBuild.

Diretrizes que se aplicam à criação de drivers de modo de usuário e de modo kernel

  • Crie seus drivers usando as configurações e plataformas de destino fornecidas pelo WDK. Use sempre a versão mais recente do WDK que ofereça suporte à versão do Windows que você deseja segmentar. Para obter informações sobre o WDK e o suporte à versão do sistema operativo, consulte Instalar versões de pré-visualização do Kit de Driver do Windows e Baixar o Kit de Driver do Windows.
  • Se o driver deve ser executado apenas em uma única versão do Windows, crie o driver para a configuração de destino e plataforma que corresponde à sua versão do Windows de destino.
  • Se pretender que o controlador seja executado em várias versões do Windows, mas sem funcionalidades disponíveis apenas em versões mais recentes, crie o controlador para a versão mais antiga que pretende que o controlador suporte.

Se você estiver visando 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 visando o 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 à construção de drivers de modo kernel

  • Se você quiser que seu driver de modo kernel seja executado em várias versões do Windows e determinar dinamicamente os recursos que estão disponíveis para o driver, crie o driver usando a configuração de compilação para a versão mais recente do sistema operacional. Por exemplo, se pretender que o controlador suporte todas as versões do Windows a partir do Windows 8.1, mas para utilizar determinadas funcionalidades que foram disponibilizadas pela primeira vez no Windows 10 quando o controlador está a ser executado no Windows 10 ou em versões posteriores do sistema operativo, especifique o 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 durante a execução. Para obter mais informações, consulte Desenvolvimento de drivers para diferentes versões do Windows.

  • Crie protótipos de ponteiros para funções que o controlador deve chamar condicionalmente.

  • Se você tiver um driver WDM ou um driver de modo kernel não KMDF e estiver visando o Windows 8.1 ou o Windows 8, mas também quiser executar em versões anteriores do Windows, precisará substituir o vinculador opção $(KernelBufferOverflowLib). Quando você seleciona configurações do Windows 8 ou Windows 8.1, o driver é vinculado com BufferOverflowFastFailK.lib, que não está disponível em versões anteriores do Windows. Para Windows 7 e Vista, você deve vincular com BufferOverflowK.lib em vez disso.

    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 suportadas pelo 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 oferecer suporte a compilações de depuração e lançamento do Windows 8.1 e do Windows 8, essas seções de configuração terão a seguinte aparência:

    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 de driver, você pode abrir o arquivo de projeto no Visual Studio e criar o driver.