Share via


Erstellen einer INF-Datei für einen Minifiltertreiber

Einführung

Hinweis

Ab Windows 10 Version 1903 wurden die INF-Anforderungen für primitive Treiber (z. B. Dateisystem-Minifiltertreiber) geändert. Weitere Informationen finden Sie unter Erstellen eines neuen primitiven Treibers .

Filtertreiber benötigen eine INF-Datei, die unter dem Windows-Betriebssystem installiert werden muss. Beispiel-INF-Dateien finden Sie in den Minifilterbeispielen.

Eine INF-Datei für einen Dateisystemfiltertreiber enthält im Allgemeinen die folgenden Abschnitte:

`Section` Hinweise
Version Erforderlich
DestinationDirs Optional, aber empfohlen
Defaultinstall Erforderlich
DefaultInstall.Services Erforderlich
ServiceInstall Erforderlich
AddRegistry Erforderlich
Zeichenfolgen Erforderlich

Hinweis

Ab Windows 10 Version 1903 sind die Abschnitte DefaultUninstall und DefaultUninstall.Services(mit Ausnahme) verboten. Diese Abschnitte waren in früheren Betriebssystemversionen optional.

Alle Treiber, die auf 64-Bit-Versionen von Windows-Systemen ausgeführt werden, müssen signiert sein, bevor Sie von Windows geladen werden. Weitere Informationen finden Sie unter Signieren eines Treibers .

Abschnitt "Version" (erforderlich)

Der Abschnitt Version gibt eine Klasse und eine GUID an, die durch den Typ des Minifiltertreibers bestimmt werden, wie im folgenden Codebeispiel gezeigt.

[Version]
Signature   = "$WINDOWS NT$"
Class       = "ActivityMonitor"
ClassGuid   = {b86dff51-a31e-4bac-b3cf-e8cfe75c9fc2}
Provider    = %Msft%
DriverVer   = 10/09/2001,1.0.0.0
CatalogFile =
PnpLockdown = 1

Die folgende Tabelle zeigt die Werte, die Dateisystem-Minifiltertreiber im Abschnitt Version angeben sollten.

Eingabe Wert
Signature "$WINDOWS NT$"
Klasse Weitere Informationen finden Sie unter Dateisystemfiltertreiberklassen und Klassen-GUIDs.
ClassGuid Weitere Informationen finden Sie unter Dateisystemfiltertreiberklassen und Klassen-GUIDs.
Anbieter In Ihrer eigenen INF-Datei sollten Sie einen anderen Anbieter als Microsoft angeben.
DriverVer Weitere Informationen finden Sie unter INF DriverVer-Direktive.
CatalogFile Für Antivirus-Minifiltertreiber, die signiert sind, enthält dieser Eintrag den Namen einer von WHQL bereitgestellten Katalogdatei. Alle anderen Minifiltertreiber sollten diesen Eintrag leer lassen. Weitere Informationen finden Sie in der Beschreibung des CatalogFile-Eintrags im Abschnitt "INF-Version".

Der Abschnitt DestinationDirs gibt die Verzeichnisse an, in die Minifiltertreiber- und Anwendungsdateien kopiert werden.

In diesem Abschnitt und im Abschnitt ServiceInstall können Sie bekannte Systemverzeichnisse anhand systemdefinierter numerischer Werte angeben. Eine Liste dieser Werte finden Sie im Abschnitt INF DestinationDirs. Im folgenden Codebeispiel bezieht sich der Wert 12 auf das Verzeichnis Drivers (%windir%\system32\drivers), und der Wert 10 bezieht sich auf das Windows-Verzeichnis (%windir%).

[DestinationDirs]
DefaultDestDir = 12
Minispy.DriverFiles = 12
Minispy.UserFiles   = 10,FltMgr

Abschnitt "DefaultInstall" (erforderlich)

Im Abschnitt DefaultInstall kopiert eine CopyFiles-Direktive die Treiberdateien und Benutzeranwendungsdateien des Minifiltertreibers in die im Abschnitt DestinationDirs angegebenen Ziele.

Hinweis

Die CopyFiles-Direktive sollte nicht auf die Katalogdatei oder die INF-Datei selbst verweisen. SetupAPI kopiert diese Dateien automatisch.

Sie können eine einzelne INF-Datei erstellen, um Ihren Treiber unter mehreren Versionen der Windows-Betriebssysteme zu installieren. Sie können diesen Typ von INF-Datei erstellen, indem Sie zusätzliche Abschnitte DefaultInstall und DefaultInstall.Services für jede Betriebssystemversion erstellen. Jeder Abschnitt ist mit einer Dekoration (z. B. .ntx86, .ntia64 oder .nt) beschriftet, die die Betriebssystemversion angibt, auf die er angewendet wird. Weitere Informationen zum Erstellen dieser Art von INF-Datei finden Sie unter Erstellen von INF-Dateien für mehrere Plattformen und Betriebssysteme.

