Condividi tramite


Conversione di un INF per seguire l'isolamento del pacchetto driver

Questo articolo è pensato per essere una guida di consultazione rapida che ti aiuta ad aggiornare un file INF per conformarsi all'isolamento del pacchetto driver nell'ambito di aggiornamento del tuo pacchetto driver a un Driver Windows. Le sezioni seguenti forniscono esempi di alcune delle cose più comuni che potrebbero essere presenti nel file INF del pacchetto driver con riferimenti a informazioni su come aggiornarli in modo che siano conformi all'isolamento del pacchetto driver. Se il pacchetto driver deve supportare il vecchio modo di fare qualcosa per le versioni precedenti del sistema operativo durante l'uso del nuovo modo nelle versioni più recenti del sistema operativo, vedere Combinazione di estensioni della piattaforma con le versioni del sistema operativo per ottenere tale risultato in un INF.

DestinationDirs non è DIRID 13

Se la sezione DestinationDirs specifica una destinazione per i file che non è DIRID 13, l'INF non è conforme all'isolamento del pacchetto driver. Tutti i file nel pacchetto driver devono essere eseguiti dal Driver Store, il che significa usare DIRID 13. Questo potrebbe richiedere aggiornamenti a più di una sola sezione DestinationDirs. Potrebbero dover essere aggiornate anche altre operazioni eseguite dall'INF che fanno riferimento ai file caricati dall'INF. Ad esempio, potrebbe essere necessario aggiornare la direttiva ServiceBinary in una sezione di installazione del servizio a cui fa riferimento una direttiva AddService o un valore del Registro di sistema scritto da una direttiva AddReg. In generale, l'esecuzione da Driver Store è supportata in Windows 10 1709 e versioni successive di Windows, ma alcuni stack di dispositivi potrebbero non supportare i file che si collegano a tali stack eseguiti dall'Archivio driver fino a una versione successiva. Per ulteriori informazioni, vedere Eseguire dal Driver Store.

Uso di AddReg per registrare provider ETW e canali EventLog

Se l'INF usa una direttiva AddReg per registrare un provider ETW e i canali di EventLog, l'INF non è conforme all'isolamento del pacchetto driver. Ad esempio, l'INF potrebbe avere:

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

Anziché usare un addReg per registrare i provider ETW e i canali EventLog, devono essere registrati usando una direttiva AddEventProvider da una sezione DDInstall.Events. Ad esempio:

[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

L'uso di una direttiva AddEventProvider da una sezione DDInstall.Events è supportato in Windows 10 1809 e versioni successive di Windows.

Uso di AddReg per registrare un autoLogger

Se l'INF usa una direttiva AddReg per registrare o modificare un ETW AutoLogger, allora l'INF non è conforme all'isolamento del pacchetto driver. Ad esempio, l'INF potrebbe avere:

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

Anziché usare un addReg per registrare o aggiornare un autoLogger, deve essere registrato o aggiornato usando una direttiva AddAutoLogger o UpdateAutoLogger da una sezione DDInstall.Events. Ad esempio:

[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

L'uso di una direttiva AddAutoLogger o UpdateAutoLogger da una sezione DDInstall.Events è supportata in Windows 11 e versioni successive di Windows.

Uso di AddReg per aggiungere una voce alla chiave RunOnce

Se il tuo INF utilizza una direttiva AddReg per aggiungere una voce alla chiave RunOnce, allora l'INF non è conforme all'isolamento del pacchetto driver. Ad esempio, l'INF potrebbe avere:

[ExampleDDInstall]
AddReg = Example_Registry

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

Questa operazione non è supportata. Un file INF non deve modificare le voci globali del Registro di sistema. Se è necessaria un'azione di installazione una tantum quando viene installato il pacchetto driver, è possibile usare una direttiva AddSoftware dall'interno di un file INF del componente per avviarlo. Si tratta solo di azioni non critiche. Le funzionalità critiche per il dispositivo o i dispositivi installati con questo pacchetto driver non devono dipendere dalle azioni eseguite esterne all'installazione del dispositivo.

Uso di AddReg per aggiungere una voce alla chiave Esegui

Se il tuo INF utilizza una direttiva AddReg per aggiungere una voce alla chiave Esegui, allora l'INF non è conforme all'isolamento del pacchetto driver. Ad esempio, l'INF potrebbe avere:

[ExampleDDInstall]
AddReg = Example_Registry

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

Questa operazione non è supportata. Un INF non dovrebbe modificare le voci globali del Registro di sistema. Se la voce Esegui serve ad aggiungere software di valore al sistema, l'applicazione dovrebbe essere un'applicazione della piattaforma Universale Windows (UWP) e installata usando una direttiva AddSoftware da una sezione DDInstall.Software. Per ulteriori informazioni, consultare l'associazione di un driver con un'applicazione UWP (Universal Windows Platform). Se questo software è un servizio che non deve presentare alcuna interfaccia utente, un servizio Win32 può essere registrato dal pacchetto driver con una direttiva AddService. Quando si registra un servizio associato a un dispositivo, il servizio deve essere in esecuzione solo quando il dispositivo è presente. Il servizio deve avere un tipo di avvio "demand start" e deve usare una direttiva AddTrigger dalla sezione di installazione del servizio per configurare i trigger che causeranno l'avvio del servizio quando il dispositivo è presente nel sistema. Questa operazione viene eseguita identificando un'interfaccia del dispositivo esposta dal driver nel dispositivo e usando la direttiva AddTrigger per specificare che il servizio deve essere avviato quando viene visualizzato l'hardware. In fase di esecuzione, il servizio dovrebbe monitorare la scomparsa del dispositivo. Se il dispositivo viene rimosso dal sistema in modo che il servizio non debba continuare l'esecuzione, il servizio dovrebbe arrestarsi. Per registrarsi per le notifiche di arrivo e rimozione dell'interfaccia del dispositivo, vedere CM_Register_Notification.

Utilizzo di CopyFiles per aggiungere file alle directory 'Programmi'

Se il tuo INF utilizza una direttiva CopyFiles per aggiungere file alle directory 'Program Files', l'INF non è conforme all'isolamento del pacchetto driver. Sono inclusi, ma non solo, l'utilizzo dei DIRIDs 16422, 16426, 16427 e 16428. Ad esempio, l'INF potrebbe avere:

[DestinationDirs]
Example_CopyFiles = 16422, Contoso

[ExampleDDInstall]
CopyFiles = Example_CopyFiles

[Example_CopyFiles]
ExampleFile.exe

Questo non è supportato. Un INF non deve copiare i file in posizioni globali. Le directory 'Programmi' vengono in genere usate per installare applicazioni software, non driver. Se il tuo obiettivo è creare e fornire un'applicazione complementare per il tuo dispositivo che comunica con il tuo driver, si prega di consultare le linee guida dell'app di supporto hardware. Ad esempio, l'applicazione può essere un'applicazione piattaforma UWP (Universal Windows Platform) e installata usando una direttiva AddSoftware da una sezione DDInstall.Software. Per ulteriori informazioni, vedi Associazione di un driver a un'app UWP. Se la voce CopyFiles non consiste nell'aggiungere un'applicazione complementare al sistema e i file devono rimanere parte del pacchetto driver, devono essere eseguiti dal Driver Store.

CoInstaller che avvia l'interfaccia utente

Se un INF utilizza un CoInstaller per installare un'applicazione con cui l'utente deve interagire, l'INF non è conforme all'isolamento del pacchetto driver. Ad esempio, l'INF può registrare un CoInstaller simile al seguente:

[ExampleDDInstall.CoInstallers]
CopyFiles = CoInstallerCopyFilesSection
AddReg = Example_CoInstallers_AddReg

[CoInstallerCopyFilesSection]
ExampleCoInstall.dll

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

Per informazioni su come gestire questa situazione, vedere Rimozione dei co-programmi di installazione dai pacchetti driver.

Uso di AddReg per modificare un servizio che non viene aggiunto da INF

Se in INF viene usata una direttiva AddReg per modificare lo stato di un servizio che non viene aggiunto da una direttiva AddService in INF, INF non è conforme all'isolamento del pacchetto driver. Ad esempio, l'INF potrebbe avere:

[ExampleDDInstall]
AddReg = Example_Registry

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

Questa operazione non è supportata. Un INF deve modificare solo le impostazioni nei servizi creati da INF e INF deve rimuovere questo elemento AddReg.

Uso di AddReg per modificare lo stato intrinseco di un servizio

Se il tuo INF usa una direttiva AddReg per modificare lo stato intrinseco del servizio, allora l'INF non è conforme all'isolamento del pacchetto driver. Lo stato intrinseco del servizio è lo stato del servizio gestito da Service Control Manager. Ciò include, ma non è limitato a:

  • Nome visualizzato
  • Descrizione
  • Percorso immagine
  • Digitare
  • Tipo di avvio
  • Controllo degli errori
  • Gruppo di ordini di carico
  • Dipendenze
  • Informazioni di sicurezza
  • Privilegi obbligatori
  • Tipo SID
  • Impostazione di avvio automatico ritardato
  • Trigger
  • Azioni in caso di guasto
  • Flag di avvio

Ad esempio, l'INF potrebbe avere:

[ExampleDDInstall.Services]
AddService = ExampleService,0,Example_Service_Inst

[Example_Service_Inst]
DisplayName   = %SvcDesc%
ServiceType   = %SERVICE_WIN32_OWN_PROCESS%
StartType     = %SERVICE_DEMAND_START%
ErrorControl  = %SERVICE_ERROR_NORMAL%
ServiceBinary = %13%\ExampleService.exe
AddReg = Example_Service_Registry

[Example_Service_Registry]
HKR,TriggerInfo\0,Type,0x00010001,0x01
HKR,TriggerInfo\0,Action,0x00010001,0x01
HKR,TriggerInfo\0,Guid,0x00000001,2D,DF,41,BD,DD,AD,C9,4F,A1,94,B9,88,1D,2A,2E,FA
HKR,,ServiceSidType,0x00010001,0x01

Per essere conforme all'isolamento dei pacchetti driver, è necessario usare le direttive INF predefinite per specificare tale stato come descritto in direttiva AddService.

Uso di AddReg per modificare lo stato nella radice di un servizio

Se in INF viene usata una direttiva AddReg per creare chiavi o valori nella radice dello stato di un servizio, INF non è conforme all'isolamento del pacchetto driver. Ad esempio, l'INF potrebbe avere:

[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

Per essere conforme all'isolamento dei pacchetti driver, una direttiva AddReg che fornisce chiavi e valori del Registro di sistema del servizio può modificare solo chiavi e valori nella sottochiave Parameters del servizio.

Se l'INF sta creando o modificando altro stato nella radice del servizio, le impostazioni devono essere spostate nella sottochiave Parameters del servizio e la sottochiave Parameters è accessibile in fase di esecuzione con IoOpenDriverRegistryKey usando un RegKeyType di DriverRegKeyParameters. IoOpenDriverRegistryKey è supportato in Windows 10 1803 e versioni successive di Windows.

Uso di HKCR AddReg per registrare un apo

Se l'INF utilizza una direttiva AddReg con una radice del Registro di sistema HKCR per registrare un oggetto di elaborazione audio (APO), l'INF non è conforme all'isolamento del pacchetto driver. Ad esempio, il tuo INF potrebbe avere:

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

Al contrario, le informazioni di registrazione dell'APO devono trovarsi in una sezione a cui fa riferimento una direttiva AddReg da una sezione DDInstall. La radice del Registro di sistema HKCR deve essere modificata in una radice del Registro di sistema HKR per impostare le configurazioni relative allo stato del Registro di sistema del software del dispositivo (conosciuto anche come "driver"). Per altre informazioni, vedere Registrazione di API per modalità di elaborazione ed effetti nel file INF.

La versione del driver UMDF è minore di 2

Se il pacchetto driver include un payload di un driver UMDF (User-Mode Driver Framework) che usa una versione UMDF precedente alla versione 2, non è conforme a "Windows Drivers". Per altre informazioni su come spostare il driver UMDF in una versione UMDF più recente, vedere Conversione di un driver da UMDF 1 a UMDF 2.

Uso di AddReg per aggiungere un filtro superiore o inferiore a uno stack di dispositivi

Se l'INF usa una direttiva AddReg per aggiungere un filtro superiore o inferiore a uno stack di dispositivi, l'INF non è conforme all'isolamento del pacchetto driver. Ad esempio, l'INF potrebbe avere:

[ExampleDDInstall.HW]
AddReg = FilterAddReg

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

Al contrario, il filtro deve essere aggiunto allo stack di dispositivi usando la direttiva AddFilter . Ad esempio:

[ExampleDDInstall.Filters]
AddFilter = ExampleFilterDriver,, ExampleFilterSection

[ExampleFilterSection]
FilterPosition = Upper

Per altri dettagli sull'aggiunta di filtri dei dispositivi, vedere Ordinamento dei driver di filtro dei dispositivi.

Utilizzo di AddReg per registrare i valori del nome della categoria media

Se l'INF usa una direttiva AddReg per registrare un valore di Nome categoria multimediale, allora l'INF non è conforme all'isolamento del pacchetto driver. Ad esempio, l'INF potrebbe avere:

[ExampleDDInstall]
AddReg=MediaCategoryRegistration

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

Anziché usare addReg per registrare un nome di categoria multimediale nel percorso globale del Registro di sistema, devono essere registrati nello stato relativo del dispositivo usando un addReg HKR dalla sezione DDInstall. Ad esempio:

[ExampleDDInstall]
AddReg=MediaCategoryRegistration

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

L'uso dello stato relativo del dispositivo per registrare i nomi delle categorie multimediali è supportato in Windows 10, versione 1809 e versioni successive di Windows. Per altre informazioni, vedere Nomi descrittivi per i dispositivi audio di endpoint.

Utilizzare AddReg per registrare i valori di visualizzazione della categoria dei media

Se l'INF usa una AddReg directive per registrare un valore di visualizzazione Categoria Multimediale, l'INF non è conforme all'isolamento del pacchetto driver. Ad esempio, l'INF potrebbe avere:

[ExampleDDInstall]
AddReg=MediaCategoryRegistration

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

Questo valore non viene usato e deve essere rimosso da INF.

Utilizzo di AddReg per registrare i valori di DmaSecurity\AllowedBuses

Se il tuo INF utilizza una direttiva AddReg per specificare dei valori nella chiave del Registro di sistema, allora l'INF non è conforme agli standard di isolamento del pacchetto driver. Ad esempio, l'INF potrebbe avere:

[ExampleDDInstall]
AddReg=DmaSecurityRegistration

[DmaSecurityRegistration]
HKLM,SYSTEM\CurrentControlSet\Control\DmaSecurity\AllowedBuses,"Example Friendly Name Description",0,PCI\VEN_ABCD&DEV_0123

A partire da Windows 11 versione 24H2, questo valore non viene usato e deve essere rimosso da INF. Per altre informazioni, vedere Requisiti hardware di crittografia automatica dei dispositivi bitLocker.