Freigeben über


Erstellen eines neuen primitiven Treibers

Verwenden Sie einen primitiven Treiber, um Software zu verarbeiten und zu verwalten, die EINE INF-basierte Installation verwendet, aber nicht unbedingt an ein bestimmtes Hardwaregerät gebunden ist.

Hintergrund und Vorteile von primitiven Treibern

Vor Windows 10 Version 1903 wurden bestimmte Softwaretypen, die eine INF-basierte Installation verwendeten, aber nicht unbedingt an ein bestimmtes Hardwaregerät gebunden waren, vom Betriebssystem nicht vollständig unterstützt. Während diese Softwareteile INF-Dateien als Manifest für die Installation verwendet haben, war das Betriebssystem dieses Szenarios nicht direkt bekannt und hatte keine Unterstützung für die native Verarbeitung.

Da diese Softwareteile nicht an ein Hardwaregerät gebunden waren, würden sie unabhängig von der Hardware auf dem gesamten System installiert. Daher gab es keine Garantie dafür, dass diese Softwareteile beim Betriebssystemupgrade ordnungsgemäß installiert, deinstalliert oder verarbeitet wurden.

Ab Windows 10 Version 1903 verarbeitet und verwaltet die Plug & Play Plattform diese Art von Softwarepaket als Entität der obersten Ebene, was zu einer verbesserten Zuverlässigkeit und einem garantierten ordnungsgemäßen Verhalten dieser Software führt, insbesondere während Betriebssystemupgrade- und Zurücksetzungsszenarien.

Die Softwaretypen, die diese neue Plattformunterstützung nutzen, werden als primitive Treiber bezeichnet. Primitive Treiber verwenden weiterhin die INF-basierte Installation, und die zugrunde liegende Plattform verwendet den Treiberspeicher , um alle relevanten Dateien nachzuverfolgen.

Die zugrunde liegende Plug & Play Plattform installiert, deinstalliert und verwaltet den Treiberstatus dann ordnungsgemäß beim Betriebssystemupgrade.

Konzeptionell werden diese INFs unterschiedlich verwaltet. Zuvor wurden [DefaultInstall] (und häufig [DefaultUninstall]) von SetupAPI skriptartig verarbeitet, wobei das INF als Manifest und SetupAPI die Anweisungen in den relevanten Abschnitten im Namen des Aufrufers ausgeführt hat.

Um die Änderungen rückgängig zu machen (um eine Deinstallation durchzuführen), war die Angabe eines INF-Abschnitts erforderlich, der den entgegengesetzten Satz von Anweisungen als Installationsabschnitt ausführte. Für die Verwendung von INF-Grundtreibern ist jedoch kein Deinstallationsabschnitt erforderlich.

Primitive Treiber verwenden die gleichen Installations- und Deinstallations-APIs wie Gerätetreiber, wobei die Deinstallations-API den umgekehrten Satz von Vorgängen als Installationsvorgang ausführt und die Installation oder Deinstallation des Treiberpakets diese Abschnitte verarbeitet.

INF-Anforderungen für den Zugriff auf primitive Treiberfunktionen

  • Der Abschnitt Version muss wie PnP-Treiber vollständig sein.

    • Die Provider-Direktive muss ausgefüllt werden.

    • Die Class-Direktive muss ausgefüllt werden.

    • Die ClassGuid-Direktive muss ausgefüllt werden.

  • Der Treiber muss DCH-konform sein.

  • Es darf kein Abschnitt [Hersteller] vorhanden sein.

  • [DefaultInstall]-Abschnitte müssen architekturkomziert sein, und es können keine nicht ergänzten Versionen vorhanden sein.

    • Richtig: [DefaultInstall.NTamd64]

    • Falsch: [DefaultInstall]

  • [DefaultUninstall] ist möglicherweise nicht im INF vorhanden (siehe Legacykompatibilität für eine Ausnahme).

Primitive Treiber, die nur Windows 10 Version 1903 und höher ausgerichtet sind

