Sdílet prostřednictvím


Použití rozšiřujícího souboru INF

Před Windows 10 systém Windows vybral jeden balíček ovladače k instalaci pro dané zařízení. Výsledkem byly rozsáhlé komplexní balíčky ovladačů, které obsahovaly kód pro všechny scénáře a konfigurace, a každá dílčí aktualizace vyžadovala aktualizaci celého balíčku ovladačů. Počínaje Windows 10 můžete funkce INF rozdělit na několik komponent, z nichž každá se dá obsluhovat nezávisle. Základní balíček ovladače nainstalovaný na zařízení se nyní nazývá základní balíček ovladačů a zpracovává ho systém stejným způsobem jako balíčky ovladačů před Windows 10. Chcete-li rozšířit funkce základního balíčku ovladačů, poskytněte rozšíření INF v samostatném balíčku ovladačů. Rozšíření INF:

  • Může být poskytována jinou společností a aktualizována nezávisle na základní INF (infračervený filtr).

  • Používá stejnou syntaxi INF jako základní INF, ale může rozšířit tento základní INF pro přizpůsobení nebo specializaci.

  • Vylepšuje hodnotu zařízení, ale není nezbytné pro fungování základního balíčku ovladačů. V případě absence rozšíření INF musí být systém schopný spustit a připojit se k síti pouze pomocí balíčku základního ovladače. Vstupní zařízení integrovaná do systému, jako je klávesnice, musí být schopná fungovat s alespoň základními funkcemi bez jakýchkoli rozšiřujících souborů INFS.

  • Musí být univerzální soubor INF.

Každé zařízení musí mít nainstalovaný jeden základní balíček ovladače a může mít přidružené k němu jedno nebo více rozšíření INF. Rozšíření INF nebude možné nainstalovat na zařízení, pokud není k dispozici žádný balíček základního ovladače, který by se měl nainstalovat také na zařízení.

Mezi typické scénáře, ve kterých můžete použít rozšíření INF, patří:

  • Úprava nastavení poskytovaných v balíčku základního ovladače, například přizpůsobení popisného názvu zařízení nebo úprava nastavení konfigurace hardwaru.

  • Vytvoření jedné nebo více softwarových komponent zadáním INF AddComponent direktivy a poskytnutím komponent INF souboru.

  • Poskytuje nastavení specifická pro model nebo tvarový faktor systému, která zlepšují uživatelský zážitek nebo funkčnost zařízení, jako jsou data kalibrace hardwaru.

  • Přidání filtrového ovladače do zásobníku zařízení

Vzorový kód pro některé z těchto scénářů najdete v následujících příkladech. Podívejte se také na DCH-Compliant příklad balíčku ovladače, který popisuje, jak ukázka univerzálního ovladače DCHU používá rozšíření INFS.

Jak rozšíření INF a balíček základního ovladače spolupracují

Během instalace zařízení se nastavení v rozšíření INF použijí po nastavení v základním balíčku ovladače. V důsledku toho platí, že pokud rozšíření INF a základní balíček ovladače určují stejné nastavení, použije se verze v rozšíření INF. Podobně platí, že pokud se základní balíček ovladače změní, rozšíření INF zůstane a použije se u nového balíčku základního ovladače. Pokud je na stejném zařízení nainstalováno více INF rozšíření, není určeno žádné předem definované pořadí, ve kterém budou aplikovány. Tím pádem jedno INF rozšíření nemůže deterministicky přepsat hodnoty poskytované jiným INF rozšířením. Odlišné INFs rozšíření zaměřené na stejná zařízení by se neměly pokoušet měnit stejná nastavení.

Do balíčku základního ovladače je užitečné zahrnout komentáře popisující položky, které lze přepsat rozšířením INF, a také příslušné rozsahy hodnot parametrů a omezení.

Určení ID rozšíření

Při psaní rozšíření INF vygenerujete speciální identifikátor GUID s názvem ExtensionId, což je položka v [Verze] oddílu INF.

Systém identifikuje možné INF soubory rozšíření pro konkrétní zařízení porovnáním ID hardwaru a kompatibilních ID zařízení s identifikátory uvedenými v INF rozšíření v části Models, která se vztahuje na tento systém.

