Condividi tramite


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

Questo articolo è destinato a essere una guida di ricerca rapida che consente di aggiornare un file INF per seguire l'isolamento del pacchetto driver come parte dell'aggiornamento del pacchetto driver come driver di 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 sono DIRID 13, INF non è conforme all'isolamento del pacchetto driver. Tutti i file nel pacchetto driver devono essere eseguiti dall'archivio driver, il che significa usare DIRID 13. Questo potrebbe richiedere aggiornamenti a più di una sola sezione DestinationDirs. Potrebbero essere necessarie anche altre operazioni eseguite dall'INF che fanno riferimento ai file di cui è stato eseguito il payload da 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 altre informazioni, vedere Eseguire dall'archivio driver.

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 EventLog, 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, 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 INF usa una direttiva AddReg per aggiungere una voce alla chiave RunOnce, 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 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 in INF viene usata una direttiva AddReg per aggiungere una voce alla chiave Esegui, 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 deve modificare le voci globali del Registro di sistema. Se la voce Esegui consiste nell'aggiungere valore all'aggiunta di software al sistema, l'applicazione deve essere un'applicazione piattaforma UWP (Universal Windows Platform) e installata usando una direttiva AddSoftware da una sezione DDInstall.Software. Per altre informazioni, vedi Associazione di un driver a un'app UWP (piattaforma 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 deve monitorare l'uscita del dispositivo. Se il dispositivo viene rimosso dal sistema in modo che il servizio non debba continuare l'esecuzione, il servizio deve 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 in INF usa una direttiva CopyFiles per aggiungere file alle directory 'Programmi', 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 percorsi globali. Le directory 'Programmi' vengono in genere usate per installare applicazioni software, non driver. Se l'obiettivo è quello di creare e fornire un'applicazione complementare per il dispositivo che comunica con il driver, vedere il materiale sussidiario 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 altre informazioni, vedi Associazione di un driver a un'app UWP (piattaforma UWP (Universal Windows Platform)). Se la voce CopyFiles non consiste nell'aggiungere un'applicazione complementare al sistema e i file devono rimanere come parte del pacchetto driver, devono essere eseguiti dall'archivio driver.

CoInstaller che avvia l'interfaccia utente

Se in INF usa un CoInstaller per installare un'applicazione con cui l'utente deve interagire, 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 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 modifica lo stato intrinseco del servizio, ad esempio il gruppo di ordini di carico, i trigger del servizio e così via, è necessario usare le direttive INF predefinite per specificare tale stato, come descritto nella direttiva AddService.

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 usa una direttiva AddReg con una radice del Registro di sistema HKCR per registrare un oggetto di elaborazione audio , l'INF non è conforme all'isolamento del pacchetto driver. Ad esempio, l'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 inserire le impostazioni relative al percorso dello stato del Registro di sistema "software" del dispositivo (noto 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 esegue il payload di un driver UMDF (User-Mode Driver Framework) che usa una versione UMDF precedente alla versione 2, non è conforme a "Driver windows". 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, 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.

Uso di AddReg per registrare i valori del nome della categoria di supporti

Se l'INF usa una direttiva AddReg per registrare un valore di Nome categoria multimediale, 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 endpoint audio.

Utilizzo di AddReg per registrare i valori di visualizzazione categoria multimediale

Se l'INF usa una direttiva AddReg per registrare un valore di visualizzazione categoria multimediale, 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.

Uso di AddReg per registrare i valori DmaSecurity\Allowed Bus

Se INF usa una direttiva AddReg per specificare i valori nella chiave del HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DmaSecurity\AllowedBuses Registro di sistema, INF non è conforme all'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.