Primitive Treiber, die nur für Windows 10 Version 1903 und höher vorgesehen sind, sollten DiInstallDriver und DiUninstallDriver verwenden, um ihre Software im/aus dem Treiberspeicher ordnungsgemäß zu installieren und zu deinstallieren.

Treiber sollten auch Dirid 13 verwenden, um den Treiberspeicher ordnungsgemäß als gewünschtes Ziel anzugeben, das installiert werden soll.

Legacykompatibilität

[DefaultUninstall] ist in primitiven Treibern nicht zulässig, es wird jedoch eine Ausnahme aus Gründen der Abwärtskompatibilität des Betriebssystems gemacht. Windows führt eine INF-Direktive ein, die bewirkt, dass eine Betriebssystemversion, die primitive Treiber unterstützt, den Abschnitt [DefaultUninstall] ignoriert. Wenn Ihr Treiberpaket untergeordnete Betriebssystemversionen unterstützen muss, fügen Sie die folgende Syntax ein, um sicherzustellen, dass die Plattform solche Fälle angemessen behandelt:

[DefaultUninstall.NTamd64]
LegacyUninstall=1

Die Abschnitte [DefaultInstall] und [DefaultUninstall] müssen weiterhin architekturgeziert sein. Durch das Einschließen von LegacyUninstall=1ignoriert Windows jedoch den Abschnitt [DefaultUninstall] (in Windows 10 Version 1903 und höher). Auf diese Weise können Sie diesen Abschnitt in Ihr INF einschließen, in dem er im Down-Level mit einer älteren Installations-/Deinstallationsanwendung verwendet werden kann, um das primitive Treiberpaket zu deinstallieren.

Ab Windows 10 Version 1903 wird das Treiberpaket überprüft, um festzustellen, ob es primitive Treiberfunktionen unterstützt, wenn Sie ab setupapi.dll Windows 10 Version 1903 einen architekturbezogenen [DefaultInstall]- oder [DefaultUninstall]-Abschnitt in der InstallHInfSection-API übergeben. Wenn die Funktionalität von primitiven Treibern unterstützt wird, wird der INF nach Bedarf an DiInstallDriver oder DiUninstallDriver übergeben, anstatt den angegebenen Abschnitt auf legacy-Weise zu verarbeiten. Auf diese Weise kann ein einzelnes Installationsprogramm primitive Treiber unter kompatiblen Betriebssystemversionen verwenden und die Unterstützung für frühere Betriebssystemversionen beibehalten.

Konvertieren von einem Gerätetreiber INF

Das Konvertieren eines INF, der [Manufacturer] verwendet, in ein Inf,das [DefaultInstall] verwendet, erfordert geringfügige Änderungen am INF. Im Gegensatz zu einem [Manufacturer]-Abschnitt ist ein [DefaultInstall]-Abschnitt sowohl ein Einstiegspunkt als auch ein Installationsabschnitt. Dies kombiniert den Abschnitt [Hersteller], [Modelle] und [DDInstall] in einem.

Der folgende INF-Fehler 1297 wird in InfVerif angezeigt, da es auf keiner Hardware installiert wird:

[Manufacturer]
%Company% = Driver, NTx86, NTamd64

[Driver.NTx86]
%DeviceDesc% = InstallSection_32,

[Driver.NTamd64]
%DeviceDesc% = InstallSection_64,

[InstallSection_64]
CopyFiles = MyCopyFiles_64
AddReg = MyAddReg

[InstallSection_64.Services]
AddService = MyService,, MyService_Install

[InstallSection_32]
CopyFiles = MyCopyFiles_x86
AddReg = MyAddReg

[InstallSection_32.Services]
AddService = MyService,, MyService_Install

Das obige INF kann wie unten gezeigt in ein [DefaultInstall]-basiertes INF konvertiert werden.

[DefaultInstall.NTamd64]
CopyFiles = MyCopyFiles_64
AddReg = MyAddReg

[DefaultInstall.NTamd64.Services]
AddService = MyService,, MyService_Install

[DefaultInstall.NTx86]
CopyFiles = MyCopyFiles_x86
AddReg = MyAddReg

[DefaultInstall.NTx86.Services]
AddService = MyService,, MyService_Install