Een extensie-INF-bestand gebruiken
Vóór Windows 10 heeft Windows één stuurprogrammapakket geselecteerd om te installeren voor een bepaald apparaat. Dit resulteerde in grote, complexe stuurprogrammapakketten die code bevatten voor alle scenario's en configuraties, en elke secundaire update vereist een update voor het hele stuurprogrammapakket. Vanaf Windows 10 kunt u INF-functionaliteit splitsen in meerdere onderdelen, die elk onafhankelijk kunnen worden onderhouden. Het kernstuurprogrammapakket dat op een apparaat is geïnstalleerd, wordt nu het basisstuurprogrammapakket genoemd en wordt door het systeem op dezelfde manier verwerkt als stuurprogrammapakketten vóór Windows 10. Als u de functionaliteit van een basisstuurprogrammapakket wilt uitbreiden, geeft u een extensie INF op in een afzonderlijk stuurprogrammapakket. Een extensie INF:
Kan worden geleverd door een ander bedrijf en onafhankelijk van de basis-INF worden bijgewerkt.
Gebruikt dezelfde INF-syntaxis als een basis-INF, maar kan de basis-INF uitbreiden voor aanpassing of specialisatie.
Verhoogt de meerwaarde van het apparaat, maar is niet nodig om het basisstuurprogrammapakket te laten werken. Als de extensie INF ontbreekt, moet het systeem kunnen opstarten en verbinding maken met het netwerk met alleen het basisstuurprogrammapakket. Invoerapparaten die zijn ingebouwd in het systeem, zoals een toetsenbord, moeten kunnen functioneren met ten minste basisfunctionaliteit zonder extensie-INF's.
Moet een universeel INF-bestand zijn.
Op elk apparaat moet één basisstuurprogrammapakket zijn geïnstalleerd en er kan eventueel een of meer extensie-INF's aan zijn gekoppeld. Een extensie INF kan niet op een apparaat worden geïnstalleerd als er geen basisstuurprogrammapakket aanwezig is om ook op het apparaat te installeren.
Typische scenario's waarin u een extensie INF kunt gebruiken, zijn onder andere:
Instellingen wijzigen die zijn opgegeven in een basisstuurprogrammapakket, zoals het aanpassen van de beschrijvende naam van het apparaat of het wijzigen van een hardwareconfiguratie-instelling.
Het maken van een of meer softwareonderdelen door de INF AddComponent-instructie op te geven en een INF-bestand component op te geven.
Het bieden van instellingen die specifiek zijn voor het model of de vormfactor van het systeem dat de ervaring of functionaliteit van het apparaat verbetert, zoals hardwarekalibratiegegevens.
Een filterstuurprogramma toevoegen aan de apparaatstack.
In de onderstaande voorbeelden vindt u voorbeeldcode voor sommige van deze scenario's. Zie ook DCH-Compliant Driver Package Example, waarin wordt beschreven hoe het DCHU universal driver sample gebruikmaakt van extensie INF's.
Hoe extensie INF en basisstuurprogrammapakket samenwerken
Tijdens de installatie van een apparaat worden instellingen in een extensie INF toegepast na instellingen in een basisstuurprogrammapakket. Als een extensie INF en een basisstuurprogrammapakket dezelfde instelling opgeven, wordt de versie in de extensie INF toegepast. Als het basisstuurprogrammapakket wordt gewijzigd, blijft de extensie INF behouden en wordt deze toegepast op het nieuwe basisstuurprogrammapakket. Als meerdere extensie-INF's op hetzelfde apparaat zijn geïnstalleerd, is er geen vooraf bepaalde volgorde waarin de extensie-INF's worden toegepast, zodat één extensie-INF geen deterministische waarden kan overschrijven die worden geleverd door een andere extensie INF. Afzonderlijke extensie-INF's die zijn gericht op dezelfde apparaten, mogen niet proberen dezelfde instellingen te wijzigen.
Het is handig om opmerkingen op te nemen in het basisstuurprogrammapakket waarin wordt beschreven welke vermeldingen kunnen worden overschreven door een extensie INF, evenals toepasselijke parameterwaardebereiken en beperkingen.
ExtensionId opgeven
Wanneer u een extensie INF schrijft, genereert u een speciale GUID met de naam ExtensionId. Dit is een vermelding in de sectie [Versie] van de INF-.
Het systeem identificeert mogelijke extensie-INF's voor een specifiek apparaat door de hardware-id en compatibele id's van het apparaat te koppelen aan de id's van het apparaat die zijn opgegeven in een extensie-INF in een sectie Modellen die van toepassing zijn op dat systeem.
Onder alle mogelijke extensie-INF's die dezelfde ExtensionId waarde opgeven, selecteert het systeem slechts één om de instellingen te installeren en de instellingen ervan toe te passen op die van het basisstuurprogrammapakket. De stuurprogrammadatum en stuurprogrammaversie die in de INF zijn opgegeven, worden in die volgorde gebruikt om één INF te kiezen tussen meerdere extensie-INF's met dezelfde ExtensionId.
Bekijk ter illustratie het volgende scenario met een hypothetisch apparaat waarvoor er drie UITBREIDINGS-INF's zijn:
De ExtensionId waarden {A}
en {B}
worden weergegeven tussen accolades, en de rang van elk basisstuurprogrammapakket wordt weergegeven in de bannerlinten.
Eerst selecteert het systeem het basisstuurprogrammapakket met de beste rang en hoogste versie.
Vervolgens verwerkt het systeem de beschikbare extensie-INF's. Twee hebben ExtensionId waarde {B}
en één heeft ExtensionId waarde {A}
. Van de eerste twee, laten we zeggen dat de datum van de bestuurder hetzelfde is. De volgende tiebreaker is de driver-versie, dus het systeem selecteert de extensie INF met v2.0.
De extensie INF met de unieke ExtensionId waarde is ook geselecteerd. Het systeem past het basisstuurprogrammapakket voor het apparaat toe en past vervolgens de twee extensie-INF's voor dat apparaat toe.
Extensie INF-bestanden worden altijd toegepast na het basisstuurprogrammapakket, maar dat er geen bepaalde volgorde is waarin de extensie-INF's worden toegepast.
Een extensie maken INF
Dit zijn de vermeldingen die u nodig hebt om een INF als extensie-INF te definiëren.
Geef deze waarden op voor Klasse en ClassGuid- in de sectie Versie. Voor meer informatie over installatieklassen, zie System-Defined Apparaatinstallatieklassen beschikbaar voor leveranciers.
[Version] ... Class = Extension ClassGuid = {e2f84ce7-8efa-411c-aa69-97454ca4cb57} ...
Geef een ExtensionId vermelding op in de sectie [Versie]. Genereer een nieuwe GUID voor de eerste versie van een extensie INF of gebruik de laatste GUID voor latere updates van de initiële extensie INF.
ExtensionId = {zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz} ; replace with your own GUID
Een organisatie mag alleen een ExtensionID gebruiken die zij zelf bezit. Zie Het beheren van hardwareverzendingen in het Windows Hardware Dev Center-dashboardvoor meer informatie over het registreren van een extensie-id.
Als u een extensie INF bijwerkt, houdt u de ExtensionId hetzelfde en verhoogt u de versie en datum zoals opgegeven door de DriverVer-instructie. Voor een bepaalde ExtensionId waarde selecteert PnP de INF met de hoogste DriverVer.
Notitie
Als uw extensie INF is gericht op Windows 10 S, raadpleegt u Windows 10 in de S-modus Stuurprogrammavereisten voor informatie over de installatie van stuurprogramma's in die versie van Windows.
Geef in de sectie INF-modelleneen of meer hardware- en compatibele id's op die overeenkomen met die van het doelapparaat. Deze hardware en compatibele id's hoeven niet overeen te komen met die van het basisstuurprogrammapakket. Normaal gesproken bevat een extensie INF een specifiekere hardware-id dan het basisstuurprogrammapakket, met als doel om een specifieke stuurprogrammaconfiguratie verder te specialiseren. Het basisstuurprogrammapakket kan bijvoorbeeld gebruikmaken van een tweedelige PCI-hardware-id, terwijl de extensie INF een pci-hardware-id met vier delen opgeeft, zoals hieronder:
[DeviceExtensions.NTamd64] %Device.ExtensionDesc% = DeviceExtension_Install, PCI\VEN_XXXX&DEV_XXXX&SUBSYS_XXXXXXXX&REV_XXXX
De extensie INF kan ook dezelfde hardware-id weergeven als het basisstuurprogrammapakket, bijvoorbeeld als het apparaat al nauw gericht is, of als het basisstuurprogrammapakket al de meest specifieke hardware-id vermeldt.
In sommige gevallen biedt de extensie INF mogelijk een minder specifieke apparaat-id, zoals een compatibele id, om een instelling aan te passen voor een bredere set apparaten.
CHID gericht op kan worden gebruikt als een vierdelige hardware-ID niet mogelijk is of niet restrictief genoeg is.
Definieer geen service met
SPSVCINST_ASSOCSERVICE
. Een extensie INF kan geen functiestuurprogramma voor een apparaat opgeven. Een extensie INF kan echter andere services definiëren, zoals een filterstuurprogramma voor het apparaat. Zie INF AddService Directivevoor meer informatie over het opgeven van services.
In de meeste gevallen verzendt u een extensie-INF-stuurprogrammapakket afzonderlijk naar het Hardware Dev Center, los van het basisstuurprogrammapakket. Zie voor voorbeelden over hoe extensie-INFs te verpakken en koppelingen naar samplecode, DCH-Compliant Driver Package Example.
Het validatie- en indieningsproces voor stuurprogramma's is hetzelfde voor extensie-INF's als voor basisstuurprogrammapakketten. Zie Aan de slag met Windows HLKvoor meer informatie.
Een extensiestuurprogramma verwijderen
Als u een stuurprogrammapakket voor extensies uit het systeem wilt verwijderen en wilt verwijderen van alle apparaten die het gebruiken, gebruikt u de
Zoek de oem<#>.inf-naam van het stuurprogrammapakket om pnputil /delete-driver oem<#>.inf /uninstall
te verwijderen en te gebruiken.
pnputil /enum-drivers
kan worden gebruikt om de juiste oem-<#>.inf-naam te identificeren.
Voorbeeld 1: Een extensie-INF gebruiken om de vriendelijke apparaatnaam in te stellen
In één veelvoorkomend scenario biedt een apparaatfabrikant (IHV) een basisstuurprogrammapakket en vervolgens biedt een systeembouwer (OEM) een extensie INF die in sommige gevallen de configuratie en instellingen van het basisstuurprogrammapakket overschrijft. Het volgende codefragment is een volledige INF-extensie die laat zien hoe u de vriendelijke apparaatnaam instelt.
[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"
Voorbeeld 2: Een extensie INF gebruiken om extra software te installeren
Het volgende fragment is een volledige extensie INF die is opgenomen in de Driver Package Installation Toolkit voor universele stuurprogramma's. In dit voorbeeld wordt INF AddComponent-instructie gebruikt om onderdelen te maken die een service en een uitvoerbaar bestand installeren. Zie Een onderdeel INF-bestand gebruikenvoor meer informatie over wat u in een onderdeel INF kunt doen.
Zie osrfx2_DCHU_extension.inx
voor toegang tot dit bestand.
;/*++
;
;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
Zie Apparaatfilterstuurprogramma bestellenvoor meer informatie over het gebruik van een Extensie INF om een filterstuurprogramma te installeren.
Om de uitbreidbaarheid te verbeteren, raden we aan dat een IHV optionele functionaliteit in een extensie INF-sjabloonplaatst.
Compatibiliteit met eerdere versies
Wijzigingen in het basisstuurprogrammapakket moeten grondig worden getest om ervoor te zorgen dat de compatibiliteit met eerdere versies voor bestaande extensie-INF's niet wordt verbroken.
Volg deze aanbevolen procedures bij het beheren van een basisstuurprogrammapakket:
- Waardebereiken voor documentparameters en beperkingen in codeopmerkingen en in een ontwerpdocument. Toekomstige wijzigingen moeten voldoen aan de opgegeven bereiken.
- Om nieuwe reeksen te ondersteunen, voegt u een optionele parameter toe (zonder standaardwaarde).
Een extensie INF indienen voor certificering
Zie voor gedetailleerde informatie over het werken met Extension INFs op het Windows Hardware Dev Center Werken met Extension INFs in het Windows Hardware Dev Center Dashboard.
Verwante artikelen
Werken met extensie-INF's in het Partnercentrum
DCH-Compliant voorbeeld van stuurprogrammapakket
een universeel INF-bestand gebruiken
Aan de slag met het ontwikkelen van Windows-stuurprogramma's
Toolkit voor installatie van pakketten van universele stuurprogramma's