Das folgende Codebeispiel zeigt einen typischen DefaultInstall-Abschnitt .

[DefaultInstall.NTamd64]
OptionDesc = %MinispyServiceDesc%
CopyFiles = Minispy.DriverFiles, Minispy.UserFiles

Abschnitt "DefaultInstall.Services" (erforderlich)

Der Abschnitt DefaultInstall.Services enthält eine AddService-Direktive , die steuert, wie und wann die Dienste eines bestimmten Treibers geladen werden, wie im folgenden Codebeispiel gezeigt.

[DefaultInstall.NTamd64.Services]
AddService = %MinispyServiceName%,,Minispy.Service

Abschnitt "ServiceInstall" (erforderlich)

Der Abschnitt ServiceInstall enthält Informationen zum Laden des Treiberdiensts. Im MiniSpy-Beispieltreiber heißt dieser Abschnitt "Minispy.Service", wie im folgenden Codebeispiel gezeigt. Der Name des Abschnitts ServiceInstall muss in einer AddService-Direktive im Abschnitt DefaultInstall.Services angezeigt werden.

[Minispy.Service]
DisplayName    = %MinispyServiceName%
Description    = %MinispyServiceDesc%
ServiceBinary  = %12%\minispy.sys
ServiceType    = 2 ;    SERVICE_FILE_SYSTEM_DRIVER
StartType      = 3 ;    SERVICE_DEMAND_START
ErrorControl   = 1 ;    SERVICE_ERROR_NORMAL%
LoadOrderGroup = "FSFilter Activity Monitor"
AddReg         = Minispy.AddRegistry
Dependencies   = FltMgr

Der ServiceType-Eintrag gibt den Typ des Diensts an. Minifiltertreiber sollten den Wert 2 (SERVICE_FILE_SYSTEM_DRIVER) angeben. Weitere Informationen zum ServiceType-Eintrag finden Sie unter INF AddService-Direktive.

Der StartType-Eintrag gibt an, wann der Dienst gestartet werden soll. In der folgenden Tabelle sind die möglichen Werte für StartType und die entsprechenden Starttypen aufgeführt.

Wert Beschreibung
0x00000000 SERVICE_BOOT_START
0x00000001 SERVICE_SYSTEM_START
0x00000002 SERVICE_AUTO_START
0x00000003 SERVICE_DEMAND_START
0x00000004 SERVICE_DISABLED

Weitere Informationen zu diesen Starttypen finden Sie unter "Treiberstarttypen" in Was bestimmt, wenn ein Treiber geladen wird.

Der Eintrag LoadOrderGroup stellt dem Filter-Manager Informationen bereit, die er benötigt, um die Interoperabilität zwischen Minifiltertreibern und Legacy-Dateisystemfiltertreibern sicherzustellen. Sie sollten einen LoadOrderGroup-Wert angeben, der für den Typ des Minifiltertreibers geeignet ist, den Sie entwickeln. Informationen zum Auswählen einer Ladereihenfolgegruppe finden Sie unter Laden von Auftragsgruppen und Höhen für Minifiltertreiber.

Beachten Sie, dass Sie einen LoadOrderGroup-Wert angeben müssen, auch wenn der Starttyp Ihres Minifiltertreibers nicht SERVICE_BOOT_START ist. Auf diese Weise unterscheiden sich Minifiltertreiber von Legacy-Dateisystemfiltertreibern.

Hinweis

Der StartType-Wert des Filter-Managers ist SERVICE_BOOT_START, und der LoadOrderGroup-Wert ist FSFilter Infrastructure. Diese Werte stellen sicher, dass der Filter-Manager immer geladen wird, bevor Minifiltertreiber geladen werden.

Weitere Informationen dazu, wie die Einträge StartType und LoadOrderGroup bestimmen, wann der Treiber geladen wird, finden Sie unter Was bestimmt, wenn ein Treiber geladen wird.

Bei Minifiltertreibern bestimmen die Werte StartType und LoadOrderGroup im Gegensatz zu legacy-Dateisystemfiltertreibern nicht, wo der Minifiltertreiber im Minifilter instance Stapel anfügt. Diese Position wird durch die Höhe bestimmt, die für den Minifilter instance angegeben wird.

Der Eintrag ErrorControl gibt die Aktion an, die ausgeführt werden soll, wenn der Dienst während des Systemstarts nicht gestartet werden kann. Minifiltertreiber sollten den Wert 1 (SERVICE_ERROR_NORMAL) angeben. Weitere Informationen zum Eintrag ErrorControl finden Sie unter INF AddService-Direktive.

Die AddReg-Direktive bezieht sich auf einen oder mehrere vom INF-Writer definierte AddRegistry-Abschnitte , die Informationen enthalten, die in der Registrierung für den neu installierten Dienst gespeichert werden sollen. Minifiltertreiber verwenden AddRegistry-Abschnitte, um Minifiltertreiberinstanzen zu definieren und eine Standard-instance anzugeben.