Mezi všemi možnými infs rozšíření, které určují stejnou ExtensionId hodnotu, systém vybere pouze jeden pro instalaci a použije jeho nastavení pro balíček základního ovladače. Datum ovladače a verze ovladače zadané v INF jsou použity v tomto pořadí k výběru jedné INF z více rozšiřovacích INF se stejným ExtensionId.

Pro ilustraci zvažte následující scénář, který zahrnuje hypotetické zařízení, pro které existují tři rozšiřující soubory INFS:

Diagram znázorňující, jak jsou vybrány základní INF a rozšířené INF

Hodnoty ExtensionId a se zobrazují v složených závorkách a na pásu karet banneru se zobrazí pořadí jednotlivých balíčků základních ovladačů.

Nejprve systém vybere balíček základního ovladače s nejlepším pořadím a nejvyšší verzí.

V dalším kroku systém zpracuje dostupné rozšíření INFS. Dvě mají hodnotu ExtensionId{B}a jedna má hodnotu ExtensionId{A}. Z prvních dvou řekněme, že datum řidiče je stejné. Dalším kritériem je verze ovladače, takže systém vybere soubor INF s verzí 2.0.

Je vybrána také přípona INF s jedinečnou hodnotou ExtensionId. Systém použije základní balíček ovladače pro zařízení a pak pro toto zařízení použije dva rozšiřující soubory INFS.

Soubory INF přípony jsou vždy použity po základním balíčku ovladače, ale neexistuje žádné určené pořadí, ve kterém jsou použity rozšiřující soubory INF.

Vytvoření rozšíření INF

Tady jsou položky, které potřebujete k definování INF jako rozšířeného INF.

  1. Tyto hodnoty zadejte pro třídu a ClassGuid v části verze. Další informace o třídách nastavení naleznete v tématu System-Defined Třídy nastavení zařízení dostupné dodavatelům.

    [Version]
    ...
    Class     = Extension
    ClassGuid = {e2f84ce7-8efa-411c-aa69-97454ca4cb57}
    ...
    
  2. Zadejte ExtensionId do oddílu [Version]. Vygenerujte nový identifikátor GUID pro počáteční verzi inf rozšíření nebo znovu použijte poslední identifikátor GUID pro následné aktualizace počátečního rozšíření INF.

    ExtensionId = {zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz} ; replace with your own GUID
    

Organizace může používat jenom id rozšíření , které vlastní. Informace o registraci ID rozšíření najdete v tématu Správa odesílání hardwaru na řídicím panelu Windows Hardware Dev Center.

  1. Pokud aktualizujete INF rozšíření, ponechte ExtensionId stejné a zvyšte verzi a datum určené direktivou DriverVer. Pro danou hodnotu ExtensionId vybere PnP INF s nejvyšší verzí DriverVer.

    Poznámka

    Pokud vaše rozšíření INF cílí na Windows 10 S, podívejte se na téma Požadavky na ovladače pro Windows 10 v režimu S, kde najdete informace o instalaci ovladačů v této verzi Windows.

  2. V části Modely INFzadejte jedno nebo více hardwarových a kompatibilních ID, která odpovídají identifikátorům cílového zařízení. Tato hardwarová a kompatibilní ID nemusí odpovídat identifikátorům základního balíčku ovladače. Rozšíření INF obvykle uvádí konkrétnější ID hardwaru než základní balíček ovladačů s cílem dále specializovat konkrétní konfiguraci ovladače. Například balíček základního ovladače může použít DVOUdílné ID hardwaru PCI, zatímco rozšíření INF určuje ČTYŘdílné ID hardwaru PCI, například následující:

    [DeviceExtensions.NTamd64]
    %Device.ExtensionDesc% = DeviceExtension_Install, PCI\VEN_XXXX&DEV_XXXX&SUBSYS_XXXXXXXX&REV_XXXX
    

    Případně rozšíření INF může uvést stejné ID hardwaru jako základní balíček ovladače, například pokud je zařízení již úzce zacílené, nebo pokud balíček základního ovladače již uvádí nejpřesnější ID hardwaru.

    V některých případech může INF rozšíření poskytnout méně specifické ID zařízení, jako je kompatibilní ID, k přizpůsobení nastavení pro širší sadu zařízení.

    Je možné použít CHID cílení, pokud není možné vytvořit čtyřdílné ID hardwaru nebo není dostatečně omezující.

  3. Nedefinujte službu pomocí SPSVCINST_ASSOCSERVICE. Rozšíření INF nemůže poskytnout ovladač funkce pro zařízení. Rozšíření INF ale může definovat další služby, například ovladač filtru pro zařízení. Další informace o zadávání služeb naleznete v tématu INF AddService Directive.

