Поделиться через


Перенос INF для выполнения изоляции пакета драйвера

Эта статья предназначена для быстрого поиска, чтобы помочь вам обновить INF-файл, чтобы следовать изоляции пакета драйвера в рамках обновления пакета драйвера, чтобы он был драйвером Windows. В следующих разделах приведены примеры некоторых распространенных вещей, которые могут возникнуть в INF-файле пакета драйвера, со ссылками на сведения о том, как обновить их, чтобы соответствовать изоляции пакетов драйверов. Если пакет драйверов должен поддерживать старый способ выполнения действий для более старых версий операционной системы при использовании нового способа использования новых версий операционной системы, см . раздел "Объединение расширений платформы с версиями операционной системы" для достижения этого в INF.

DestinationDirs не ЯВЛЯЕТСЯ DIRID 13

Если раздел DestinationDirs указывает место назначения для файлов, не имеющих DIRID 13, то INF-файл не соответствует изоляции пакета драйвера. Все файлы в пакете драйверов должны выполняться из хранилища драйверов, что означает использование DIRID 13. Это может потребовать обновлений, чем только в разделе DestinationDirs. Другие операции, выполняемые INF, ссылающиеся на полезные файлы, загруженные INF, могут также потребовать обновления. Например, может потребоваться обновить директиву ServiceBinary в разделе установки службы, на который ссылается директива AddService или значение реестра, написанное директивой AddReg. Как правило, запуск из Магазина драйверов поддерживается в Windows 10 1709 и более поздних версиях Windows, но некоторые стеки устройств могут не поддерживать файлы, которые подключаются к этим стекам из Хранилища драйверов до последующего выпуска. Дополнительные сведения см. в разделе "Запуск из Хранилища драйверов".

Использование AddReg для регистрации поставщиков ETW и каналов EventLog

Если в INF используется директива AddReg для регистрации поставщика ETW и каналов EventLog, ТО INF не соответствует изоляции пакета драйверов. Например, у вас может быть 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

Вместо использования AddReg для регистрации поставщиков ETW и каналов EventLog они должны быть зарегистрированы с помощью директивы AddEventProvider из раздела DDInstall.Events. Например:

[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

Использование директивы AddEventProvider из раздела DDInstall.Events поддерживается в Windows 10 1809 и более поздних версиях Windows.

Использование AddReg для регистрации автолога

Если в INF используется директива AddReg для регистрации или изменения автолога ETW, ТО INF-файл не соответствует изоляции пакета драйверов. Например, у вас может быть 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

Вместо использования AddReg для регистрации или обновления autoLogger его следует зарегистрировать или обновить с помощью директивы AddAutoLogger или UpdateAutoLogger из раздела DDInstall.Events. Например:

[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

Использование директивы AddAutoLogger или UpdateAutoLogger из раздела DDInstall.Events поддерживается в Windows 11 и более поздних версиях Windows.

Добавление записи в ключ RunOnce с помощью AddReg

Если в INF используется директива AddReg для добавления записи в ключ RunOnce, ТО INF не соответствует изоляции пакета драйверов. Например, у вас может быть inf:

[ExampleDDInstall]
AddReg = Example_Registry

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

Это не поддерживается. INF-файл не должен изменять записи глобального реестра. Если при установке пакета драйвера требуется однократное действие установки, можно использовать директиву AddSoftware из inf-файла компонента для его запуска. Это только для некритических действий. Критически важные функциональные возможности для устройства или устройств, установленных с этим пакетом драйверов, не должны зависеть от выполняемых действий, которые являются внешними для установки устройства.

Добавление записи в ключ выполнения с помощью AddReg

Если в INF используется директива AddReg для добавления записи в ключ выполнения, ТО INF не соответствует изоляции пакета драйвера. Например, у вас может быть inf:

[ExampleDDInstall]
AddReg = Example_Registry

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

Это не поддерживается. INF-файл не должен изменять записи глобального реестра. Если запись run заключается в добавлении программного обеспечения для добавления ценности в систему, приложение должно быть приложением универсальная платформа Windows и установлено с помощью директивы AddSoftware из раздела DDInstall.Software. Дополнительные сведения см. в разделе Связывание драйвера с приложением универсальная платформа Windows (UWP). Если это программное обеспечение является службой, которая не требует представления пользовательского интерфейса, служба Win32 может быть зарегистрирована из пакета драйвера с помощью директивы AddService. При регистрации службы, связанной с устройством, служба должна выполняться только при наличии устройства. Служба должна иметь тип запуска "demand start" и должен использовать директиву AddTrigger из раздела установки службы, чтобы настроить триггеры, которые приведут к запуску службы при наличии устройства в системе. Это делается путем идентификации интерфейса устройства, который драйвер на устройстве будет предоставлять и использовать директиву AddTrigger, чтобы указать, что служба должна быть запущена при появлении этого оборудования. Во время выполнения служба должна отслеживать уход устройства. Если устройство удаляется из системы, поэтому службе не нужно продолжать работу, служба должна остановиться. Сведения о регистрации уведомлений о прибытии и удалении интерфейса устройства см . в CM_Register_Notification.

Добавление файлов в каталоги Program Files с помощью CopyFiles

Если в INF используется директива CopyFiles для добавления файлов в каталоги Program Files, ТО INF не соответствует изоляции пакета драйвера. Это включает, но не ограничивается использованием DIRIDs 16422, 16426, 16427 и 16428. Например, у вас может быть inf:

[DestinationDirs]
Example_CopyFiles = 16422, Contoso

[ExampleDDInstall]
CopyFiles = Example_CopyFiles

[Example_CopyFiles]
ExampleFile.exe

Такой способ связывания не поддерживается. INF-файл не должен копировать файлы в глобальные расположения. Каталоги Program Files обычно используются для установки программных приложений, а не драйверов. Если ваша цель состоит в создании и предоставлении приложения-компаньона для устройства, которое взаимодействует с драйвером, ознакомьтесь с руководством по приложению поддержки оборудования. Например, приложение может быть приложением универсальная платформа Windows и установлено с помощью директивы AddSoftware из раздела DDInstall.Software. Дополнительные сведения см. в разделе "Связывание драйвера с приложением универсальная платформа Windows (UWP). Если запись CopyFiles не должна добавлять приложение-компаньон в систему, а файлы должны оставаться в составе пакета драйвера, их необходимо сделать для запуска из Хранилища драйверов.

CoInstaller, запускающий пользовательский интерфейс

Если inf использует CoInstaller для установки приложения, с которым пользователь должен взаимодействовать, INF не соответствует изоляции пакета драйверов. Например, ваш INF может зарегистрировать CoInstaller следующим образом:

[ExampleDDInstall.CoInstallers]
CopyFiles = CoInstallerCopyFilesSection
AddReg = Example_CoInstallers_AddReg

[CoInstallerCopyFilesSection]
ExampleCoInstall.dll

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

Сведения о том, как справиться с этой ситуацией, см. в разделе "Удаление со установщиков" из пакетов драйверов.

Использование AddReg для изменения службы, которая не добавляется INF

Если в INF используется директива AddReg для изменения состояния службы, которая не добавлена директивой AddService в INF, ТО INF не соответствует изоляции пакета драйвера. Например, у вас может быть inf:

[ExampleDDInstall]
AddReg = Example_Registry

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

Это не поддерживается. INF-файл должен изменять только параметры служб, созданных этим INF, и INF-файл должен удалить этот AddReg.

Использование AddReg для изменения состояния в корне службы

Если в INF используется директива AddReg для создания ключей или значений в корне состояния службы, ТО INF не соответствует изоляции пакета драйвера. Например, у вас может быть 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

Чтобы быть совместимым с изоляцией пакетов драйверов, директива AddReg, предоставляющая разделы реестра служб и значения, могут изменять только ключи и значения в подразделе "Параметры службы".

Если inf изменяет внутреннее состояние службы, например группу заказов загрузки, триггеры служб и т. д., необходимо использовать встроенные директивы INF для указания этого состояния, как описано в директиве AddService.

Если inf создает или изменяет другое состояние в корневом каталоге службы, параметры необходимо переместить в подраздел "Параметры службы", а подраздел "Параметры" можно получить во время выполнения с помощью IoOpenDriverRegistryKey с помощью RegKeyType driverRegameters. IoOpenDriverRegistryKey поддерживается в Windows 10 1803 и более поздних версиях Windows.

Использование надстройки HKCR для регистрации APO

Если в INF используется директива AddReg с корнем реестра HKCR для регистрации объекта обработки звука (APO), ТО INF не соответствует изоляции пакета драйвера. Например, у вас может быть 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}"

Вместо этого сведения о регистрации APO должны находиться в разделе, на который ссылается директива AddReg из раздела DDInstall. Корневой каталог реестра HKCR должен быть изменен на корневой каталог реестра HKR, чтобы поместить параметры относительно "программного обеспечения" устройства (также известного как "драйвер") состояния реестра. Дополнительные сведения см. в разделе "Регистрация API для режимов обработки и эффектов" в INF-файле.

Версия драйвера UMDF меньше 2

Если пакет драйвера загружает драйвер среда выполнения платформы драйвера режима пользователя (UMDF), использующий версию UMDF более ранней версии 2, то он не соответствует требованиям "Драйверы Windows". Дополнительные сведения о перемещении драйвера UMDF в более позднюю версию UMDF см. в статье Перенос драйвера из UMDF 1 в UMDF 2.

Добавление верхнего или нижнего фильтра в стек устройств с помощью AddReg

Если в INF используется директива AddReg для добавления верхнего или нижнего фильтра в стек устройств, ТО INF-файл не соответствует изоляции пакета драйвера. Например, у вас может быть inf:

[ExampleDDInstall.HW]
AddReg = FilterAddReg

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

Вместо этого фильтр следует добавить в стек устройств с помощью директивы AddFilter . Например:

[ExampleDDInstall.Filters]
AddFilter = ExampleFilterDriver,, ExampleFilterSection

[ExampleFilterSection]
FilterPosition = Upper

Дополнительные сведения о добавлении фильтров устройств см. в разделе "Порядок драйверов устройств".

Использование AddReg для регистрации значений имени категории мультимедиа

Если в INF используется директива AddReg для регистрации значения имени категории мультимедиа, ТО INF не соответствует изоляции пакета драйвера. Например, у вас может быть inf:

[ExampleDDInstall]
AddReg=MediaCategoryRegistration

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

Вместо использования AddReg для регистрации имени категории мультимедиа в глобальном расположении реестра они должны быть зарегистрированы в относительном состоянии устройства с помощью HKR AddReg из раздела DDInstall. Например:

[ExampleDDInstall]
AddReg=MediaCategoryRegistration

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

Использование относительного состояния устройства для регистрации имен категорий мультимедиа поддерживается в Windows 10 версии 1809 и более поздних версиях Windows. Дополнительные сведения см. в разделе "Понятные имена" для устройств конечной точки аудио.

Использование AddReg для регистрации значений отображения категории мультимедиа

Если в INF используется директива AddReg для регистрации значения отображения категории мультимедиа, ТО INF не соответствует изоляции пакета драйвера. Например, у вас может быть inf:

[ExampleDDInstall]
AddReg=MediaCategoryRegistration

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

Это значение не используется и должно быть удалено из INF.

Использование AddReg для регистрации значений DmaSecurity\AllowedBuses

Если в INF используется директива AddReg для указания значений HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DmaSecurity\AllowedBuses в разделе реестра, ТО INF не соответствует изоляции пакета драйвера. Например, у вас может быть inf:

[ExampleDDInstall]
AddReg=DmaSecurityRegistration

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

Начиная с Windows 11 версии 24H2, это значение не используется и должно быть удалено из INF. Дополнительные сведения см. в статье о требованиях к оборудованию шифрования устройств BitLocker.