Condividi tramite


Creazione di un file INF per un driver del file system

Questo articolo descrive come creare un file INF per un driver di file system.

Per informazioni sull'installazione e la disinstallazione di un driver di file system tramite un file INF, seguire le linee guida fornite negli articoli seguenti per i driver di filtro del file system legacy:

Informazioni sui file INF del sistema

I servizi installazione di Windows e Device Installer, noti collettivamente come SetupAPI, forniscono le funzioni che controllano l'installazione e il driver di Windows. I file INF controllano il processo di installazione. Per altre informazioni sui file INF, vedere Creare un file INF e Sezioni e direttive dei file INF.

Il file INF di un driver del file system fornisce istruzioni che SetupAPI usa per installarlo. Il file INF specifica i file che devono essere presenti per l'esecuzione del driver e le directory di origine e di destinazione per i file driver. Un file INF contiene anche informazioni di configurazione del driver archiviate in SetupAPI nel Registro di sistema, ad esempio il tipo di avvio del driver e il gruppo di ordini di carico.

È possibile creare un singolo file INF per installare il driver in più versioni del sistema operativo Windows. Per altre informazioni sulla creazione di un file INF, vedere Creazione di file INF per più piattaforme e sistemi operativi ecreazione di file INF internazionali.

A partire dalle versioni a 64 bit di Windows Vista, tutti i componenti in modalità kernel devono essere firmati per caricare ed eseguire. Questo requisito include driver non PnP (Plug and Play), ad esempio driver di file system, driver di filtro legacy e driver minifilter. Per informazioni generali su come firmare i driver, vedere Firma dei driver.

Per queste versioni del sistema operativo Windows, le informazioni seguenti sono rilevanti per i driver del file system.

  • I file INF per i driver non PnP, inclusi i driver del file system, non devono contenere sezioni [Manufacturer] o [Models].

  • Lo strumento da riga di comando SignTool , che si trova nella directory \bin\xx.x.xxxxx.x\SelfSign della directory di installazione di WDK, può essere usato per "incorporare" direttamente un file eseguibile SYS del driver. Per motivi di prestazioni, i driver di avvio devono contenere una firma incorporata.

  • Dato un file INF, lo strumento da riga di comando Inf2Cat può essere usato per creare un file di catalogo (cat) per un pacchetto driver.

  • Con i privilegi di amministratore, un driver non firmato può ancora essere installato nei sistemi basati su x64 a partire da Windows Vista. Tuttavia, il driver non verrà caricato (e quindi eseguito) perché non è firmato.

  • Per informazioni dettagliate sul processo di firma dei driver, incluso il processo di firma dei driver per le versioni a 64 bit di Windows Vista e versioni successive, vedere il documento Kernel-Mode Code Signing Walkthrough.

  • Tutti i componenti in modalità kernel, inclusi gli strumenti di sviluppo in modalità kernel personalizzati, devono essere firmati. Per altre informazioni, vedere Introduzione a Test-Signing).

I file INF non possono essere usati per leggere informazioni dal Registro di sistema o per avviare un'applicazione in modalità utente.

Sezioni in un file INF del driver del file system

Per creare il file INF del driver di file system, usare le seguenti informazioni come guida. È possibile usare lo strumento InfVerif per controllare la sintassi del file INF.

Un file INF per un driver di file system contiene in genere le sezioni seguenti.

Sezione Versione (obbligatorio)

La sezione Version specifica le informazioni sulla versione del driver, come illustrato nell'esempio seguente.

[Version]
Signature   = "$WINDOWS NT$"
Provider    = %Msft%
DriverVer   = 08/28/2000,1.0.0.1
CatalogFile =

Nella tabella seguente vengono illustrati i valori che i driver di filtro del file system devono specificare nella sezione Version.

Ingresso Valore
firma "$WINDOWS NT$"
Provider Nel proprio file INF è necessario specificare un provider diverso da Microsoft.
DriverVer Consultare direttiva INF DriverVer
CatalogFile Vedere Uso di Inf2Cat per creare un file di catalogo

La sezione DestinationDirs specifica le directory in cui copiare i file del driver del file system.

In questa sezione e nella sezione ServiceInstall è possibile specificare directory di sistema note usando valori numerici definiti dal sistema. Per un elenco di questi valori, vedere sezione INF DestinationDirs. Nell'esempio seguente il valore "12" fa riferimento alla directory Drivers (%windir%\system32\drivers).

[DestinationDirs]
DefaultDestDir = 12
ExampleFileSystem.DriverFiles = 12

Sezione SourceDisksNames (obbligatorio)

La sezione SourceDisksNames specifica il supporto di distribuzione da utilizzare.

