Share via


Portieren eines INF zum Befolgen der Treiberpaketisolation

Dieser Artikel dient als Übersichtsanleitung, die Sie beim Aktualisieren einer INF-Datei unterstützt, um die Treiberpaketisolation als Teil der Aktualisierung Ihres Treiberpakets als Windows-Treiber zu befolgen. In den folgenden Abschnitten finden Sie Beispiele für einige der häufigeren Elemente in der INF-Datei ihres Treiberpakets mit Verweisen auf Informationen zum Aktualisieren dieser Elemente, um die Kompatibilität mit der Treiberpaketisolation einzuhalten. Wenn Ihr Treiberpaket die alte Vorgehensweise für ältere Betriebssystemversionen unterstützen muss, während neuere Betriebssystemversionen verwendet werden, erfahren Sie unter Kombination von Plattformerweiterungen mit Betriebssystemversionen, wie Sie dies in einem INF erreichen können.

DestinationDirs ist nicht DIRID 13

Wenn Ihr DestinationDirs-Abschnitt ein Ziel für Dateien angibt, die nicht DIRID 13 sind, ist die INF nicht mit der Treiberpaketisolation kompatibel. Alle Dateien im Treiberpaket müssen über den Treiberspeicher ausgeführt werden, was bedeutet, dass DIRID 13 verwendet wird. Dies erfordert möglicherweise Updates für mehr als nur den DestinationDirs-Abschnitt. Andere vom INF durchgeführte Vorgänge, die sich auf Dateien beziehen, die vom INF geladen wurden, müssen möglicherweise ebenfalls aktualisiert werden. Beispielsweise müssen Sie die ServiceBinary-Anweisung in einem Dienstinstallationsabschnitt aktualisieren, auf den durch eine AddService-Anweisung verwiesen wird, oder einen Registrierungswert, der von einer AddReg-Anweisung geschrieben wurde. Im Allgemeinen wird die Ausführung über den Treiberspeicher unter Windows 10 1709 und höher unterstützt. Jedoch unterstützen einige Gerätestapel möglicherweise keine in diese Stapel integrierten Dateien, die bis zu einer späteren Version über den Treiberspeicher ausgeführt werden. Weitere Informationen finden Sie unter Ausführen über den Treiberspeicher.

Verwenden von AddReg zum Registrieren von ETW-Anbietern und EventLog-Kanälen

Wenn Ihre INF eine AddReg-Anweisung zum Registrieren von ETW-Anbietern und EventLog-Kanälen verwendet, ist die INF nicht mit der Treiberpaketisolation kompatibel. Ihre INF kann z. B. Folgendes enthalten:

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

Anstatt ein AddReg zum Registrieren von ETW-Anbietern und EventLog-Kanälen zu verwenden, sollten sie mithilfe einer AddEventProvider-Anweisung aus einem DDInstall.Events-Abschnitt registriert werden. Zum Beispiel:

