Använda en tilläggs-INF-fil
Före Windows 10 valde Windows ett enda drivrutinspaket att installera för en viss enhet. Detta resulterade i stora, komplexa drivrutinspaket som innehöll kod för alla scenarier och konfigurationer, och varje mindre uppdatering krävde en uppdatering av hela drivrutinspaketet. Från och med Windows 10 kan du dela upp INF-funktioner i flera komponenter, som var och en kan hanteras oberoende av varandra. Kärndrivrutinspaketet som är installerat på en enhet kallas nu basdrivrutinspaketet och hanteras av systemet på samma sätt som drivrutinspaketen har hanterats före Windows 10. Om du vill utöka basdrivrutinspaketets funktioner tillhandahåller du ett tilläggs-INF i ett separat drivrutinspaket. En förlängning INF:
Kan tillhandahållas av ett annat företag och uppdateras oberoende av bas-INF.
Använder samma INF-syntax som en bas-INF, men kan utöka bas-INF för anpassning eller specialisering.
Förbättrar enhetens värde, men är inte nödvändigt för att basdrivrutinspaketet ska fungera. I avsaknad av tillägget INF måste systemet kunna starta och ansluta till nätverket med bara basdrivrutinspaketet. Indataenheter som är inbyggda i systemet, till exempel ett tangentbord, måste kunna fungera med minst grundläggande funktioner utan tilläggs-INF:er.
Måste vara en universell INF-fil.
Varje enhet måste ha ett basdrivrutinspaket installerat på den och kan också ha en eller flera tilläggs-INF:er associerade med den. Ett tilläggs-INF kan inte installeras på en enhet om det inte finns något basdrivrutinspaket som också kan installeras på enheten.
Vanliga scenarier där du kan använda ett tilläggs-INF är:
Ändra inställningar som anges i ett basdrivrutinspaket, till exempel anpassa enhetens eget namn eller ändra en maskinvarukonfigurationsinställning.
Skapa en eller flera programvarukomponenter genom att ange INF AddComponent-direktiv och tillhandahålla en inf-fil för komponent.
Tillhandahålla inställningar som är specifika för modellen eller formfaktorn i systemet som förbättrar enhetens upplevelse eller funktionalitet, till exempel maskinvarukalibreringsdata.
Lägga till en filterdrivrutin i enhetsstacken.
Du hittar exempelkod för några av dessa scenarier i exemplen nedan. Se även DCH-Compliant Exempel på drivrutinspaket, som beskriver hur DCHU-exempel på universell drivrutin använder tilläggs-INF:er.
Så här fungerar inf-tillägget och basdrivrutinspaketet tillsammans
Under en enhetsinstallation tillämpas inställningar i ett tilläggs-INF efter inställningarna i ett basdrivrutinspaket. Om ett tilläggs-INF och ett basdrivrutinspaket anger samma inställning tillämpas därför versionen i tillägget INF. På samma sätt, om basdrivrutinspaketet ändras, förblir tillägget INF och tillämpas över det nya basdrivrutinspaketet. Om flera tilläggs-INF:er installeras på samma enhet finns det ingen fördefinierad ordning som tilläggs-INF:er kommer att tillämpas i, så ett tilläggs-INF kan inte deterministiskt åsidosätta värden som tillhandahålls av ett annat tilläggs-INF. Distinkta tilläggs-INF:er som är riktade till samma enheter bör inte försöka ändra samma inställningar.
Det är bra att inkludera kommentarer i basdrivrutinspaketet som beskriver vilka poster som kan åsidosättas av ett tilläggs-INF, samt tillämpliga parametervärdeintervall och begränsningar.
Ange Extension Id
När du skriver ett tilläggs-INF genererar du ett särskilt GUID med namnet ExtensionId, som är en post i AVSNITTET INF:s [Version].
Systemet identifierar möjliga tilläggs-INF:er för en specifik enhet genom att matcha enhetens maskinvaru-ID och kompatibla ID:n till dem som anges i ett tilläggs-INF i ett Models-avsnitt som gäller för systemet.
Bland alla möjliga tilläggs-INF:er som anger samma ExtensionId- värde väljer systemet bara en som ska installeras och tillämpar inställningarna för basdrivrutinspaketet. Drivrutinsdatum och drivrutinsversion som anges i INF används i den ordningen för att välja den enskilda INF:en mellan flera tilläggs-INF:er med samma ExtensionId.
För att illustrera, tänk på följande scenario som innehåller en hypotetisk enhet för vilken det finns tre tilläggs-INF:er:
Värdena ExtensionId{A}
och {B}
visas inom klammerparenteser, och varje basdrivrutinspakets rangordning visas i banderollbanden.
Först väljer systemet basdrivrutinspaketet med bästa rangordning och högsta version.
Därefter bearbetar systemet de tillgängliga tilläggs-INF:erna. Två har ExtensionId-värdet {B}
och ett har ExtensionId-värdet {A}
. Låt oss säga att drivrutinsdatumet är detsamma för de två första. Nästa tiebreaker är drivrutinsversionen, så systemet väljer tillägget INF i version 2.0.
Tillägget INF med det unika ExtensionId-värdet är också valt. Systemet tillämpar basdrivrutinspaketet för enheten och tillämpar sedan de två tilläggs-INF:erna för den enheten.
Tilläggs-INF-filer tillämpas alltid efter basdrivrutinspaketet, men att det inte finns någon bestämd ordning i vilken tilläggs-INF:er tillämpas.
Skapa en tilläggs-INF-fil
Här är de poster som du behöver för att definiera en INF som ett INF-tillägg.
Ange dessa värden för Class och ClassGuid i avsnittet Version. Mer information om installationsklasser finns i System-Defined Enhetsinstallationsklasser som är tillgängliga för leverantörer.
[Version] ... Class = Extension ClassGuid = {e2f84ce7-8efa-411c-aa69-97454ca4cb57} ...
Ange en ExtensionId- post i avsnittet [Version]. Generera ett nytt GUID för den första versionen av ett tilläggs-INF eller återanvänd det sista GUID:t för efterföljande uppdateringar av det inledande tillägget INF.
ExtensionId = {zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz} ; replace with your own GUID
En organisation får endast använda en ExtensionID- som den äger. Information om hur du registrerar ett tilläggs-ID finns i Hantering av maskinvaruöverföringar på Windows Hardware Dev Center-instrumentpanelen.
Om du uppdaterar ett tilläggs-INF behåller du ExtensionId samma och ökar den version och det datum som anges i DriverVer-direktivet. För ett visst ExtensionId-värde väljer PnP INF med högst DriverVer.
Not
Om tillägget INF är avsett för Windows 10 S kan du läsa Windows 10 i S-läge för drivrutinskraven för information om drivrutinsinstallation på den versionen av Windows.
I avsnittet INF-modelleranger du en eller flera maskinvaru- och kompatibla ID:n som matchar målenhetens. Dessa maskinvaru- och kompatibla ID:er behöver inte matcha basdrivrutinspaketets. Vanligtvis listar ett tilläggs-INF ett mer specifikt maskinvaru-ID än basdrivrutinspaketet, med målet att ytterligare specialisera en specifik drivrutinskonfiguration. Basdrivrutinspaketet kan till exempel använda ett pci-maskinvaru-ID i två delar, medan tillägget INF anger ett PCI-maskinvaru-ID i fyra delar, som följande:
[DeviceExtensions.NTamd64] %Device.ExtensionDesc% = DeviceExtension_Install, PCI\VEN_XXXX&DEV_XXXX&SUBSYS_XXXXXXXX&REV_XXXX
Alternativt kan tillägget INF visa samma maskinvaru-ID som basdrivrutinspaketet, till exempel om enheten redan är snävt riktad, eller om basdrivrutinspaketet redan listar det mest specifika maskinvaru-ID:t.
I vissa fall kan tillägget INF tillhandahålla ett mindre specifikt enhets-ID, till exempel ett kompatibelt ID, för att anpassa en inställning över en bredare uppsättning enheter.
CHID-mål kan användas om ett maskinvaru-ID i fyra delar inte är möjligt eller inte är tillräckligt restriktivt.
Definiera inte en tjänst med
SPSVCINST_ASSOCSERVICE
. Ett tilläggs-INF kan inte tillhandahålla en funktionsdrivrutin för en enhet. Ett tilläggs-INF kan dock definiera andra tjänster, till exempel en filterdrivrutin för enheten. Mer information om hur du anger tjänster finns i INF AddService Directive.
I de flesta fall skickar du ett INF-drivrutinspaket för tillägg till Hardware Dev Center separat från basdrivrutinspaketet. Exempel på hur du paketar tilläggs-INF:er och länkar till exempelkod finns i DCH-Compliant Exempel på drivrutinspaket.
Processen för validering och överföring av drivrutiner är densamma för tilläggs-INF:er som för basdrivrutinspaket. Mer information finns i Windows HLK Komma igång.
Avinstallera en tilläggsdrivrutin
Om du vill ta bort ett tilläggsdrivrutinspaket från systemet och avinstallera det från alla enheter som använder det använder du PnPUtilsdelete-driver
-kommando med flaggan uninstall
. På så sätt kan tilläggsdrivrutinspaketet avinstalleras från enheter utan att basdrivrutinspaketet tas bort.
Leta reda på oem-<#>.inf-namnet på drivrutinspaketet för att avinstallera och använda pnputil /delete-driver oem<#>.inf /uninstall
.
pnputil /enum-drivers
kan användas för att identifiera rätt oem-<#>.inf-namn.
Exempel 1: Använda en INF-fil för att ange enhetens begripliga namn
I ett vanligt scenario tillhandahåller en enhetstillverkare (IHV) ett basdrivrutinspaket, och sedan tillhandahåller en systembyggare (OEM) ett tilläggs-INF som kompletterar och i vissa fall åsidosätter konfigurationen och inställningarna för basdrivrutinspaketet. Följande kodfragment är ett fullständigt INF-tillägg som visar hur du anger det vänliga namnet för enheten.
[Version]
Signature = "$WINDOWS NT$"
Class = Extension
ClassGuid = {e2f84ce7-8efa-411c-aa69-97454ca4cb57}
Provider = %CONTOSO%
ExtensionId = {zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz} ; replace with your own GUID
DriverVer = 05/28/2013,1.0.0.0
CatalogFile = delta.cat
PnpLockdown = 1
[Manufacturer]
%CONTOSO% = DeviceExtensions,NTamd64
[DeviceExtensions.NTamd64]
%Device.ExtensionDesc% = DeviceExtension_Install, PCI\VEN_XXXX&DEV_XXXX&SUBSYS_XXXXXXXX&REV_XXXX
[DeviceExtension_Install]
; No changes
[DeviceExtension_Install.HW]
AddReg = FriendlyName_AddReg
[FriendlyName_AddReg]
HKR,,FriendlyName,, "New Device Friendly Name"
[Strings]
CONTOSO = "Contoso"
Device.ExtensionDesc = "Sample Device Extension"
Exempel 2: Använda ett tilläggs-INF för att installera ytterligare programvara
Följande kodfragment är ett komplett tilläggs-INF som ingår i installationsverktyget för Drivrutinspaket för universella drivrutiner. I det här exemplet används INF AddComponent-direktiv för att skapa komponenter som installerar en tjänst och en körbar fil. Mer information om vad du kan göra i en inf-komponent finns i Using a Component INF File.
Information om hur du kommer åt den här filen online finns i osrfx2_DCHU_extension.inx
.
;/*++
;
;Copyright (c) Microsoft Corporation. All rights reserved.
;
; THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
; KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
; IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
; PURPOSE.
;
;Module Name:
;
; osrfx2_DCHU_extension.INF
;
;Abstract:
;
; Extension inf for the OSR FX2 Learning Kit
;
;--*/
[Version]
Signature = "$WINDOWS NT$"
Class = Extension
ClassGuid = {e2f84ce7-8efa-411c-aa69-97454ca4cb57}
Provider = %ManufacturerName%
ExtensionId = {3846ad8c-dd27-433d-ab89-453654cd542a}
CatalogFile = osrfx2_DCHU_extension.cat
DriverVer = 05/16/2017,15.14.36.721
PnpLockdown = 1
[Manufacturer]
%ManufacturerName% = OsrFx2Extension, NT$ARCH$
[OsrFx2Extension.NT$ARCH$]
%OsrFx2.ExtensionDesc% = OsrFx2Extension_Install, USB\Vid_045e&Pid_94aa&mi_00
%OsrFx2.ExtensionDesc% = OsrFx2Extension_Install, USB\Vid_0547&PID_1002
[OsrFx2Extension_Install.NT]
CopyInf=osrfx2_DCHU_usersvc.inf
[OsrFx2Extension_Install.NT.HW]
AddReg = OsrFx2Extension_AddReg
AddReg = OsrFx2Extension_COMAddReg
[OsrFx2Extension_AddReg]
HKR, OSR, "OperatingParams",, "-Extended"
HKR, OSR, "OperatingExceptions",, "x86"
; Add all registry keys to successfully register the
; In-Process ATL COM Server MSFT Sample.
[OsrFx2Extension_COMAddReg]
HKCR,AppID\ATLDllCOMServer.DLL,AppID,,"{00001111-aaaa-2222-bbbb-3333cccc4444}"
HKCR,AppID\{00001111-aaaa-2222-bbbb-3333cccc4444},,,"ATLDllCOMServer"
HKCR,ATLDllCOMServer.SimpleObject,,,"SimpleObject Class"
HKCR,ATLDllCOMServer.SimpleObject\CLSID,,,"{92FCF37F-F6C7-4F8A-AA09-1A14BA118084}"
HKCR,ATLDllCOMServer.SimpleObject\CurVer,,,"ATLDllCOMServer.SimpleObject.1"
HKCR,ATLDllCOMServer.SimpleObject.1,,,"SimpleObject Class"
HKCR,ATLDllCOMServer.SimpleObject.1\CLSID,,,"{92FCF37F-F6C7-4F8A-AA09-1A14BA118084}"
HKCR,CLSID\{92FCF37F-F6C7-4F8A-AA09-1A14BA118084},,,"SimpleObject Class"
HKCR,CLSID\{92FCF37F-F6C7-4F8A-AA09-1A14BA118084}\InprocServer32,,%REG_EXPAND_SZ%,"%%SystemRoot%%\System32\ATLDllCOMServer.dll"
HKCR,CLSID\{92FCF37F-F6C7-4F8A-AA09-1A14BA118084}\InprocServer32,ThreadingModel,,"Apartment"
HKCR,CLSID\{92FCF37F-F6C7-4F8A-AA09-1A14BA118084}\ProgID,,,"ATLDllCOMServer.SimpleObject.1"
HKCR,CLSID\{92FCF37F-F6C7-4F8A-AA09-1A14BA118084}\Programmable,,%FLG_ADDREG_KEYONLY%
HKCR,CLSID\{92FCF37F-F6C7-4F8A-AA09-1A14BA118084}\TypeLib,,,"{9B23EFED-A0C1-46B6-A903-218206447F3E}"
HKCR,CLSID\{92FCF37F-F6C7-4F8A-AA09-1A14BA118084}\VersionIndependentProgID,,,"ATLDllCOMServer.SimpleObject"
[OsrFx2Extension_Install.NT.Components]
AddComponent = osrfx2_DCHU_component,,OsrFx2Extension_ComponentInstall
AddComponent = osrfx2_DCHU_usersvc,,OsrFx2Extension_ComponentInstall_UserSvc
[OsrFx2Extension_ComponentInstall]
ComponentIds=VID_045e&PID_94ab
[OsrFx2Extension_ComponentInstall_UserSvc]
ComponentIds=VID_045e&PID_94ac
[Strings]
ManufacturerName = "Contoso"
OsrFx2.ExtensionDesc = "OsrFx2 DCHU Device Extension"
REG_EXPAND_SZ = 0x00020000
FLG_ADDREG_KEYONLY = 0x00000010
Information om hur du använder en Extension INF för att installera en filterdrivrutin finns i Prioritering av enhetsfilterdrivrutiner.
För att förbättra utökningsbarheten rekommenderar vi att en IHV placerar valfria funktioner i en tilläggs-INF-mall för .
Bakåtkompatibilitet
Alla ändringar av basdrivrutinspaketet måste testas noggrant för att säkerställa att det inte bryter bakåtkompatibiliteten för befintliga tilläggs-INF:er.
När du hanterar ett basdrivrutinspaket följer du dessa metodtips:
- Värdeintervall och begränsningar för dokumentparametern både i kodkommenterar och i ett designdokument. Framtida ändringar måste överensstämma med de angivna intervallen.
- Lägg till en valfri parameter (inget standardvärde) för att stödja nya intervall.
Skicka in ett tilläggs-INF för certifiering
Detaljerad information om hur du arbetar med tilläggs-INF:er i Maskinvaruutvecklingscenter finns i Arbeta med tilläggs-INF:er på Instrumentpanelen för Windows Hardware Dev Center.
Relaterade artiklar
Arbeta med tilläggs-INF-filer i Partner Center
DCH-Compliant exempel på drivrutinspaket
Kom igång med att utveckla Windows-drivrutiner
Installationsverktyg för drivrutinspaket för universella drivrutiner