Nell'esempio seguente la sezione SourceDisksNames elenca un singolo supporto di distribuzione per il driver del file system. L'identificatore univoco per il supporto è 1. Il nome del supporto viene specificato dal token %Disk1%, definito nella sezione Stringhe del file INF.

[SourceDisksNames]
1 = %Disk1%

Sezione SourceDisksFiles (obbligatorio)

La sezione SourceDisksFiles specifica il percorso e i nomi dei file da copiare.

Nell'esempio seguente la sezione SourceDisksFiles elenca il file da copiare per il driver del file system e specifica che i file sono disponibili nel supporto il cui identificatore univoco è 1 (questo identificatore viene definito nella sezione SourceDisksNames del file INF).

[SourceDisksFiles]
examplefilesystem.sys = 1

Sezione DefaultInstall (obbligatorio)

Nella sezione DefaultInstall una direttiva CopyFiles copia i file del driver del file system nella destinazione specificata nella sezione DestinationDirs .

La direttiva CopyFiles non deve fare riferimento al file di catalogo o al file INF stesso; SetupAPI copia automaticamente questi file.

È possibile creare un singolo file INF per installare il driver in più versioni del sistema operativo Windows. Questo tipo di file INF viene creato creando più sezioni DefaultInstall, DefaultInstall.Services, DefaultUninstall e DefaultUninstall.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.

Nell'esempio seguente la direttiva CopyFiles copia i file elencati nella sezione ExampleFileSystem.DriverFiles del file INF.

[DefaultInstall]
OptionDesc = %ServiceDesc%
CopyFiles = ExampleFileSystem.DriverFiles

[ExampleFileSystem.DriverFiles]
examplefilesystem.sys

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.

Nell'esempio di codice seguente, la direttiva AddService aggiunge il servizio file system al sistema operativo. Il token %ServiceName% contiene la stringa del nome del servizio, definita nella sezione Stringhe del file INF. ExampleFileSystem.Service è il nome della sezione ServiceInstall del driver del file system.

[DefaultInstall.Services]
AddService = %ServiceName%,,ExampleFileSystem.Service

Sezione ServiceInstall (obbligatorio)

La sezione ServiceInstall aggiunge sottochiavi o nomi di valore al Registro di sistema e imposta i valori. Il nome della sezione ServiceInstall deve essere visualizzato in una direttiva AddService nella sezione DefaultInstall.Services.

Nell'esempio seguente viene illustrata la sezione ServiceInstall per il driver del file system.

[ExampleFileSystem.Service]
DisplayName    = %ServiceName%
Description    = %ServiceDesc%
ServiceBinary  = %12%\examplefilesystem.sys
ServiceType    = 2 ;    SERVICE_FILE_SYSTEM_DRIVER
StartType      = 1 ;    SERVICE_SYSTEM_START
ErrorControl   = 1 ;    SERVICE_ERROR_NORMAL
LoadOrderGroup = "File System"
AddReg         = ExampleFileSystem.AddRegistry

La voce DisplayName specifica il nome del servizio. Nell'esempio precedente la stringa del nome del servizio viene specificata dal token %ServiceName%, definito nella sezione Stringhe del file INF.

La voce Descrizione specifica una stringa che descrive il servizio. Nell'esempio precedente questa stringa viene specificata dal token %ServiceDesc%, definito nella sezione Strings del file INF.

La voce ServiceBinary specifica il percorso del file eseguibile per il servizio. Nell'esempio precedente il valore 12 fa riferimento alla directory Drivers (%windir%\system32\drivers).

La voce ServiceType specifica il tipo di servizio. Nella tabella seguente sono elencati i valori possibili per ServiceType e i tipi di servizio corrispondenti.

Valore Descrizione
0x00000001 SERVICE_KERNEL_DRIVER (servizio driver del dispositivo)
0x00000002 SERVICE_FILE_SYSTEM_DRIVER (servizio driver filtro file system o file system)
0x00000010 SERVICE_WIN32_OWN_PROCESS (servizio Microsoft Win32 eseguito nel proprio processo)
0x00000020 SERVICE_WIN32_SHARE_PROCESS (servizio Win32 che condivide un processo)

La voce ServiceType deve essere sempre impostata su SERVICE_FILE_SYSTEM_DRIVER per un driver del file system.

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 SERVIZIO_AVVIAMENTO_AUTOMATICO
0x00000003 AVVIO_RICHIESTA_SERVIZIO
0x00000004 SERVIZIO_DISABILITATO

Per descrizioni dettagliate di questi tipi di avvio per determinare quale sia appropriato per il driver del file system, vedere What Determine When a Driver Is Loaded.For detailed description of these start types to determine which one is appropriate for your file system driver driver, see What Determine When a Driver Is Loaded.