[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

Die Verwendung einer AddEventProvider-Anweisung aus einem DDInstall.Events-Abschnitt wird unter Windows 10 1809 und höher unterstützt.

Verwenden von AddReg zum Registrieren eines AutoLoggers

Wenn Ihre INF eine AddReg-Anweisung zum Registrieren oder Ändern eines ETW-AutoLoggers verwendet, ist die INF nicht mit der Treiberpaketisolation kompatibel. Ihre INF kann z. B. Folgendes enthalten:

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

Anstatt ein AddReg zum Registrieren oder Aktualisieren eines AutoLoggers zu verwenden, sollte dieser mithilfe einer AddAutoLogger- oder UpdateAutoLogger-Anweisung aus einem DDInstall.Events-Abschnitt registriert oder aktualisiert werden. Zum Beispiel:

[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

Die Verwendung einer AddAutoLogger- oder UpdateAutoLogger-Anweisung aus einem DDInstall.Events-Abschnitt wird unter Windows 11 und höher unterstützt.

Verwenden von AddReg zum Hinzufügen eines Eintrags zum RunOnce-Schlüssel

Wenn Ihre INF eine AddReg-Anweisung verwendet, um dem RunOnce-Schlüssel einen Eintrag hinzuzufügen, ist die INF nicht mit der Treiberpaketisolation kompatibel. Ihre INF kann z. B. Folgendes enthalten:

[ExampleDDInstall]
AddReg = Example_Registry

[Example_Registry]
HKLM, Software\Microsoft\Windows\CurrentVersion\RunOnce, ExampleEntry, ,"application.exe"

Dies wird nicht unterstützt. Eine INF sollte keine globalen Registrierungseinträge ändern. Wenn beim Installieren des Treiberpakets eine einmalige Setupaktion erforderlich ist, können Sie eine AddSoftware-Anweisung aus der INF-Datei einer Komponente verwenden, um sie zu starten. Dies gilt nur für nicht kritische Aktionen. Wichtige Funktionen für die mit diesem Treiberpaket installierten Geräte sollten nicht von den Aktionen abhängen, die außerhalb der Geräteinstallation ausgeführt werden.

Verwenden von AddReg zum Hinzufügen eines Eintrags zum Run-Schlüssel

Wenn Ihre INF eine AddReg-Anweisung verwendet, um dem Run-Schlüssel einen Eintrag hinzuzufügen, ist die INF nicht mit der Treiberpaketisolation kompatibel. Ihre INF kann z. B. Folgendes enthalten:

[ExampleDDInstall]
AddReg = Example_Registry

[Example_Registry]
HKLM, Software\Microsoft\Windows\CurrentVersion\Run, ExampleEntry, ,"application.exe"

Dies wird nicht unterstützt. Eine INF sollte keine globalen Registrierungseinträge ändern. Wenn der Eintrag „Ausführen“ dazu dient, dem System Software mit Mehrwert hinzuzufügen, sollte Ihre Anwendung eine Anwendung der Universal Windows Platform sein und mithilfe einer AddSoftware-Anweisung aus einem DDInstall.Software-Abschnitt installiert werden. Weitere Informationen finden Sie unter Koppeln eines Treibers mit einer Universelle Windows-Plattform-App (UWP). Wenn es sich bei dieser Software um einen Dienst handelt, der keine Benutzeroberfläche haben muss, kann ein Win32-Dienst über das Treiberpaket mit einer AddService-Anweisung registriert werden. Beim Registrieren eines Diensts, der einem Gerät zugeordnet ist, sollte der Dienst nur ausgeführt werden, wenn das Gerät vorhanden ist. Der Dienst sollte über den Starttyp „Anforderungsstart“ (demand start) verfügen und eine AddTrigger-Anweisung aus dem Dienstinstallationsbereich verwenden, um die Trigger einzurichten, die den Dienststart auslösen, wenn das Gerät im System vorhanden ist. Dazu wird eine Geräteschnittstelle identifiziert, die der Treiber auf dem Gerät zur Verfügung stellt und die AddTrigger-Anweisung verwendet, um anzugeben, dass der Dienst gestartet werden soll, wenn diese Hardware angezeigt wird. Zur Laufzeit sollte der Dienst überwachen, dass das Gerät entfernt wird. Wenn das Gerät aus dem System entfernt wird, um die Ausführung des Dienstes zu stoppen, sollte der Dienst sich selbst beenden. Informationen zum Registrieren der Eingangs- und Entfernungsbenachrichtigungen zur Geräteschnittstelle finden Sie unter CM_Register_Notification.

Verwenden von CopyFiles zum Hinzufügen von Dateien in das Programme-Verzeichnis

Wenn Ihre INF eine CopyFiles-Anweisung verwendet, um Dateien dem Programme-Verzeichnis hinzuzufügen, ist die INF nicht mit der Treiberpaketisolation kompatibel. Dazu gehört (ist aber nicht beschränkt auf) die Verwendung der DIRIDs 16422, 16426, 16427 und 16428. Ihre INF kann z. B. Folgendes enthalten:

[DestinationDirs]
Example_CopyFiles = 16422, Contoso

[ExampleDDInstall]
CopyFiles = Example_CopyFiles

[Example_CopyFiles]
ExampleFile.exe

Dieser Vorgang wird nicht unterstützt. Eine INF sollte keine Dateien in globale Speicherorte kopieren. Die Programme-Verzeichnisse werden in der Regel für die Installation von Softwareanwendungen, nicht von Treibern verwendet. Wenn Sie eine Begleitanwendung für Ihr Gerät erstellen und bereitstellen möchten, die mit Ihrem Treiber kommuniziert, lesen Sie die Anleitung zur Hardwaresupport-App. Ihre Anwendung kann z. B. eine Universelle Windows-Plattform-Anwendung sein und mithilfe einer AddSoftware-Anweisung aus einem DDInstall.Software-Abschnitt installiert werden. Weitere Informationen finden Sie unter Koppeln eines Treibers mit einer Universelle Windows-Plattform-App (UWP). Wenn der CopyFiles-Eintrag keine Begleitanwendung zum System hinzufügen soll und die Dateien Teil des des Treiberpakets bleiben sollen, müssen sie die Eigenschaft „Ausführen über den Treiberspeicher“ erhalten.

CoInstaller, der die Benutzeroberfläche startet

Wenn Ihre INF einen CoInstaller verwendet, um eine Anwendung zu installieren, mit der der Benutzer interagieren soll, ist die INF nicht mit der Treiberpaketisolation kompatibel. Ihre INF kann z. B. einen CoInstaller wie folgt registrieren:

[ExampleDDInstall.CoInstallers]
CopyFiles = CoInstallerCopyFilesSection
AddReg = Example_CoInstallers_AddReg

[CoInstallerCopyFilesSection]
ExampleCoInstall.dll

[Example_CoInstallers_AddReg]
HKR,,CoInstallers32,0x00010000,"ExampleCoInstall.dll,ExampleCoInstallEntryPoint"

Informationen zur Handhabung dieser Situation finden Sie unter Entfernen von Co-Installern aus Treiberpaketen.

Verwenden von AddReg zum Ändern eines Diensts, der von der INF nicht hinzugefügt wird

Wenn Ihre INF eine AddReg-Anweisung zum Ändern des Status eines Diensts verwendet, der von einer AddService-Anweisung in Ihrer INF nicht hinzugefügt wird, ist die INF nicht mit der Treiberpaketisolation kompatibel. Ihre INF kann z. B. Folgendes enthalten:

[ExampleDDInstall]
AddReg = Example_Registry

[Example_Registry]
HKLM,SYSTEM\CurrentControlSet\Services\ServiceNotCreatedByThisInf\ExampleKey, ExampleValue, %REG_DWORD%, 1

Dies wird nicht unterstützt. Eine INF sollte nur Einstellungen für Dienste ändern, die von dieser INF erstellt wurden, und die INF sollte diese AddReg entfernen.

Verwenden von AddReg zum Ändern des Status im Stamm eines Diensts

Wenn Ihre INF eine AddReg-Anweisung zum Erstellen von Schlüsseln oder Werten im Stammzustand eines Diensts verwendet, ist die INF nicht mit der Treiberpaketisolation kompatibel. Ihre INF kann z. B. Folgendes enthalten:

[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

Damit die Kompatibilität mit einer Treiberpaketisolation sichergestellt ist, kann eine AddReg-Anweisung, die Registrierungsschlüssel und Werte des Diensts bereitstellt, nur Schlüssel und Werte unter dem Parameter-Unterschlüssel des Diensts ändern.

Wenn Ihre INF den systeminternen Dienststatus ändert, z. B. die Load Order Group, die Diensttrigger usw., müssen Sie die integrierten INF-Anweisungen verwenden, um diesen Status wie in der AddService-Anweisung beschrieben, anzugeben.

Wenn Ihre INF einen anderen Status unter dem Stamm des Diensts erstellt oder ändert, müssen die Einstellungen unter dem „Parameters-Unterschlüssel des Diensts verschoben werden, und auf den Parameters-Unterschlüssel kann zur Laufzeit mit IoOpenDriverRegistryKey mithilfe eines RegKeyType von DriverRegKeyParameters zugegriffen werden. IoOpenDriverRegistryKey wird unter Windows 10 1803 und höher unterstützt.

Verwenden von HKCR AddReg zum Registrieren eines APO

Wenn Ihre INF eine AddReg-Anweisung mit einem HKCR-Registrierungsstamm verwendet, um ein Audio Processing Object (APO) zu registrieren, ist die INF nicht mit der Treiberpaketisolation kompatibel. Ihre INF kann z. B. Folgendes enthalten:

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

Stattdessen sollten die APO-Registrierungsinformationen in einem Abschnitt enthalten sein, auf den eine AddReg-Anweisung aus einem DDInstall-Abschnitt verweist. Der HKCR-Registrierungsstamm sollte in einen HKR-Registrierungsstamm geändert werden, um die Einstellungen relativ zum Registrierungsstatusspeicherort „Software“ (auch als „Treiber“ bezeichnet) des Geräts zu platzieren. Weitere Informationen finden Sie unter Registrieren von APOs für Verarbeitungsmodi und Effekte in der INF-Datei.

UMDF-Treiberversion ist niedriger als 2

Wenn Ihr Treiberpaket einen UMDF-Treibertreiber (User-Mode Driver Framework) nutzt, der eine UMDF-Version niedriger als Version 2 verwendet, ist er nicht mit „Windows-Treibern“ kompatibel. Weitere Informationen zum Verschieben des UMDF-Treibers auf eine neuere UMDF-Version finden Sie unter Portieren eines Treibers von UMDF 1 zu UMDF 2.

Verwenden von AddReg zum Hinzufügen eines oberen oder unteren Filters zu einem Gerätestapel

Wenn Ihre INF eine AddReg-Anweisung verwendet, um einem Gerätestapel einen oberen oder niedrigeren Filter hinzuzufügen, ist die INF nicht mit der Treiberpaketisolation kompatibel. Ihre INF kann z. B. Folgendes enthalten:

[ExampleDDInstall.HW]
AddReg = FilterAddReg

[FilterAddReg]
HKR,,"UpperFilters",0x00010000,"ExampleFilterDriver" ; REG_MULTI_SZ value

Stattdessen sollte der Filter mithilfe der AddFilter-Anweisung dem Gerätestapel hinzugefügt werden. Zum Beispiel:

[ExampleDDInstall.Filters]
AddFilter = ExampleFilterDriver,, ExampleFilterSection

[ExampleFilterSection]
FilterPosition = Upper

Weitere Informationen zum Hinzufügen von Gerätefiltern finden Sie unter Gerätefiltertreiber-Sortierung des Gerätefilters.

Verwenden von AddReg zum Registrieren von Medienkategorienamens-Werten

Wenn Ihre INF eine AddReg-Anweisung zum Registrieren eines Medienkategoriennamens-Werts verwendet, ist die INF nicht mit der Treiberpaketisolation kompatibel. Ihre INF kann z. B. Folgendes enthalten:

[ExampleDDInstall]
AddReg=MediaCategoryRegistration

[MediaCategoryRegistration]
HKLM,SYSTEM\CurrentControlSet\Control\MediaCategories\%ExampleGuid%,Name,,%ExampleName%

Anstatt einen AddReg-Namen zum Registrieren eines Medienkategoriennamens unter dem globalen Registrierungsspeicherort zu verwenden, sollte dieser mithilfe eines HKR-AddReg aus dem DDInstall-Abschnitt im relativen Gerätestatus registriert werden. Zum Beispiel:

[ExampleDDInstall]
AddReg=MediaCategoryRegistration

[MediaCategoryRegistration]
HKR,MediaCategories\%ExampleGuid%,Name,,%ExampleName%

Die Verwendung des relativen Gerätestatus zum Registrieren von Medienkategorienamen wird unter Windows 10, Version 1809 und höher, unterstützt. Weitere Informationen finden Sie unter Anzeigenamen für Audioendpunktgeräte.

Verwenden von AddReg zum Registrieren von Medienkategorienanzeige-Werten

Wenn Ihre INF eine AddReg-Anweisung zum Registrieren eines Medienkategorieanzeige-Werts verwendet, ist die INF nicht mit der Treiberpaketisolation kompatibel. Ihre INF kann z. B. Folgendes enthalten:

[ExampleDDInstall]
AddReg=MediaCategoryRegistration

[MediaCategoryRegistration]
HKLM,SYSTEM\CurrentControlSet\Control\MediaCategories\%ExampleGuid%,Display,1,00,00,00,00

Dieser Wert wird nicht verwendet und sollte und aus der INF entfernt werden.