Génération de pilotes pour différentes versions de Windows

Si vous écrivez des pilotes pour différentes versions de Windows, la section suivante fournit des instructions sur la façon de créer ces pilotes à l’aide du Kit de pilotes Windows (WDK), Visual Studio et MSBuild.

Instructions qui s’appliquent à la création de pilotes en mode utilisateur et en mode noyau

  • Créez vos pilotes à l’aide des configurations et plateformes cibles que le WDK fournit. Utilisez toujours la dernière version du WDK qui prend en charge la version de Windows que vous souhaitez cibler. Pour plus d’informations sur WDK et la prise en charge des versions du système d’exploitation, consultez Installation des versions préliminaires du Kit de pilotes Windows et Télécharger le Kit de pilotes Windows.
  • Si votre pilote ne doit s’exécuter que sur une seule version de Windows, créez le pilote pour la configuration cible et la plateforme qui correspond à votre version cible de Windows.
  • Si vous souhaitez que votre pilote s’exécute sur plusieurs versions de Windows, mais sans fonctionnalités disponibles uniquement sur les versions plus récentes, créez le pilote pour la version la plus ancienne que vous souhaitez que le pilote soit pris en charge.

Si vous ciblez Windows 7, Windows 8 ou Windows 8.1, définissez TargetVersion à l’aide du Configuration Manager ou manuellement dans le fichier .vcxproj, par exemple <TargetVersion>Windows7</TargetVersion>.

Si vous ciblez Windows 10 ou Windows 11, définissez TargetVersion et _NT_TARGET_VERSION, par exemple <TargetVersion>Windows10</TargetVersion> <_NT_TARGET_VERSION>0xA000006</_NT_TARGET_VERSION>.

_NT_TARGET_VERSION valeurs sont répertoriées dans le fichier d’en-tête Sdkddkver.h sous la forme NTDDI_WIN10_*, par exemple #define NTDDI_WIN10_RS5 0x0A000006.

Instructions qui s’appliquent à la création de pilotes en mode noyau

  • Si vous souhaitez que votre pilote en mode noyau s’exécute sur plusieurs versions de Windows et détermine dynamiquement les fonctionnalités disponibles pour le pilote, générez le pilote à l’aide de la configuration de build pour la version la plus récente du système d’exploitation. Par exemple, si vous souhaitez que votre pilote prend en charge toutes les versions de Windows en commençant par Windows 8.1, mais pour utiliser certaines fonctionnalités qui étaient d’abord disponibles dans Windows 10 lorsque votre pilote s’exécute sur Windows 10 ou versions ultérieures du système d’exploitation, spécifiez Windows 10 (Win10) comme configuration cible.

  • Utilisez les fonctions RtlIsNtDdiVersionAvailable et RtlIsServicePackVersionInstalled pour déterminer la version de Windows disponible pour votre pilote au moment de l’exécution. Pour plus d’informations, consultez Écriture de pilotes pour différentes versions de Windows.

  • Créez des prototypes pour les pointeurs vers des fonctions que votre pilote doit appeler de manière conditionnelle.

  • Si vous disposez d’un pilote WDM ou d’un pilote en mode noyau non KMDF, que vous ciblez Windows 8.1 ou Windows 8, mais que vous souhaitez également exécuter sur des versions antérieures de Windows, vous devez remplacer l’option $(KernelBufferOverflowLib) de l’éditeur de liens. Lorsque vous sélectionnez Windows 8 ou Windows 8.1 configurations, le pilote est lié à BufferOverflowFastFailK.lib, qui n’est pas disponible dans les versions antérieures de Windows. Pour Windows 7 et Vista, vous devez plutôt établir un lien avec BufferOverflowK.lib.

    Il existe deux façons de remplacer l’option de l’éditeur de liens $(KernelBufferOverflowLib), à l’aide de MSBuild ou de Visual Studio.

    Utilisation de 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
    

    Utilisation de Visual Studio :

    À l’aide du Bloc-notes ou d’un autre éditeur de texte, ouvrez le fichier projet du pilote (*.vcxproj). Dans le fichier projet, recherchez le <PropertyGroup> pour les configurations que votre pilote prend en charge et ajoutez la ligne suivante pour remplacer l’option de l’éditeur de liens par défaut :

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

    Par exemple, si votre pilote prend en charge Windows 8.1 et Windows 8 versions de débogage et de mise en production, ces sections de configuration se présentent comme suit :

    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>

    Les <éléments KernelBufferOverflowLib> doivent apparaître dans le fichier projet du pilote avant l’élément qui importe Microsoft.Cpp.props, qui importe l’ensemble d’outils.

    Après avoir modifié et enregistré le fichier projet du pilote, vous pouvez ouvrir le fichier projet dans Visual Studio et générer le pilote.