A partire dai sistemi Windows Vista basati su x64, il file di immagine binaria di un driver di avvio (un driver con un tipo di inizio di SERVICE_BOOT_START) deve contenere una firma incorporata. Questo requisito garantisce prestazioni ottimali di avvio del sistema. Per altre informazioni, vedere il documento della procedura dettagliata per la firma del codiceKernel-Mode .

Per informazioni su come le voci StartType e LoadOrderGroup determinano quando viene caricato il driver, vedere What Determine When a Driver Is Loaded.

La voce ErrorControl specifica l'azione da eseguire se il servizio non viene avviato durante l'avvio del sistema. Nella tabella seguente sono elencati i valori possibili per ErrorControl e i relativi valori di controllo degli errori.

Valore Descrizione
0x00000000 SERVICE_ERROR_IGNORE (registrare l'errore e continuare l'avvio del sistema).
0x00000001 SERVICE_ERROR_NORMAL (Registrare l'errore, visualizzare un messaggio all'utente e continuare l'avvio del sistema).
0x00000002 SERVICE_ERROR_SEVERE (passare al set di controlli LastKnownGood del Registro di sistema e continuare l'avvio del sistema).
0x00000003 SERVICE_ERROR_CRITICAL (se l'avvio del sistema non usa il set di controlli LastKnownGood del Registro di sistema, passare a LastKnownGood e riprovare. Se l'avvio non riesce, eseguire una routine di controllo dei bug. Solo i driver necessari per l'avvio del sistema devono specificare questo valore nei file INF.

La voce LoadOrderGroup deve essere sempre impostata su "File System" per un driver di file system. Questa impostazione è diversa da quella specificata per un driver filtro file system o un driver minifilter del file system in cui la voce LoadOrderGroup è impostata su uno dei gruppi di ordini di carico del filtro del file system. Per ulteriori informazioni sui gruppi di ordine di caricamento, vedere Load Order Groups for File System Filter Drivers e Load Order Groups and Altitudes for Minifilter Drivers.

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.

Se il file INF verrà usato anche per aggiornare il driver dopo l'installazione iniziale, le voci contenute nella sezione AddRegistry devono specificare il flag 0x00000002 (FLG_ADDREG_NOCLOBBER). Se si specifica questo flag, le voci del Registro di sistema vengono mantenute in HKLM\CurrentControlSet\Services quando vengono installati i file successivi. Per esempio:

[ExampleFileSystem.AddRegistry]
HKR,Parameters,ExampleParameter,0x00010003,1

Sezione DefaultUninstall (facoltativo)

La sezione DefaultUninstall è facoltativa, ma consigliata se il driver può essere disinstallato. Contiene direttive DelFiles e DelReg per rimuovere file e voci del Registro di sistema.

Nell'esempio seguente la direttiva DelFiles rimuove i file elencati nella sezione ExampleFileSystem.DriverFiles del file INF.

[DefaultUninstall]
DelFiles   = ExampleFileSystem.DriverFiles
DelReg     = ExampleFileSystem.DelRegistry

La direttiva DelReg fa riferimento a una o più sezioni delRegistry definite dal writer INF che contengono informazioni da rimuovere dal Registro di sistema per il servizio da disinstallare.

Sezione DefaultUninstall.Services (facoltativo)

La sezione DefaultUninstall.Services è facoltativa, ma consigliata se il driver può essere disinstallato. Contiene direttive DelService per rimuovere i servizi del driver del file system.

Nell'esempio seguente la direttiva DelService rimuove il servizio del driver del file system dal sistema operativo.

[DefaultUninstall.Services]
DelService = %ServiceName%,0x200

La direttiva DelService deve sempre specificare il flag 0x200 (SPSVCINST_STOPSERVICE) per arrestare il servizio prima dell'eliminazione del servizio.

Esistono alcune classi di prodotti file system che non possono essere completamente disinstallati. In questo caso, è sufficiente disinstallare i componenti del prodotto che possono essere disinstallati e lasciare i componenti che non possono essere disinstallati. Un esempio di tale prodotto è la funzionalità Microsoft Single Instance Store (SIS).

Sezione Strings (obbligatorio)

La sezione Strings definisce ogni %strkey% token usato nel file INF.

Ad esempio, il driver del file system definisce le stringhe seguenti nel file INF.

[Strings]
Msft        = "Microsoft Corporation"
ServiceDesc = "Example File System Driver"
ServiceName = "ExampleFileSystem"
ParameterPath = "SYSTEM\CurrentControlSet\Services\ExampleFileSystem\Parameters"
Disk1       = "Example File System Driver CD"

È possibile creare un singolo file INF internazionale creando altre sezioni Stringhe e LanguageID specifiche delle impostazioni locali nel file INF. Per ulteriori informazioni sui file INF internazionali, vedere Creating International INF Files.