Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Om du skriver drivrutiner för olika versioner av Windows innehåller följande avsnitt några riktlinjer för hur du ska skapa dessa drivrutiner med hjälp av Windows Driver Kit (WDK), Visual Studio och MSBuild.
Riktlinjer som gäller för att skapa drivrutiner i både användarläge och kernelläge
- Skapa dina drivrutiner med hjälp av de målkonfigurationer och plattformar som WDK tillhandahåller. Använd alltid den senaste versionen av WDK som stöder den version av Windows som du vill rikta in dig på. Information om stöd för WDK och operativsystemversion finns i Installera förhandsversioner av Windows Driver Kit och Ladda ned Windows Driver Kit.
 - Om drivrutinen bara får köras på en enda version av Windows skapar du drivrutinen för målkonfigurationen och plattformen som matchar din Windows-målversion.
 - Om du vill att drivrutinen ska köras på flera versioner av Windows, men utan funktioner som endast är tillgängliga i nyare versioner, skapar du drivrutinen för den äldsta versionen som du vill att drivrutinen ska stödja.
 
Om du riktar in dig på Windows 7, Windows 8 eller Windows 8.1 anger du TargetVersion med hjälp av Configuration Manager eller manuellt i filen .vcxproj, till exempel <TargetVersion>Windows7</TargetVersion>.
Om du riktar in dig på Windows 10 eller Windows 11 anger du både TargetVersion och _NT_TARGET_VERSION, till exempel <TargetVersion>Windows10</TargetVersion> <_NT_TARGET_VERSION>0xA000006</_NT_TARGET_VERSION>.
              _NT_TARGET_VERSION värden visas i rubrikfilen Sdkddkver.h i formuläret NTDDI_WIN10_*, till exempel #define NTDDI_WIN10_RS5 0x0A000006.
Riktlinjer som gäller för att skapa drivrutiner i kernelläge
Om du vill att drivrutinen i kernelläge ska köras på flera versioner av Windows och dynamiskt fastställa vilka funktioner som är tillgängliga för drivrutinen skapar du drivrutinen med hjälp av byggkonfigurationen för den senaste versionen av operativsystemet. Om du till exempel vill att drivrutinen ska ha stöd för alla versioner av Windows från och med Windows 8.1, men om du vill använda vissa funktioner som först var tillgängliga i Windows 10 när drivrutinen körs på Windows 10 eller senare versioner av operativsystemet, anger du Windows 10 (Win10) som målkonfiguration.
Använd funktionerna RtlIsNtDdiVersionAvailable och RtlIsServicePackVersionInstalled för att fastställa vilken version av Windows som är tillgänglig för drivrutinen vid körning. Mer information finns i Skriva drivrutiner för olika versioner av Windows.
Skapa prototyper för funktionspekare som din drivrutin måste anropa villkorligt.
Om du har en WDM-drivrutin eller en drivrutin som inte är i KMDF-kernelläge och du riktar in dig på Windows 8.1 eller Windows 8 men också vill köra på tidigare versioner av Windows, måste du åsidosätta alternativet linker $(KernelBufferOverflowLib). När du väljer Windows 8- eller Windows 8.1-konfigurationer länkas drivrutinen med BufferOverflowFastFailK.lib, som inte är tillgänglig i tidigare Windows-versioner. För Windows 7 och Vista måste du länka till BufferOverflowK.lib i stället.
Det finns två sätt att åsidosätta länkalternativet $(KernelBufferOverflowLib) med hjälp av antingen MSBuild eller Visual Studio.
Använda 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.slnAnvända Visual Studio:
Öppna drivrutinsprojektfilen (*.vcxproj) med hjälp av Anteckningar eller en annan textredigerare. Leta upp <PropertyGroup> för de konfigurationer som din drivrutin stöder i projektfilen och lägg till följande rad för att åsidosätta standardalternativet för länkar:
XML <KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib</KernelBufferOverflowLib>Om din drivrutin till exempel stöder debug- och release-versioner av Windows 8.1 och Windows 8 ser dessa konfigurationsavsnitt ut så här:
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>Elementen< KernelBufferOverflowLib> måste visas i drivrutinsprojektfilen före elementet som importerar Microsoft.Cpp.props, som importerar verktygsuppsättningen.
När du har modifierat och sparat drivrutinsprojektets fil kan du öppna projektfilen i Visual Studio och skapa drivrutinen.