Ve většině případů odešlete balíček ovladače INF rozšíření do Centra pro vývoj hardwaru odděleně od základního balíčku ovladače. Příklady, jak zabalit přípony INF a odkazy na ukázkový kód, najdete v tématu DCH-Compliant Příklad balíčku ovladače.

Proces ověření a odeslání ovladače je stejný pro soubory INFS rozšíření jako pro balíčky základních ovladačů. Další informace najdete v tématu Začínáme s Windows HLK.

Odinstalace ovladače rozšíření

Pokud chcete z systému odebrat balíček ovladače rozšíření a odinstalovat ho ze všech zařízení, která ho používají, použijte příkaz nástroje PnPUtil s příznakem . To umožňuje, aby se balíček ovladače rozšíření odinstaloval ze zařízení bez odebrání základního balíčku ovladače.

Vyhledejte název balíčku ovladačů<#>.inf pro odinstalaci a použijte pnputil /delete-driver oem<#>.inf /uninstall.

pnputil /enum-drivers lze použít k identifikaci příslušného názvu souboru oem<#>.inf.

Příklad 1: Nastavení pomocí rozšíření INF souboru pro popisný název zařízení

V jednom běžném scénáři výrobce zařízení (IHV) poskytuje základní balíček ovladačů a poté tvůrce systému (OEM) poskytuje rozšíření INF, které doplňuje a v některých případech přepíše konfiguraci a nastavení základního balíčku ovladače. Následující úryvek je kompletní soubor INF, který předvádí, jak nastavit uživatelsky přívětivý název zařízení.

[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"

Příklad 2: Instalace dalšího softwaru pomocí rozšíření INF

Následující fragment kódu je kompletní rozšíření INF, které je součástí instalační sady nástrojů balíčku ovladače pro univerzální ovladače. Tento příklad používá INF AddComponent direktivu k vytvoření komponent, které nainstalují službu a spustitelný soubor. Další informace o tom, co můžete dělat v komponentě INF, naleznete v tématu Použití souboru INF komponenty.

Pokud chcete získat přístup k tomuto souboru online, přečtěte si 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

Pro informace o použití INF rozšíření k instalaci ovladače filtru viz řazení ovladačů filtru zařízení.

Pro zlepšení rozšiřitelnosti doporučujeme, aby IHV umístil volitelné funkce do rozšíření šablony INF .

Zpětná kompatibilita

Všechny změny základního balíčku ovladačů musí být důkladně testovány, aby se zajistilo, že neruší zpětnou kompatibilitu pro stávající rozšíření INFs.

Při správě základního balíčku ovladačů postupujte podle těchto osvědčených postupů:

  • Rozsahy hodnot parametrů dokumentu a omezení v komentářích kódu i v návrhovém dokumentu. Budoucí změny musí odpovídat zadaným rozsahům.
  • Pokud chcete podporovat nové rozsahy, přidejte volitelný parametr (bez výchozí hodnoty).

Odeslání rozšíření INF pro certifikaci

Podrobné informace o tom, jak pracovat s rozšiřujícími INFs na webu Hardware Dev Center, viz téma Práce s rozšiřujícími INFs na řídicím panelu Windows Hardware Dev Center.

Práce s rozšířeními INFs v Partnerském centru

Příklad balíčku ovladače DCH-Compliant

použití univerzálního souboru INF

Začínáme s vývojem ovladačů windows

Sada nástrojů pro instalaci balíčku ovladačů pro univerzální ovladače