Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek je určen jako rychlá vyhledávací příručka, která vám pomůže aktualizovat soubor INF tak, aby odpovídal izolaci balíčku ovladače jako součást aktualizace vašeho balíčku ovladačů na Ovladač systému Windows. Následující části obsahují příklady některých nejběžnějších věcí, které můžete mít v souboru INF balíčku ovladače s odkazy na informace o tom, jak aktualizovat ty, které mají být kompatibilní s izolací balíčku ovladače. Pokud balíček ovladače potřebuje podporovat starý způsob provádění něčeho u starších verzí operačního systému při použití nového způsobu použití novějších verzí operačního systému, přečtěte si téma Kombinování rozšíření platformy s verzemi operačního systému, jak toho dosáhnout v INF.
DestinationDirs není DIRID 13
Pokud oddíl DestinationDirs určuje cíl souborů, které nejsou DIRID 13, pak INF nevyhovuje izolaci balíčku ovladače. Všechny soubory v balíčku ovladačů musí být spouštěné z úložiště ovladačů což znamená použití DIRID 13. To může vyžadovat aktualizace více než jen oddíl DestinationDirs. Další operace prováděné INF, které odkazují na soubory nahrané INF, mohou také potřebovat aktualizaci. Například může být nutné aktualizovat direktivu ServiceBinary v oddílu instalace služby odkazovaném direktivou AddService nebo hodnotou registru napsanou direktivou AddReg. Obecně platí, že spuštění z Úložiště ovladačů je podporováno ve Windows 10 1709 a novějších verzích Windows, ale některé zásobníky zařízení nemusí podporovat soubory, které se připojují k těmto zásobníkům, které se spouštějí z Úložiště ovladačů, až do pozdější verze. Další informace naleznete v části Spustit z úložiště ovladačů.
Použití AddReg k registraci poskytovatelů pro ETW a kanálů EventLog
Pokud váš INF používá direktivu AddReg k registraci zprostředkovatele ETW a kanálů EventLog, potom INF nevyhovuje izolaci balíčků ovladačů. Například vaše INF může mít:
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\ExampleProvider/Analytic", "OwningPublisher", 0x0, "{35356277-0b54-43da-b324-671006d74759}"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\ExampleProvider/Analytic", "Enabled", 0x00010001, 1
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\ExampleProvider/Analytic", "Isolation", 0x00010001, 1
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\ExampleProvider/Analytic", "ChannelAccess",0x0, \
"O:BAG:SYD:(A;;0xf0007;;;SY)(A;;0x7;;;BA)(A;;0x3;;;BO)(A;;0x5;;;SO)(A;;0x1;;;IU)(A;;0x3;;;SU)(A;;0x1;;;S-1-5-3)(A;;0x2;;;S-1-5-33)(A;;0x1;;;S-1-5-32-573)"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\ExampleProvider/Analytic", "Type", 0x00010001, 2
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{35356277-0b54-43da-b324-671006d74759}" , , 0x0, "ExampleProvider"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{35356277-0b54-43da-b324-671006d74759}", "ResourceFileName", 0x00020000, "%13%\ExampleBinary.sys"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{35356277-0b54-43da-b324-671006d74759}", "MessageFileName", 0x00020000, "%13%\ExampleBinary.sys"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{35356277-0b54-43da-b324-671006d74759}\ChannelReferences\0", , 0x0, "ExampleProvider/Analytic"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{35356277-0b54-43da-b324-671006d74759}\ChannelReferences\0", "Id", 0x00010001, 16
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{35356277-0b54-43da-b324-671006d74759}\ChannelReferences\0", "Flags", 0x00010001, 0
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{35356277-0b54-43da-b324-671006d74759}\ChannelReferences", Count, 0x00010001, 1
Místo použití AddReg k registraci zprostředkovatelů ETW a kanálů EventLog by měly být registrovány pomocí direktivy AddEventProvider z oddílu DDInstall.Events. Například:
[ExampleDDInstall.Events]
AddEventProvider={35356277-0b54-43da-b324-671006d74759}, Example_EVvntProvider_Inst
[Example_EventProvider_Inst]
ProviderName=ExampleProvider
ResourceFile=%13%\ExampleBinary.sys
MessageFile=%13%\ExampleBinary.sys
AddChannel=ExampleProvider/Analytic,0x3,Example_Channel_Inst ; Note that the type of the channel here is different than in the raw AddReg. Please see the AddEventProvider documentation for appropriate values
[Example_Channel_Inst]
Isolation=1
Access="O:BAG:SYD:(A;;0xf0007;;;SY)(A;;0x7;;;BA)(A;;0x3;;;BO)(A;;0x5;;;SO)(A;;0x1;;;IU)(A;;0x3;;;SU)(A;;0x1;;;S-1-5-3)(A;;0x2;;;S-1-5-33)(A;;0x1;;;S-1-5-32-573)"
Enabled=1
Value=16
Použití direktivy AddEventProvider z oddílu DDInstall.Events je podporováno ve Windows 10 1809 a novějších verzích.
Použití addRegu k registraci autoLoggeru
Pokud váš INF používá direktivu AddReg k registraci nebo úpravě ETW AutoLoggeru, inf nevyhovuje izolaci balíčku ovladače. Například vaše INF může mít:
HKLM,SYSTEM\CurrentControlSet\Control\WMI\Autologger\ExampleAutoLogger, BufferSize, %REG_DWORD%, 0x00000040
HKLM,SYSTEM\CurrentControlSet\Control\WMI\Autologger\ExampleAutoLogger, GUID, %REG_SZ%, "{6f1373c7-eec8-495c-bfe5-1270336368df}"
HKLM,SYSTEM\CurrentControlSet\Control\WMI\Autologger\ExampleAutoLogger, Start, %REG_DWORD%, 0x00000001
HKLM,SYSTEM\CurrentControlSet\Control\WMI\Autologger\ExampleAutoLogger, MaximumBuffers, %REG_DWORD%, 0x00000040
HKLM,SYSTEM\CurrentControlSet\Control\WMI\Autologger\ExampleAutoLogger, LogFileMode, %REG_DWORD%, 0x400
HKLM,SYSTEM\CurrentControlSet\Control\WMI\Autologger\ExampleAutoLogger\{35356277-0b54-43da-b324-671006d74759}, EnableLevel, %REG_DWORD%, 0x00000004
HKLM,SYSTEM\CurrentControlSet\Control\WMI\Autologger\ExampleAutoLogger\{35356277-0b54-43da-b324-671006d74759}, MatchAnyKeyword, %REG_QWORD%, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
HKLM,SYSTEM\CurrentControlSet\Control\WMI\Autologger\ExampleAutoLogger\{35356277-0b54-43da-b324-671006d74759}, Enabled, %REG_DWORD%, 0x00000001
Místo použití AddRegu k registraci nebo aktualizaci AutoLoggeru by se měl zaregistrovat nebo aktualizovat pomocí direktivy AddAutoLogger nebo UpdateAutoLogger z oddílu DDInstall.Events. Například:
[ExampleDDInstall.Events]
AddAutoLogger=ExampleAutoLogger,{6f1373c7-eec8-495c-bfe5-1270336368df},Example_AutoLogger_Inst
[Example_AutoLogger_Inst]
Start=1
BufferSize = 0x40
LogFileMode=0x400
MaximumBuffers=0x40
AddAutoLoggerProvider={35356277-0b54-43da-b324-671006d74759},Example_AutoLoggerProvider_Inst
[Example_AutoLoggerProvider_Inst]
Enabled=1
EnableLevel=0x4
MatchAnyKeyword=0
Použití direktivy AddAutoLogger nebo UpdateAutoLogger z oddílu DDInstall.Events se podporuje ve Windows 11 a novějších verzích Windows.
Přidání položky do klíče RunOnce pomocí AddRegu
Pokud váš soubor INF používá direktivu AddReg k přidání položky do klíče RunOnce, pak soubor INF není v souladu s izolací balíčku ovladače. Například vaše INF může mít:
[ExampleDDInstall]
AddReg = Example_Registry
[Example_Registry]
HKLM, Software\Microsoft\Windows\CurrentVersion\RunOnce, ExampleEntry, ,"application.exe"
Tato funkce není podporovaná. Inf by neměl upravovat globální položky registru. Pokud je při instalaci balíčku ovladače potřeba jednorázová akce nastavení, můžete ke spuštění použít direktivu AddSoftware ze souboru INF komponenty . To platí jenom pro nekritické akce. Důležité funkce pro zařízení nebo zařízení nainstalovaná s tímto balíčkem ovladačů by neměly záviset na akcích, které jsou pro instalaci zařízení externí.
Přidání položky do klíče Run pomocí AddReg
Pokud soubor INF používá direktivu AddReg k přidání položky do klíče Spustit, pak soubor INF nevyhovuje izolaci balíčku ovladače. Například vaše INF může mít:
[ExampleDDInstall]
AddReg = Example_Registry
[Example_Registry]
HKLM, Software\Microsoft\Windows\CurrentVersion\Run, ExampleEntry, ,"application.exe"
Tato funkce není podporovaná. Inf by neměl upravovat globální položky registru. Pokud má položka Spustit přidat hodnotu a software do systému, vaše aplikace by měla být aplikací pro Univerzální platformu Windows a nainstalována pomocí direktivy AddSoftware z oddílu DDInstall.Software. Další informace najdete v tématu Spárování ovladače s aplikací pro Univerzální platformu Windows (UPW). Pokud je tento software služba, která nepotřebuje prezentovat žádné uživatelské rozhraní, lze službu Win32 zaregistrovat z balíčku ovladače pomocí direktivy AddService. Při registraci služby, která je přidružená k zařízení, by měla být služba spuštěná jenom v případě, že je zařízení k dispozici. Služba by měla mít typ spuštění "demand start" a měla by použít direktivu AddTrigger z oddílu instalace služby k nastavení triggerů, které způsobí spuštění služby, když je zařízení v systému. To se provádí identifikací rozhraní zařízení, které ovladač na zařízení zveřejní a pomocí direktivy AddTrigger určí, že se služba má spustit, když se zobrazí tento hardware. Za běhu by služba měla monitorovat, jestli zařízení zmizí. Pokud je zařízení odebráno ze systému, aby služba nemusela dál běžet, měla by se služba zastavit. Pokud se chcete zaregistrovat k odběru informací o příchozích a odebíraných zařízeních, přečtěte si CM_Register_Notification.
Použití copyfiles k přidání souborů do adresářů Program Files
Pokud váš INF používá direktivu CopyFiles k přidání souborů do adresářů "Program Files", pak INF není v souladu s izolací balíčku ovladače. To zahrnuje, ale neomezuje se pouze na, použití identifikátorů DIRID 16422, 16426, 16427 a 16428. Například vaše INF může mít:
[DestinationDirs]
Example_CopyFiles = 16422, Contoso
[ExampleDDInstall]
CopyFiles = Example_CopyFiles
[Example_CopyFiles]
ExampleFile.exe
Tato funkce není podporována. INF by neměl kopírovat soubory na globální umístění. Adresáře Program Files se obvykle používají k instalaci softwarových aplikací, nikoli ovladačů. Pokud vaším cílem je sestavit a poskytnout doprovodnou aplikaci pro vaše zařízení, které komunikuje s ovladačem, přečtěte si pokyny k aplikaci hardwarové podpory. Aplikace může být například univerzální aplikací pro Windows a nainstalovat pomocí direktivy AddSoftware z oddílu DDInstall.Software. Další informace najdete v tématu Spárování ovladače s aplikací univerzální platformy Windows (UPW). Pokud položka CopyFiles nepřidá do systému doprovodnou aplikaci a soubory by měly zůstat součástí balíčku ovladačů, musí být provedeny jako "spustit z úložiště ovladačů".
CoInstaller, který spouští uživatelské rozhraní
Pokud inf k instalaci aplikace, se kterou by měl uživatel pracovat, používá instalátor CoInstaller, není inf kompatibilní s izolací balíčku ovladače. Například vaše INF může zaregistrovat spoluinstalátor takto:
[ExampleDDInstall.CoInstallers]
CopyFiles = CoInstallerCopyFilesSection
AddReg = Example_CoInstallers_AddReg
[CoInstallerCopyFilesSection]
ExampleCoInstall.dll
[Example_CoInstallers_AddReg]
HKR,,CoInstallers32,0x00010000,"ExampleCoInstall.dll,ExampleCoInstallEntryPoint"
Informace o řešení této situace naleznete v tématu Odebrání spolu instalačních programů z balíčků ovladačů.
Úprava služby, která není přidaná nástrojem INF, pomocí addRegu
Pokud váš INF používá direktivu AddReg ke změně stavu služby, která není přidána direktivou AddService ve vašem INF, pak INF nevyhovuje izolaci balíčků ovladačů. Například vaše INF může mít:
[ExampleDDInstall]
AddReg = Example_Registry
[Example_Registry]
HKLM,SYSTEM\CurrentControlSet\Services\ServiceNotCreatedByThisInf\ExampleKey, ExampleValue, %REG_DWORD%, 1
Tato funkce není podporovaná. Inf by měl měnit nastavení jenom u služeb vytvořených touto INF a INF by měl odebrat tento AddReg.
Úprava vnitřního stavu služby pomocí AddRegu
Pokud váš INF používá direktivu AddReg ke změně vnitřního stavu služby, pak INF nevyhovuje izolaci balíčku ovladačů. Vnitřní stav služby je stav služby, která je spravována správcem řízení služeb. To zahrnuje, ale není omezeno na:
- Zobrazovaný název
- Popis
- Cesta k obrázku
- Typ
- Typ zahájení
- Řízení chyb
- Skupina pořadí načítání
- Závislosti
- Informace o zabezpečení
- Požadovaná oprávnění
- Typ SID
- Zpožděné nastavení automatického spuštění
- Spouště
- Postupy při selhání
- Příznaky spouštění
Například vaše INF může mít:
[ExampleDDInstall.Services]
AddService = ExampleService,0,Example_Service_Inst
[Example_Service_Inst]
DisplayName = %SvcDesc%
ServiceType = %SERVICE_WIN32_OWN_PROCESS%
StartType = %SERVICE_DEMAND_START%
ErrorControl = %SERVICE_ERROR_NORMAL%
ServiceBinary = %13%\ExampleService.exe
AddReg = Example_Service_Registry
[Example_Service_Registry]
HKR,TriggerInfo\0,Type,0x00010001,0x01
HKR,TriggerInfo\0,Action,0x00010001,0x01
HKR,TriggerInfo\0,Guid,0x00000001,2D,DF,41,BD,DD,AD,C9,4F,A1,94,B9,88,1D,2A,2E,FA
HKR,,ServiceSidType,0x00010001,0x01
Chcete-li, aby byl balíček ovladače v souladu s pravidly izolace, je nutné použít vestavěné direktivy INF pro určení tohoto stavu podle popisu v direktiva AddService.
Úprava stavu v kořenovém adresáři služby pomocí addRegu
Pokud inf používá direktivu AddReg k vytvoření klíčů nebo hodnot v kořenovém adresáři stavu služby, není inf kompatibilní s izolací balíčku ovladače. Například vaše INF může mít:
[ExampleDDInstall.Services]
AddService = ExampleService,0x2,Example_Service_Inst
[Example_Service_Inst]
DisplayName = %SvcDesc%
ServiceType = %SERVICE_KERNEL_DRIVER%
StartType = %SERVICE_DEMAND_START%
ErrorControl = %SERVICE_ERROR_NORMAL%
ServiceBinary = %13%\ExampleBinary.sys
AddReg = Example_Service_Registry
[Example_Service_Registry]
HKR,,ExampleValue,%REG_DWORD%,0x00000040
HKR,CustomSubkey,ExampleValue,%REG_DWORD%,0x00000040
Pro soulad s izolací balíčku ovladače může příkaz AddReg poskytující klíče registru služby a hodnoty upravovat pouze klíče a hodnoty v podklíči Parametry služby.
Pokud vaše INF vytváří nebo upravuje jiný stav v kořenovém adresáři služby, je potřeba nastavení přesunout do podklíče Parametry služby a k tomuto podklíči lze přistupovat za běhu pomocí IoOpenDriverRegistryKey s použitím RegKeyType DriverRegKeyParameters. IoOpenDriverRegistryKey se podporuje ve Windows 10 1803 a novějších verzích Windows.
Použití HKCR AddReg k registraci APO
Pokud váš INF používá direktivu AddReg s kořenem registru HKCR k registraci audio procesoru (APO), pak INF není v souladu s izolací ovladačového balíčku. Například vaše INF může mít:
HKCR,AudioEngine\AudioProcessingObjects\%EXAMPLE_CLSID%, "FriendlyName", , %APO_FriendlyName%
HKCR,AudioEngine\AudioProcessingObjects\%EXAMPLE_CLSID%, "Copyright", , %MfgName%
HKCR,AudioEngine\AudioProcessingObjects\%EXAMPLE_CLSID%, "MajorVersion", 0x00010001, 1
HKCR,AudioEngine\AudioProcessingObjects\%EXAMPLE_CLSID%, "MinorVersion", 0x00010001, 1
HKCR,AudioEngine\AudioProcessingObjects\%EXAMPLE_CLSID%, "Flags", 0x00010001, 0x0000000d
HKCR,AudioEngine\AudioProcessingObjects\%EXAMPLE_CLSID%, "MinInputConnections", 0x00010001, 1
HKCR,AudioEngine\AudioProcessingObjects\%EXAMPLE_CLSID%, "MaxInputConnections", 0x00010001, 1
HKCR,AudioEngine\AudioProcessingObjects\%EXAMPLE_CLSID%, "MinOutputConnections", 0x00010001, 1
HKCR,AudioEngine\AudioProcessingObjects\%EXAMPLE_CLSID%, "MaxOutputConnections", 0x00010001, 1
HKCR,AudioEngine\AudioProcessingObjects\%EXAMPLE_CLSID%, "MaxInstances", 0x00010001, 0xffffffff
HKCR,AudioEngine\AudioProcessingObjects\%EXAMPLE_CLSID%, "NumAPOInterfaces", 0x00010001, 1
HKCR,AudioEngine\AudioProcessingObjects\%EXAMPLE_CLSID%, "APOInterface0", , "{b0a50980-ded6-4f45-84cb-19d2d1245f6d}"
Místo toho by informace o registraci APO měly být v oddílu odkazovaném direktivou AddReg z oddílu DDInstall. Kořen registru HKCR by se měl změnit na kořen registru HKR, aby se nastavení vztahovala k "softwarovému" (také známému jako "ovladač") umístění stavu registru zařízení. Další informace naleznete v části Registrace APOs pro režimy zpracování a efekty v souboru INF.
Verze ovladače UMDF je menší než 2
Pokud váš balíček ovladače obsahuje ovladač Framework Driver (UMDF) User-Mode, který používá verzi UMDF starší než verze 2, pak není kompatibilní s ovladači systému Windows. Další informace o tom, jak přesunout ovladač UMDF do novější verze UMDF, naleznete v tématu portování ovladače z UMDF 1 do UMDF 2.
Přidání horního nebo dolního filtru do zásobníku zařízení pomocí AddRegu
Pokud INF používá direktivu AddReg k přidání horního nebo dolního filtru do zásobníku zařízení, pak INF neodpovídá požadavkům na izolaci balíčku ovladače. Například vaše INF může mít:
[ExampleDDInstall.HW]
AddReg = FilterAddReg
[FilterAddReg]
HKR,,"UpperFilters",0x00010000,"ExampleFilterDriver" ; REG_MULTI_SZ value
Místo toho by se měl filtr do zásobníku zařízení přidat pomocí pokynu AddFilter. Například:
[ExampleDDInstall.Filters]
AddFilter = ExampleFilterDriver,, ExampleFilterSection
[ExampleFilterSection]
FilterPosition = Upper
Viz pořadí ovladačů filtru zařízení pro více informací o přidávání filtrů zařízení.
Použití AddReg k registraci hodnot názvu kategorie médií
Pokud váš INF používá direktivu AddReg k registraci hodnoty názvu kategorie médií, pak INF nevyhovuje izolaci balíčku ovladače. Například vaše INF může mít:
[ExampleDDInstall]
AddReg=MediaCategoryRegistration
[MediaCategoryRegistration]
HKLM,SYSTEM\CurrentControlSet\Control\MediaCategories\%ExampleGuid%,Name,,%ExampleName%
Místo použití AddReg k registraci názvu kategorie médií v globálním umístění registru by měly být registrovány v relativním stavu zařízení pomocí AddReg HKR z oddílu DDInstall. Například:
[ExampleDDInstall]
AddReg=MediaCategoryRegistration
[MediaCategoryRegistration]
HKR,MediaCategories\%ExampleGuid%,Name,,%ExampleName%
Použití relativního stavu zařízení k registraci názvů kategorií médií je podporováno ve Windows 10 verze 1809 a novějších verzích Windows. Pro více informací viz Popisné Názvy pro Zařízení se Zvukovými Koncovými Body.
Použití doplňku AddReg k registraci hodnot zobrazení kategorie médií
Pokud váš INF používá direktivu AddReg k registraci hodnoty pro kategorie média, pak INF není v souladu s požadavky na izolaci balíčku ovladačů. Například vaše INF může mít:
[ExampleDDInstall]
AddReg=MediaCategoryRegistration
[MediaCategoryRegistration]
HKLM,SYSTEM\CurrentControlSet\Control\MediaCategories\%ExampleGuid%,Display,1,00,00,00,00
Tato hodnota se nepoužívá a měla by být odstraněna z INF.
Použití AddReg k registraci hodnot DmaSecurity\AllowedBuses
Pokud INF používá příkaz AddReg k tomu, aby určil hodnoty pod klíčem registru HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DmaSecurity\AllowedBuses, pak INF není v souladu s izolací balíčku ovladače. Například vaše INF může mít:
[ExampleDDInstall]
AddReg=DmaSecurityRegistration
[DmaSecurityRegistration]
HKLM,SYSTEM\CurrentControlSet\Control\DmaSecurity\AllowedBuses,"Example Friendly Name Description",0,PCI\VEN_ABCD&DEV_0123
Od Windows 11 verze 24H2 se tato hodnota nepoužívá a měla by být odebrána z INF. Další informace najdete v tématu požadavky na hardware automatického šifrování zařízení nástrojem BitLocker.