Der Eintrag Abhängigkeiten gibt die Namen aller Dienste oder Ladereihenfolgegruppen an, von denen der Treiber abhängt. Alle Minifiltertreiber müssen FltMgr angeben, was der Dienstname des Filter-Managers ist.

AddRegistry-Abschnitt (erforderlich)

Im Abschnitt AddRegistry werden der Registrierung Schlüssel und Werte hinzugefügt. Minifiltertreiber verwenden einen AddRegistry-Abschnitt, um Minifilterinstanzen zu definieren und eine Standard-instance anzugeben. Diese Informationen werden immer verwendet, wenn der Filter-Manager eine neue instance für den Minifiltertreiber erstellt.

Im MiniSpy-Beispieltreiber definiert der folgende AddRegistry-Abschnitt zusammen mit den %strkey%-Tokendefinitionen im Abschnitt Strings drei Instanzen, von denen eine als Standard-instance des MiniSpy-Beispieltreibers benannt ist.

[Minispy.AddRegistry]
HKR,%RegInstancesSubkeyName%,%RegDefaultInstanceValueName%,0x00000000,%DefaultInstance%
HKR,%RegInstancesSubkeyName%"\"%Instance1.Name%,%RegAltitudeValueName%,0x00000000,%Instance1.Altitude%
HKR,%RegInstancesSubkeyName%"\"%Instance1.Name%,%RegFlagsValueName%,0x00010001,%Instance1.Flags%
HKR,%RegInstancesSubkeyName%"\"%Instance2.Name%,%RegAltitudeValueName%,0x00000000,%Instance2.Altitude%
HKR,%RegInstancesSubkeyName%"\"%Instance2.Name%,%RegFlagsValueName%,0x00010001,%Instance2.Flags%
HKR,%RegInstancesSubkeyName%"\"%Instance3.Name%,%RegAltitudeValueName%,0x00000000,%Instance3.Altitude%
HKR,%RegInstancesSubkeyName%"\"%Instance3.Name%,%RegFlagsValueName%,0x00010001,%Instance3.Flags%

Abschnitt "Strings" (erforderlich)

Der Abschnitt Zeichenfolgen definiert jedes %strkey%-Token, das in der INF-Datei verwendet wird.

Sie können eine einzelne internationale INF-Datei erstellen, indem Sie zusätzliche gebietsschemaspezifische Zeichenfolgen erstellen. LanguageID-Abschnitte in der INF-Datei. Weitere Informationen zu internationalen INF-Dateien finden Sie unter Erstellen internationaler INF-Dateien.

Das folgende Codebeispiel zeigt einen typischen Strings-Abschnitt .

[Strings]
Msft               = "Microsoft Corporation"
MinispyServiceDesc = "Minispy mini-filter driver"
MinispyServiceName = "Minispy"
RegInstancesSubkeyName = "Instances"
RegDefaultInstanceValueName  = "DefaultInstance"
RegAltitudeValueName    = "Altitude"
RegFlagsValueName  = "Flags"

DefaultInstance    = "Minispy - Top Instance"
Instance1.Name     = "Minispy - Middle Instance"
Instance1.Altitude = "370000"
Instance1.Flags    = 0x1 ; Suppress automatic attachments
Instance2.Name     = "Minispy - Bottom Instance"
Instance2.Altitude = "365000"
Instance2.Flags    = 0x1 ; Suppress automatic attachments
Instance3.Name     = "Minispy - Top Instance"
Instance3.Altitude = "385000"
Instance3.Flags    = 0x1 ; Suppress automatic attachments

Abschnitte "DefaultUninstall" und "DefaultUninstall.Services"

Hinweis

Die Abschnitte DefaultUninstall und DefaultUninstall.Services sind (mit Ausnahme) ab Windows 10 Version 1903 verboten.

In Windows 10 vor Version 1903 waren die Abschnitte DefaultUninstall und DefaultUninstall.Services optional, werden jedoch empfohlen, wenn der Treiber deinstalliert werden konnte:

  • DefaultUninstall enthielt DelFiles - und DelReg-Anweisungen , um Dateien und Registrierungseinträge zu entfernen.
  • DefaultUninstall.Services enthielt DelService-Anweisungen , um die Dienste des Minifiltertreibers zu entfernen. Die DelService-Direktive hat immer das SPSVCINST_STOPSERVICE-Flag (0x00000200) angegeben, um den Dienst zu beenden, bevor er gelöscht wurde.

Das folgende Beispiel zeigt die typischen Abschnitte DefaultUninstall und DefaultUninstall.Services vor Windows 10 Version 1903.

[DefaultUninstall.NTamd64]
DelFiles   = Minispy.DriverFiles, Minispy.UserFiles
DelReg     = Minispy.DelRegistry

[DefaultUninstall.NTamd64.Services]
DelService = Minispy,0x200