Creazione di un file INF per un driver minifiltro
I driver minifiltri del file system richiedono l'installazione di un file INF nel sistema operativo Windows. È possibile trovare diversi file INF di esempio negli esempi di minifiltro che è possibile usare come punto di partenza.
A partire da Windows 10 versione 1903, i requisiti INF sono stati modificati per i driver primitivi, inclusi i minifiltri del file system. Per informazioni dettagliate, vedere Creazione di un nuovo driver primitivo.
Sezioni INF per un driver di filtro del file system
Un file INF per un driver di filtro del file system contiene in genere le sezioni seguenti:
Sezione | Note |
---|---|
Versione | Richiesto |
DestinationDirs | Richiesto |
DefaultInstall | Richiesto |
DefaultInstall.Services | Richiesto |
ServiceInstall | Richiesto |
AddRegistry | Richiesto |
Stringhe | Richiesto |
A partire da Windows 10 versione 1903, le sezioni DefaultUninstall e DefaultUninstall.Services non sono consentite (con eccezione). Queste sezioni erano facoltative nelle versioni precedenti del sistema operativo.
Tutti i driver in esecuzione in versioni a 64 bit dei sistemi Windows devono essere firmati per consentire a Windows di caricarli. Per altre informazioni, vedere Firma di un driver.
Sezione Version (obbligatorio)
La sezione Version specifica una classe e un GUID determinati dal tipo di driver minifilter, come illustrato nell'esempio di codice seguente.
[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
Nella tabella seguente vengono illustrati i valori che i driver minifilter del file system devono specificare nella sezione Versione.
Movimento | Valore |
---|---|
Firma | "$WINDOWS NT$" |
Classe | Vedere Classi di driver di filtro del file system e GUID di classe. |
ClassGuid | Vedere Classi di driver di filtro del file system e GUID di classe. |
Provider | Nel proprio file INF è necessario specificare un provider diverso da Microsoft. |
DriverVer | Vedere direttiva INF DriverVer. |
CatalogFile | Per i driver di minifiltro antivirus firmati, questa voce contiene il nome di un file di catalogo fornito da WHQL. Tutti gli altri driver minifiltro devono lasciare vuota questa voce. Per altre informazioni, vedere la descrizione della voce CatalogFile nella sezione Versione INF |
Sezione DestinationDirs (obbligatorio)
La sezione DestinationDirs specifica le directory in cui devono essere copiati i file del driver e dell'applicazione minifilter.
In questa sezione e nella sezione ServiceInstall è possibile specificare directory di sistema note in base ai valori numerici definiti dal sistema. Per un elenco di questi valori, vedere sezione INF DestinationDirs. Nell'esempio di codice seguente il valore 13 fa riferimento a un percorso dell'archivio driver definito dal sistema operativo.
[DestinationDirs]
Minispy.DriverFiles = 13
Minispy.UserFiles = 13
Sezione DefaultInstall (obbligatorio)
Nella sezione DefaultInstall una direttiva CopyFiles copia i file driver del driver minifilter e i file dell'applicazione utente nelle destinazioni specificate nella sezione DestinationDirs.
Nota
La direttiva CopyFiles non deve fare riferimento al file di catalogo o al file INF stesso, questi file vengono copiati automaticamente.
È possibile creare un singolo file INF per installare il driver in più versioni dei sistemi operativi Windows. È possibile creare questo tipo di file INF creando sezioni DefaultInstall e DefaultInstall.Services per ogni versione del sistema operativo. Ogni sezione viene etichettata con una decorazione (ad esempio, .ntx86, .ntia64 o .nt) che specifica la versione del sistema operativo a cui si applica. Per altre informazioni sulla creazione di questo tipo di file INF, vedere Creazione di file INF per più piattaforme e sistemi operativi.
L'esempio di codice seguente illustra una tipica sezione DefaultInstall .
[DefaultInstall.NTamd64]
OptionDesc = %MinispyServiceDesc%
CopyFiles = Minispy.DriverFiles, Minispy.UserFiles
Sezione DefaultInstall.Services (obbligatorio)
La sezione DefaultInstall.Services contiene una direttiva AddService che controlla come e quando vengono caricati i servizi di un determinato driver, come illustrato nell'esempio di codice seguente.
[DefaultInstall.NTamd64.Services]
AddService = %MinispyServiceName%,,Minispy.Service
Sezione ServiceInstall (obbligatorio)
La sezione ServiceInstall contiene informazioni utilizzate per il caricamento del servizio driver. Nel driver di esempio MiniSpy questa sezione è denominata "Minispy.Service", come illustrato nell'esempio di codice seguente. Il nome della sezione ServiceInstall deve essere visualizzato in una direttiva AddService nella sezione DefaultInstall.Services.
[Minispy.Service]
DisplayName = %MinispyServiceName%
Description = %MinispyServiceDesc%
ServiceBinary = %13%\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
La voce ServiceType specifica il tipo di servizio. I driver minifiltro devono specificare il valore 2 (SERVICE_FILE_SYSTEM_DRIVER). Per altre informazioni sulla voce ServiceType , vedere Direttiva INF AddService.
La voce StartType specifica quando avviare il servizio. Nella tabella seguente sono elencati i valori possibili per StartType e i relativi tipi di inizio corrispondenti.
valore | Descrizione |
---|---|
0x00000000 | SERVICE_BOOT_START |
0x00000001 | SERVICE_SYSTEM_START |
0x00000002 | SERVICE_AUTO_START |
0x00000003 | SERVICE_DEMAND_START |
0x00000004 | SERVICE_DISABLED |
Per altre informazioni su questi tipi di avvio, vedere "Tipi di avvio driver" in What Determine When a Driver Is Loaded(Tipi di avvio driver) in What Determine When a Driver Is Loaded .For more information about these start types, see "Driver Start Types" in What Determine When a Driver Is Loaded.
La voce LoadOrderGroup fornisce al gestore filtri informazioni necessarie per garantire l'interoperabilità tra i driver minifilter e i driver di filtro del file system legacy. È necessario specificare un valore LoadOrderGroup appropriato per il tipo di driver minifiltro in fase di sviluppo. Per scegliere un gruppo di ordini di carico, vedere Load Order Groups and Altitudes for Minifilter Drivers (Gruppi di ordini di carico e altitudini per i driver minifiltri).
È necessario specificare un valore LoadOrderGroup , anche se il tipo di avvio del driver minifilter non è SERVICE_BOOT_START. In questo modo, i driver minifiltro sono diversi dai driver di filtro del file system legacy.
Nota
Il valore StartType del gestore filtri è SERVICE_BOOT_START e il relativo valore LoadOrderGroup è FSFilter Infrastructure. Questi valori assicurano che la gestione filtri venga sempre caricata prima che vengano caricati i driver minifiltri.
Per altre informazioni su come le voci StartType e LoadOrderGroup determinano quando viene caricato il driver, vedere What Determine When a Driver Is Loaded.
A differenza dei driver di filtro legacy, i valori StartType e LoadOrderGroup non determinano dove si collega il driver minifilter nello stack di istanze del minifiltro. L'altitudine specificata per l'istanza del minifiltro determina invece la posizione.
La voce ErrorControl specifica l'azione da eseguire se il servizio non viene avviato durante l'avvio del sistema. I driver minifiltro devono specificare il valore 1 (SERVICE_ERROR_NORMAL). Per altre informazioni sulla voce ErrorControl , vedere Direttiva INF AddService.
La direttiva AddReg fa riferimento a una o più sezioni addRegistry definite dal writer INF che contengono informazioni da archiviare nel Registro di sistema per il servizio appena installato. I driver minifiltro usano sezioni AddRegistry per definire le istanze del driver minifiltro e per specificare un'istanza predefinita.
La voce Dipendenze specifica i nomi di qualsiasi servizio o gruppo di ordini di carico da cui dipende il driver. Tutti i driver minifiltro devono specificare FltMgr, ovvero il nome del servizio della gestione filtri.
Sezione AddRegistry (obbligatorio)
La sezione AddRegistry aggiunge chiavi e valori al Registro di sistema. I driver minifiltro usano una sezione AddRegistry per definire le istanze del minifiltro e specificare un'istanza predefinita. Queste informazioni vengono usate ogni volta che il gestore filtri crea una nuova istanza per il driver minifiltro.
Nel driver di esempio MiniSpy, la sezione AddRegistry seguente, definisce tre istanze, una delle quali è denominata come istanza predefinita del driver di esempio MiniSpy.
Nota
I valori seguenti devono trovarsi nella sottochiave Parametri a partire da Windows 11 versione 24H2.
[Minispy.AddRegistry]
HKR,"Parameters","SupportedFeatures",0x00010001,0x3
HKR,"Parameters\Instances","DefaultInstance",0x00000000,%DefaultInstance%
HKR,"Parameters\Instances\"%Instance1.Name%,"Altitude",0x00000000,%Instance1.Altitude%
HKR,"Parameters\Instances\"%Instance1.Name%,"Flags",0x00010001,%Instance1.Flags%
HKR,"Parameters\Instances\"%Instance2.Name%,"Altitude",0x00000000,%Instance2.Altitude%
HKR,"Parameters\Instances\"%Instance2.Name%,"Flags",0x00010001,%Instance2.Flags%
HKR,"Parameters\Instances\"%Instance3.Name%,"Altitude",0x00000000,%Instance3.Altitude%
HKR,"Parameters\Instances\"%Instance3.Name%,"Flags",0x00010001,%Instance3.Flags%
Sezione Strings (obbligatorio)
La sezione Strings definisce ogni token %strkey% usato nel file INF.
È possibile creare un singolo file INF internazionale creando stringhe aggiuntive specifiche delle impostazioni locali.Sezioni LanguageID nel file INF. Per altre informazioni sui file INF internazionali, vedere Creating International INF Files.For more information about international INF files, see Creating International INF Files.
Nell'esempio di codice seguente viene illustrata una sezione Strings tipica.
[Strings]
Msft = "Microsoft Corporation"
MinispyServiceDesc = "Minispy mini-filter driver"
MinispyServiceName = "Minispy"
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
Sezioni DefaultUninstall e DefaultUninstall.Services
Nota
Le sezioni DefaultUninstall e DefaultUninstall.Services non sono consentite (ad eccezione) a partire da Windows 10 versione 1903.
In Windows 10 prima della versione 1903, le sezioni DefaultUninstall e DefaultUninstall.Services erano facoltative, ma consigliate se il driver potrebbe essere disinstallato:
- DefaultUninstall contiene direttive DelFiles e DelReg per rimuovere file e voci del Registro di sistema.
- DefaultUninstall.Services conteneva direttive DelService per rimuovere i servizi del driver minifiltro. La direttiva DelService ha sempre specificato il flag di SPSVCINST_STOPSERVICE (0x00000200) per arrestare il servizio prima dell'eliminazione.
L'esempio seguente mostra le sezioni predefinite DefaultUninstall e DefaultUninstall.Services precedenti a Windows 10, versione 1903.
[DefaultUninstall.NTamd64]
DelFiles = Minispy.DriverFiles, Minispy.UserFiles
DelReg = Minispy.DelRegistry
[DefaultUninstall.NTamd64.Services]
DelService = Minispy,0x200