Compartir vía


Migración de un INF para seguir el aislamiento del paquete de controladores

Este artículo está pensado para ser una guía de consulta rápida para ayudarle a actualizar un archivo INF para seguir el aislamiento del paquete de controladores como parte de la actualización del paquete de controladores para que sea un controlador de Windows. En las secciones siguientes se proporcionan ejemplos de algunas de las cosas más comunes que puede tener en el archivo INF del paquete de controladores con referencias a información sobre cómo actualizarlos para que sean compatibles con el aislamiento del paquete de controladores. Si el paquete de controladores necesita admitir la forma antigua de hacer algo para versiones anteriores del sistema operativo mientras usa la nueva forma en las versiones más recientes del sistema operativo, consulte Combinación de extensiones de plataforma con versiones de sistema operativo para obtener información sobre cómo hacerlo en un INF.

DestinationDirs no es DIRID 13

Si la sección DestinationDirs especifica un destino para los archivos que no es DIRID 13, el INF no es compatible con el aislamiento del paquete de controladores. Todos los archivos del paquete de controladores deben ejecutarse desde el almacén de controladores, lo que significa usar DIRID 13. Esto puede requerir actualizaciones no solo en la sección DestinationDirs. Otras operaciones realizadas por el INF que hacen referencia a los archivos cargados por el INF también pueden necesitar actualizarse. Por ejemplo, puede que tenga que actualizar la directiva ServiceBinary en una sección de instalación de servicio a la que hace referencia una directiva AddService o un valor del Registro escrito por una directiva AddReg. En general, la ejecución desde el almacén de controladores es compatible con Windows 10 1709 y versiones posteriores de Windows, pero es posible que algunas pilas de dispositivos no admitan archivos que se conecten a esas pilas que se ejecutan desde el almacén de controladores hasta una versión posterior. Para más información, consulte Ejecución desde el almacén de controladores.

Uso de AddReg para registrar proveedores ETW y canales de EventLog

Si el INF usa una directiva AddReg para registrar un proveedor ETW y canales de EventLog, el INF no es compatible con el aislamiento del paquete de controladores. Por ejemplo, el INF:

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

En lugar de usar un AddReg para registrar proveedores ETW y canales de EventLog, debe registrarse mediante una directiva AddEventProvider de una sección DDInstall.Events. Por ejemplo:

[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

El uso de una directiva AddEventProvider de una sección DDInstall.Events es compatible con Windows 10 1809 y versiones posteriores de Windows.

Uso de AddReg para registrar un registrador automático

Si el INF usa una directiva AddReg para registrar o modificar un registrador automático ETW, el INF no es compatible con el aislamiento del paquete de controladores. Por ejemplo, el INF:

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

En lugar de usar AddReg para registrar o actualizar un registrador automático, se debe registrar o actualizar mediante una directiva AddAutoLogger o UpdateAutoLogger de una sección DDInstall.Events. Por ejemplo:

[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

El uso de una directiva AddAutoLogger o UpdateAutoLogger de una sección DDInstall.Events se admite en Windows 11 y versiones posteriores de Windows.

Uso de AddReg para agregar una entrada a la clave RunOnce

Si el INF usa una directiva AddReg para agregar una entrada a la clave RunOnce, el INF no es compatible con el aislamiento del paquete de controladores. Por ejemplo, el INF:

[ExampleDDInstall]
AddReg = Example_Registry

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

No se admite. Un INF no debe modificar las entradas del Registro global. Si se necesita una acción de instalación única cuando se instala el paquete de controladores, puede usar una directiva AddSoftware desde dentro de un archivo INF de componentes para iniciarla. Esto solo es para acciones no críticas. La funcionalidad crítica para el dispositivo o los dispositivos instalados con este paquete de controladores no debe depender de las acciones que se ejecutan que son externas a la instalación del dispositivo.

Uso de AddReg para agregar una entrada a la clave de ejecución

Si el INF usa una directiva AddReg para agregar una entrada a la clave de ejecución, el INF no es compatible con el aislamiento del paquete de controladores. Por ejemplo, el INF:

[ExampleDDInstall]
AddReg = Example_Registry

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

No se admite. Un INF no debe modificar las entradas del Registro global. Si la entrada de ejecución consiste en agregar valor de software al sistema, la aplicación debe ser una aplicación de Plataforma universal de Windows e instalarse mediante una directiva AddSoftware de una sección DDInstall.Software. Para obtener más información, consulte Emparejamiento de un controlador con una aplicación de Plataforma universal de Windows (UWP). Si este software es un servicio que no necesita presentar ninguna interfaz de usuario, se puede registrar un servicio Win32 desde el paquete de controladores con una directiva AddService. Al registrar un servicio asociado a un dispositivo, el servicio solo debe ejecutarse cuando el dispositivo esté presente. El servicio debe tener un tipo de inicio de "inicio a demanda" y debe usar una directiva AddTrigger de la sección de instalación del servicio para configurar los desencadenadores que harán que el servicio se inicie cuando el dispositivo esté presente en el sistema. Para ello, se identifica una interfaz de dispositivo que el controlador del dispositivo expondrá y se usa la directiva AddTrigger para especificar que el servicio debe iniciarse cuando aparezca ese hardware. En tiempo de ejecución, el servicio debe supervisar la salida del dispositivo. Si el dispositivo se quita del sistema para que el servicio no tenga que seguir ejecutándose, el servicio debe detenerse. Para registrarse para recibir notificaciones de llegada y eliminaciones de la interfaz de dispositivo, consulte CM_Register_Notification.

Uso de CopyFiles para agregar archivos a los directorios de "Archivos de programa"

Si el INF usa una directiva CopyFiles para agregar archivos a los directorios de "Archivos de programa", el INF no es compatible con el aislamiento del paquete de controladores. Esto incluye, entre otros, el uso de los DIRID 16422, 16426, 16427 y 16428. Por ejemplo, el INF:

[DestinationDirs]
Example_CopyFiles = 16422, Contoso

[ExampleDDInstall]
CopyFiles = Example_CopyFiles

[Example_CopyFiles]
ExampleFile.exe

Esto no se admite. Un INF no debe copiar archivos en ubicaciones globales. Los directorios de "Archivos de programa" normalmente se usan para instalar aplicaciones de software, no controladores. Si su objetivo es compilar y proporcionar una aplicación complementaria para el dispositivo que se comunica con el controlador, consulte la Guía de la aplicación de soporte técnico de hardware. Por ejemplo, la aplicación puede ser una aplicación de Plataforma universal de Windows y se puede instalar mediante una directiva AddSoftware desde una sección DDInstall.Software. Para obtener más información, consulte Emparejamiento de un controlador con una aplicación de Plataforma universal de Windows (UWP). Si la entrada CopyFiles no es para agregar una aplicación complementaria al sistema y los archivos deben permanecer como parte del paquete de controladores, deben establecerse con el modo "ejecutar desde el almacén de controladores".

Coinstalador que inicia la interfaz de usuario

Si el INF usa un coinstalador para instalar una aplicación con la que el usuario debe interactuar, el INF no es compatible con el aislamiento del paquete de controladores. Por ejemplo, el INF puede registrar un coinstalador de la siguiente manera:

[ExampleDDInstall.CoInstallers]
CopyFiles = CoInstallerCopyFilesSection
AddReg = Example_CoInstallers_AddReg

[CoInstallerCopyFilesSection]
ExampleCoInstall.dll

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

Para obtener información sobre cómo controlar esta situación, consulte Eliminación de coinstaladores de paquetes de controladores.

Uso de AddReg para modificar un servicio que el INF no agrega

Si el INF usa una directiva AddReg para modificar el estado de un servicio que no agrega una directiva AddService en el INF, el INF no es compatible con el aislamiento del paquete de controladores. Por ejemplo, el INF:

[ExampleDDInstall]
AddReg = Example_Registry

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

No se admite. Un INF solo debe cambiar la configuración de los servicios creados por ese INF y el INF debe quitar este AddReg.

Uso de AddReg para modificar el estado en la raíz de un servicio

Si el INF usa una directiva AddReg para crear claves o valores en la raíz del estado de un servicio, el INF no es compatible con el aislamiento del paquete de controladores. Por ejemplo, el INF:

[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

Para que sea compatible con el aislamiento del paquete de controladores, una directiva AddReg que proporciona claves y valores del Registro de servicio solo puede modificar claves y valores en la subclave de parámetros del servicio.

Si el INF está modificando el estado de servicio intrínseco, como el grupo de órdenes de carga, los desencadenadores de servicio, etc., debe usar las directivas INF integradas para especificar ese estado, tal como se describe en la directiva AddService.

Si el INF está creando o modificando otro estado bajo la raíz del servicio, la configuración debe moverse bajo la subclave de parámetros del servicio y se puede acceder a la subclave de parámetros en tiempo de ejecución con IoOpenDriverRegistryKey mediante un RegKeyType de DriverRegKeyParameters. IoOpenDriverRegistryKey es compatible con Windows 10 1803 y versiones posteriores de Windows.

Uso de AddReg de HKCR para registrar un APO

Si el INF usa una directiva AddReg con una raíz del registro HKCR para registrar un objeto de procesamiento de audio (APO), el INF no es compatible con el aislamiento del paquete de controladores. Por ejemplo, el INF:

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

En su lugar, la información de registro de APO debe estar en una sección a la que hace referencia una directiva AddReg de una sección DDInstall. La raíz del registro HKCR debe cambiarse a una raíz del registro HKR para colocar la configuración en relación con la ubicación de estado del registro de "software" del dispositivo (también conocido como "controlador"). Para obtener más información, consulte Registro de APO para modos y efectos de procesamiento en el archivo INF.

La versión del controlador UMDF es inferior a 2

Si el paquete de controladores carga un controlador de Marco de controladores en modo de usuario (UMDF) que usa una versión de UMDF anterior a la versión 2, no es compatible con "Controladores de Windows". Para obtener más información sobre cómo mover el controlador UMDF a una versión más reciente de UMDF, consulte Migración de un controlador de UMDF 1 a UMDF 2.

Uso de AddReg para agregar un filtro superior o inferior a una pila de dispositivos

Si el INF usa una directiva AddReg para agregar un filtro superior o inferior a una pila de dispositivos, el INF no es compatible con el aislamiento del paquete de controladores. Por ejemplo, el INF:

[ExampleDDInstall.HW]
AddReg = FilterAddReg

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

En su lugar, el filtro debe agregarse a la pila de dispositivos mediante la directiva AddFilter. Por ejemplo:

[ExampleDDInstall.Filters]
AddFilter = ExampleFilterDriver,, ExampleFilterSection

[ExampleFilterSection]
FilterPosition = Upper

Consulte Ordenación del controlador de filtro de dispositivos para obtener más información sobre cómo agregar filtros de dispositivo.

Uso de AddReg para registrar valores de nombre de categoría multimedia

Si el INF usa una directiva AddReg para registrar un valor de nombre de categoría multimedia, el INF no es compatible con el aislamiento del paquete de controladores. Por ejemplo, el INF:

[ExampleDDInstall]
AddReg=MediaCategoryRegistration

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

En lugar de usar AddReg para registrar un nombre de categoría multimedia en la ubicación del registro global, debe registrarse en el estado relativo del dispositivo mediante AddReg de HKR de la sección DDInstall. Por ejemplo:

[ExampleDDInstall]
AddReg=MediaCategoryRegistration

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

El uso del estado relativo del dispositivo para registrar nombres de categoría multimedia es compatible con Windows 10, versión 1809 y versiones posteriores de Windows. Consulte Nombres descriptivos para dispositivos de punto de conexión de audio para obtener más información.

Uso de AddReg para registrar valores de visualización de categoría multimedia

Si el INF usa una directiva AddReg para registrar un valor de visualización de categoría multimedia, el INF no es compatible con el aislamiento del paquete de controladores. Por ejemplo, el INF:

[ExampleDDInstall]
AddReg=MediaCategoryRegistration

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

Este valor no se usa y se debe quitar del INF.

Uso de AddReg para registrar valores DmaSecurity\AllowedBuses

Si el INF usa una directiva AddReg para especificar valores en la clave del Registro HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DmaSecurity\AllowedBuses, significa que el INF no es compatible con el aislamiento del paquete de controladores. Por ejemplo, el INF:

[ExampleDDInstall]
AddReg=DmaSecurityRegistration

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

A partir de Windows 11, versión 24H2, este valor no se usa y debe quitarse del INF. Consulte Requisitos de hardware de cifrado automático de dispositivos BitLocker para obtener más información.