Sdílet prostřednictvím


Vytváření ovladačů pro různé verze Windows

Pokud píšete ovladače pro různé verze Systému Windows, následující část obsahuje některé pokyny k vytváření těchto ovladačů pomocí sady Windows Driver Kit (WDK), sady Visual Studio a NÁSTROJE MSBuild.

Pokyny, které platí pro vytváření ovladačů uživatelského režimu i režimu jádra

  • Sestavte ovladače pomocí cílových konfigurací a platforem, které poskytuje WDK. Vždy používejte nejnovější verzi WDK, která podporuje verzi systému Windows, na kterou chcete cílit. Informace o podpoře verzí WDK a operačního systému naleznete v tématu Instalace verzí Preview sady Windows Driver Kit a Stažení sady Windows Driver Kit.
  • Pokud ovladač musí běžet jenom v jedné verzi Windows, sestavte ovladač pro cílovou konfiguraci a platformu, která odpovídá vaší cílové verzi Windows.
  • Pokud chcete, aby ovladač běžel ve více verzích Windows, ale bez funkcí, které jsou dostupné jenom v novějších verzích, vytvořte ovladač pro nejstarší verzi, kterou má ovladač podporovat.

Pokud cílíte na Windows 7, Windows 8 nebo Windows 8.1, nastavte TargetVersion pomocí Configuration Manageru nebo ručně v souboru .vcxproj, například <TargetVersion>Windows7</TargetVersion>.

Pokud cílíte na Windows 10 nebo Windows 11, nastavte TargetVersion i _NT_TARGET_VERSION, například <TargetVersion>Windows10</TargetVersion> <_NT_TARGET_VERSION>0xA000006</_NT_TARGET_VERSION>.

_NT_TARGET_VERSION hodnoty jsou uvedeny v hlavičkovém souboru Sdkddkver.h ve formě NTDDI_WIN10_*, například #define NTDDI_WIN10_RS5 0x0A000006.

Pokyny, které platí pro vytváření ovladačů režimu jádra

  • Pokud chcete, aby ovladač v režimu jádra běžel ve více verzích Windows a dynamicky určete funkce, které jsou pro ovladač k dispozici, sestavte ovladač pomocí konfigurace sestavení pro nejnovější verzi operačního systému. Pokud například chcete, aby ovladač podporoval všechny verze Windows počínaje Windows 8.1, ale aby používal určité funkce, které byly ve Windows 10 poprvé dostupné, když ovladač běží ve Windows 10 nebo novějších verzích operačního systému, zadejte jako cílovou konfiguraci Windows 10 (Win10).

  • Pomocí funkcí RtlIsNtDdiVersionAvailable a RtlIsServicePackVersionInstalled určete verzi Systému Windows, která je k dispozici ovladači za běhu. Další informace naleznete v tématu Vytváření ovladačů pro různé verze Windows.

  • Vytvořte prototypy pro ukazatele na funkce, které musí ovladač volat za určitých podmínek.

  • Pokud máte ovladač WDM nebo ovladač bez kmDF v režimu jádra a cílíte na Windows 8.1 nebo Windows 8, ale chcete také spustit v dřívějších verzích Windows, musíte přepsat linker $(KernelBufferOverflowLib). Když vyberete konfigurace Windows 8 nebo Windows 8.1, ovladač je propojený s BufferOverflowFastFailK.lib, který není k dispozici v dřívějších verzích Windows. Pro Windows 7 a Vista je nutné místo toho propojit s BufferOverflowK.lib.

    Existují dva způsoby, jak přepsat možnost linkeru $(KernelBufferOverflowLib) pomocí nástroje MSBuild nebo sady Visual Studio.

    Pomocí nástroje 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
    

    Pomocí sady Visual Studio:

    Pomocí Poznámkového bloku nebo jiného textového editoru otevřete soubor projektu ovladače (*.vcxproj). V souboru projektu vyhledejte <PropertyGroup> pro konfigurace, které ovladač podporuje, a přidejte následující řádek, který přepíše výchozí možnost linkeru:

    XML
     
       <KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib</KernelBufferOverflowLib>
    

    Pokud například ovladač podporuje sestavení ladění a vydávání windows 8.1 a Windows 8, budou tyto části konfigurace vypadat takto:

    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>

    Prvky <KernelBufferOverflowLib> musí být uvedeny v souboru projektu ovladače před element, který importuje Microsoft.Cpp.props, který importuje sadu nástrojů.

    Po úpravě a uložení souboru projektu ovladače můžete otevřít soubor projektu v sadě Visual Studio a sestavit ovladač.