Portage d’un fichier INF pour suivre l’isolation du package de pilotes

Cet article est conçu comme un guide de référence rapide pour vous aider à mettre à jour un fichier INF afin de suivre l’isolation du package de pilotes dans le cadre de la mise à jour de votre package de pilotes pour être un pilote Windows. Les sections suivantes fournissent des exemples de ce que vous pouvez couramment rencontrer dans votre fichier INF de package de pilotes avec des informations sur la manière de les mettre à jour pour qu’ils soient conformes à l’isolation du package de pilotes. Si votre package de pilotes doit prendre en charge l’ancienne méthode de réalisation d’une tâche pour les anciennes versions du système d’exploitation tout en utilisant la nouvelle méthode pour les nouvelles versions du système d’exploitation, veuillez consulter la rubrique Combinaison des extensions de plateforme avec les versions du système d’exploitation pour savoir comment y parvenir dans un fichier INF.

DestinationDirs n’est pas DIRID 13

Si votre section DestinationDirs spécifie une destination pour les fichiers autre que DIRID 13, alors le fichier INF n’est pas conforme à l’isolation du package de pilotes. Tous les fichiers du package de pilotes doivent être exécutés à partir du magasin de pilotes, ce qui signifie l’utilisation de DIRID 13. Cela peut nécessiter des mises à jour non seulement de la section DestinationDirs. D’autres opérations effectuées par le fichier INF qui font référence à des fichiers chargés par le fichier INF peuvent également nécessiter une mise à jour. Par exemple, vous devrez peut-être mettre à jour la directive ServiceBinary dans une section d’installation de service référencée par une directive AddService ou une valeur de registre écrite par une directive AddReg. En général, l’exécution à partir du magasin de pilotes est prise en charge sur Windows 10 1709 et les versions ultérieures de Windows, mais certaines piles de périphériques peuvent ne pas prendre en charge les fichiers qui se branchent dans ces piles exécutés à partir du magasin de pilotes avant une version ultérieure. Pour plus d’informations, veuillez consulter la section exécuter à partir du magasin de pilotes.

Utilisation de AddReg pour enregistrer des fournisseurs ETW et des canaux EventLog

Si votre INF utilise une directive AddReg pour enregistrer un fournisseur ETW et des canaux EventLog, alors le INF n’est pas conforme à l’isolation du package de pilotes. Par exemple, votre INF peut contenir :

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

Au lieu d’utiliser un AddReg pour enregistrer des fournisseurs ETW et des canaux EventLog, ils doivent être enregistrés en utilisant une directive AddEventProvider à partir d’une section DDInstall.Events. Par exemple :

