Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Эта статья предназначена для быстрого поиска, чтобы помочь вам обновить INF-файл, чтобы обеспечивать изоляцию пакета драйвера в рамках обновления пакета драйвера до уровня Windows-драйвера. В следующих разделах приведены примеры некоторых распространенных вещей, которые могут возникнуть в INF-файле пакета драйвера, со ссылками на сведения о том, как обновить их, чтобы соответствовать изоляции пакетов драйверов. Если пакет драйверов должен поддерживать старый метод для старых версий операционных систем и новый метод для новых версий операционных систем, см. раздел "Объединение расширений платформы с версиями операционной системы" для информации о том, как это можно реализовать в INF.
DestinationDirs не является DIRID 13
Если раздел DestinationDirs указывает место назначения для файлов, не имеющих DIRID 13, то INF-файл не соответствует изоляции пакета драйвера. Все файлы в пакете драйверов должны выполняться из хранилища драйверов, что означает использование DIRID 13. Возможно, потребуется обновить не только раздел DestinationDirs. Другие операции, выполняемые INF и связанные с файлами, содержащимися в нем, могут также потребовать обновления. Например, может потребоваться обновить директиву ServiceBinary в разделе установки службы, на который ссылается директива AddService или значение реестра, написанное директивой AddReg. Как правило, запуск из Магазина драйверов поддерживается в Windows 10 1709 и более поздних версиях Windows, но некоторые стеки устройств могут не поддерживать файлы, которые подключаются к этим стекам из Хранилища драйверов до последующего выпуска. Для получения дополнительной информации см. запуск из хранилища драйверов.
Использование AddReg для регистрации поставщиков ETW и каналов EventLog
Если в INF используется директива AddReg для регистрации поставщика ETW и каналов EventLog, ТО 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 для регистрации AutoLogger
Если файл 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 (UWP) и установлено с помощью директивы 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 не соответствует требованиям изоляции пакетов драйверов. Встроенное состояние службы — это состояние службы, управляемой диспетчером управления службами. Это включает в себя, но не ограничивается следующими:
- Отображаемое имя
- Описание
- Путь к изображению
- Тип
- Тип запуска
- Контроль ошибок
- Группа порядка загрузки
- Зависимости
- Сведения о безопасности
- Необходимые привилегии
- Тип SID
- Параметр автоматического запуска с задержкой
- Триггеры
- Действия при сбое
- Флаги загрузки
Например, в вашем INF может быть:
[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
Чтобы быть совместимым с изоляцией пакетов драйверов, необходимо использовать встроенные директивы INF для указания этого состояния, как описано в директиве AddService.
Использование AddReg для изменения состояния в корне службы
Если ваш INF использует директиву AddReg для создания ключей или значений в корне состояния службы, то 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 создает или изменяет другие состояния в корневом разделе службы, параметры необходимо переместить в подраздел "Параметры" службы, и к подразделу "Параметры" можно получить доступ во время выполнения с помощью IoOpenDriverRegistryKey с использованием типа ключа RegKeyType DriverRegKeyParameters. IoOpenDriverRegistryKey поддерживается в Windows 10 1803 и более поздних версиях Windows.
Использование функции AddReg в разделе HKCR для регистрации APO
Если в INF-файле используется директива AddReg с корнем реестра HKCR для регистрации аудиообрабатывающего объекта (APO), то этот 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 для указания значений в разделе реестра, то этот 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.