[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’utilisation d’une directive AddEventProvider à partir d’une section DDInstall.Events est prise en charge sur Windows 10 1809 et les versions ultérieures de Windows.

Utilisation de AddReg pour enregistrer un AutoLogger

Si votre inf utilise une directive AddReg pour inscrire ou modifier un autologger ETW, l’inf n’est pas conforme à l’isolation du package de pilotes. Par exemple, votre INF peut contenir :

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

Au lieu d’utiliser un AddReg pour enregistrer ou mettre à jour un AutoLogger, il doit être enregistré ou mis à jour en utilisant une directive AddAutoLogger ou UpdateAutoLogger à partir d’une section DDInstall.Events. Par exemple :

[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’utilisation d’une directive AddAutoLogger ou UpdateAutoLogger à partir d’une section DDInstall.Events est prise en charge sur Windows 11 et les versions ultérieures de Windows.

Utilisation de AddReg pour ajouter une entrée à la clé RunOnce

Si votre INF utilise une directive AddReg pour ajouter une entrée à la clé RunOnce, alors le INF n’est pas conforme à l’isolation du package de pilotes. Par exemple, votre INF peut contenir :

[ExampleDDInstall]
AddReg = Example_Registry

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

Cela n’est pas pris en charge. Un INF ne devrait pas modifier les entrées de registre globales. Si une action de configuration ponctuelle est nécessaire lorsque le package de pilotes est installé, vous pouvez utiliser une directive AddSoftware à partir d’un fichier INF de composant pour le lancer. Cela n’est destiné qu’aux actions non critiques. Les fonctionnalités critiques pour le périphérique ou les périphériques installés avec ce package de pilotes ne doivent pas dépendre d’actions qui sont exécutées en dehors de l’installation du périphérique.

Utilisation de AddReg pour ajouter une entrée à la clé Run

Si votre INF utilise une directive AddReg pour ajouter une entrée à la clé Run, alors l’INF n’est pas conforme à l’isolation du package de pilotes. Par exemple, votre INF peut contenir :

[ExampleDDInstall]
AddReg = Example_Registry

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

Cela n’est pas pris en charge. Un INF ne devrait pas modifier les entrées de registre globales. Si l’entrée Run sert à ajouter un logiciel au système, votre application doit être une application Universal Windows Platform et installée à l’aide d’une directive AddSoftware d’une section DDInstall.Software. Pour plus d’informations, voir Associer un pilote à une application Universal Windows Platform (UWP). Si ce logiciel est un service qui n’a pas besoin d’afficher d’interface utilisateur, alors un service Win32 peut être enregistré à partir du package de pilotes avec une directive AddService. Lors de l’enregistrement d’un service associé à un périphérique, le service ne doit être en cours d’exécution que lorsque le périphérique est présent. Le service doit avoir un type de démarrage « démarrage à la demande » et doit utiliser une directive AddTrigger de la section d’installation du service pour configurer les déclencheurs qui démarreront le service lorsque le périphérique sera présent sur le système. Cela se fait en identifiant une interface de périphérique que le pilote sur le périphérique exposera et en utilisant la directive AddTrigger pour spécifier que le service doit être démarré lorsque ce matériel apparaît. Au moment de l’exécution, le service doit surveiller la disparition du périphérique. Si le périphérique est retiré du système et que le service n’a plus besoin de fonctionner, le service doit s’arrêter de lui-même. Pour vous inscrire aux notifications d’arrivée et de suppression de l’interface du périphérique, voir CM_Register_Notification.

Utilisation de CopyFiles pour ajouter des fichiers aux répertoires « Program Files »

Si votre INF utilise une directive CopyFiles pour ajouter des fichiers aux répertoires « Program Files », alors l’INF n’est pas conforme à l’isolation du package de pilotes. Cela inclut, entre autres, l’utilisation des DIRIDs 16422, 16426, 16427 et 16428. Par exemple, votre INF peut contenir :

[DestinationDirs]
Example_CopyFiles = 16422, Contoso

[ExampleDDInstall]
CopyFiles = Example_CopyFiles

[Example_CopyFiles]
ExampleFile.exe

Cela n'est pas pris en charge. Un INF ne doit pas copier de fichiers vers des emplacements globaux. Les répertoires « Program Files » sont généralement utilisés pour installer des applications logicielles, et non des pilotes. Si votre objectif est de créer et fournir une application complémentaire pour votre périphérique qui communique avec votre pilote, consultez les directives de prise en charge matérielle de l’application. Par exemple, votre application peut être une application Universal Windows Platform et installée à l’aide d’une directive AddSoftware d’une section DDInstall.Software. Consultez Associer un pilote à une application Universal Windows Platform (UWP) pour plus d’informations. Si l’entrée CopyFiles n’a pas pour but d’ajouter une application complémentaire au système et que les fichiers doivent rester partie du package de pilotes, ils doivent être configurés pour être « exécutés à partir du magasin de pilotes ».

CoInstaller qui lance une interface utilisateur

Si votre INF utilise un CoInstaller pour installer une application avec laquelle l’utilisateur doit interagir, alors l’INF n’est pas conforme à l’isolation du package de pilotes. Par exemple, votre INF peut enregistrer un CoInstaller comme ceci :

[ExampleDDInstall.CoInstallers]
CopyFiles = CoInstallerCopyFilesSection
AddReg = Example_CoInstallers_AddReg

[CoInstallerCopyFilesSection]
ExampleCoInstall.dll

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

Pour des informations sur la manière de gérer cette situation, voir Supprimer les Co-installateurs des packages de pilotes.

Utilisation de AddReg pour modifier un service qui n’est pas ajouté par l’INF

Si votre INF utilise une directive AddReg pour modifier l’état d’un service qui n’est pas ajouté par une directive AddService dans votre INF, alors l’INF n’est pas conforme à l’isolation du package de pilotes. Par exemple, votre INF peut contenir :

[ExampleDDInstall]
AddReg = Example_Registry

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

Cela n’est pas pris en charge. Un INF ne doit modifier que les paramètres des services créés par cet INF et l’INF doit supprimer ce AddReg.

Utilisation de AddReg pour modifier l’état dans la racine d’un service

Si votre INF utilise une directive AddReg pour créer des clés ou des valeurs dans la racine de l’état d’un service, alors l’INF n’est pas conforme à l’isolation du package de pilotes. Par exemple, votre INF peut contenir :

[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

Pour être conforme à l’isolation du package de pilotes, une directive AddReg fournissant des clés et des valeurs de registre de service ne peut modifier que des clés et des valeurs sous la sous-clé Parameters du service.

Si votre INF modifie l’état intrinsèque du service tel que le groupe d’ordre de chargement, les déclencheurs de service, etc., alors vous devez utiliser les directives INF intégrées pour spécifier cet état comme décrit à Directive AddService.

Si votre INF crée ou modifie d’autres états sous la racine du service, les paramètres doivent être déplacés sous la sous-clé Parameters du service et la sous-clé Parameters peut être accédée au moment de l’exécution avec IoOpenDriverRegistryKey en utilisant un RegKeyType de DriverRegKeyParameters. IoOpenDriverRegistryKey est pris en charge sur Windows 10 1803 et les versions ultérieures de Windows.

Utilisation de AddReg HKCR pour enregistrer un APO

Si votre INF utilise une directive AddReg avec une racine de registre HKCR pour enregistrer un objet de traitement audio (APO), alors l’INF n’est pas conforme à l’isolation du package de pilotes. Par exemple, votre INF peut contenir :

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

Au lieu de cela, les informations d’enregistrement APO doivent être dans une section référencée par une directive AddReg d’une section DDInstall. La racine de registre HKCR doit être changée en une racine de registre HKR pour placer les paramètres par rapport à l’emplacement de l’état du « logiciel » du périphérique (également connu sous le nom de « pilote »). Pour plus d’informations, voir Inscrire des APO pour les modes de traitement et les effets dans le fichier INF.

Version du pilote UMDF inférieure à 2

Si votre package de pilotes contient un pilote User-Mode Driver Framework (UMDF) utilisant une version UMDF antérieure à la version 2, alors il n’est pas conforme aux « Pilotes Windows ». Pour plus d’informations sur la manière de mettre à jour votre pilote UMDF vers une version UMDF plus récente, voir Porter un pilote de UMDF 1 à UMDF 2.

Utilisation de AddReg pour ajouter un filtre supérieur ou inférieur à une pile de périphériques

Si votre INF utilise une directive AddReg pour ajouter un filtre supérieur ou inférieur à une pile de périphériques, alors l’INF n’est pas conforme à l’isolation du package de pilotes. Par exemple, votre INF peut contenir :

[ExampleDDInstall.HW]
AddReg = FilterAddReg

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

Au lieu de cela, le filtre doit être ajouté à la pile de périphériques en utilisant la directive AddFilter. Par exemple :

[ExampleDDInstall.Filters]
AddFilter = ExampleFilterDriver,, ExampleFilterSection

[ExampleFilterSection]
FilterPosition = Upper

Voir Ordre des pilotes de filtre de périphérique pour plus de détails sur l’ajout de filtres de périphérique.

Utilisation de AddReg pour enregistrer des valeurs de nom de catégorie multimédia

Si votre INF utilise une directive AddReg pour enregistrer une valeur de nom de catégorie multimédia, alors l’INF n’est pas conforme à l’isolation du package de pilotes. Par exemple, votre INF peut contenir :

[ExampleDDInstall]
AddReg=MediaCategoryRegistration

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

Au lieu d’utiliser un AddReg pour enregistrer un nom de catégorie multimédia sous l’emplacement de registre global, ils doivent être enregistrés dans l’état relatif au périphérique en utilisant un AddReg HKR de la section DDInstall. Par exemple :

[ExampleDDInstall]
AddReg=MediaCategoryRegistration

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

L’utilisation de l’état relatif au périphérique pour enregistrer des noms de catégorie multimédia est prise en charge sur Windows 10, version 1809 et les versions ultérieures de Windows. Voir Noms conviviaux pour les périphériques de point de terminaison audio pour plus d’informations.

Utilisation de AddReg pour enregistrer des valeurs d’affichage de catégorie multimédia

Si votre INF utilise une directive AddReg pour enregistrer une valeur d’affichage de catégorie multimédia, alors l’INF n’est pas conforme à l’isolation du package de pilotes. Par exemple, votre INF peut contenir :

[ExampleDDInstall]
AddReg=MediaCategoryRegistration

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

Cette valeur n’est pas utilisée et doit être supprimée de l’INF.

Utilisation de AddReg pour inscrire des valeurs DmaSecurity\AllowedBuses

Si votre INF utilise une directive AddReg pour spécifier des valeurs sous la clé de registre HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DmaSecurity\AllowedBuses, alors l’INF n’est pas conforme à l’isolation du package de pilotes. Par exemple, votre INF peut contenir :

[ExampleDDInstall]
AddReg=DmaSecurityRegistration

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

À partir de Windows 11, version 24H2, cette valeur n’est pas utilisée et doit être supprimée de l’INF. Pour plus d’informations, consultez Exigences matérielles pour le chiffrement automatique des appareils BitLocker.