Ошибки и предупреждения проверки INF
В этом разделе описываются ошибки установки драйверов и предупреждения, которые могут возникать в результате автоматической проверки INF, выполняемой Microsoft Visual Studio, или при запуске средства InfVerif .
Начиная с Visual Studio 2015 с WDK 10, при сборке драйвера в области Список ошибок могут отображаться следующие ошибки INF-файла. Если вы запускаете InfVerif.exe из командной строки, средство отображает эти ошибки в командной строке или в HTML-версии результатов.
Руководство по ошибкам
InfVerif следует общему правилу, что чем меньше число ошибок, тем серьезнее проблема. Большинство кодов ошибок может быть либо предупреждением, либо ошибкой в зависимости от аргументов, предоставленных в InfVerif.
Обработка ошибок
Чтобы пройти тесты драйверов на панели мониторинга Центра разработки оборудования, необходимо исправить все ошибки. Ошибки связаны со следующими условиями:
- Средство синтаксического анализа INF не может успешно интерпретировать inf
- Синтаксический анализатор INF может интерпретировать INF только путем допущения значения по умолчанию (неоднозначный синтаксис).
- Аргументы Для InfVerif указывают, что набор правил должен применяться к INF (например, Universal)
Хотя вам не нужно исправлять предупреждения перед отправкой драйвера в Центр разработки, рекомендуется упустить время, чтобы понять проблему, о которой сообщается. Если вы не понимаете заданное предупреждение, inf-файл может не всегда вести себя должным образом.
Предупреждения обычно связаны с:
- Синтаксис, который может быть неправильным, но имеет допустимые сценарии, где это уместно
- Синтаксис, допустимый для заданных параметров InfVerif, но является ошибкой в других режимах, таких как универсальный
Проблемы, связанные с параметром Universal, отображаются как ошибки, если:
- В Visual Studio вы создаете драйвер с целевой платформой, настроенной на универсальную или мобильную.
- Запустите InfVerif.exe из командной строки и укажите флаг /u.
Проблемы, связанные с параметром Универсальный, отображаются как предупреждения, если:
- В Visual Studio вы создаете драйвер с целевой платформой Desktop.
- Вы запускаете InfVerif.exe из командной строки и не указываете флаг /u.
Коды ошибок
Коды ошибок представлены в следующих классификациях:
- Синтаксис в INF-файле (1100–1299)
- Universal INF (1300-1319)
- Драйвер Windows (1320–1329)
- Установка (2000–2999)
Не все коды ошибок перечислены ниже, так как многие из них имеют самоочевидные значения. Ошибки в диапазоне 1000–1099 считаются самоочевидными, так как это основные синтаксические ошибки.
Синтаксис в INF-файле (1100–1299)
Хотя сбой InfVerif означает сбой отправки драйвера, установка драйвера может по-прежнему завершиться успешно. Это связано с тем, что при установке драйвера, если в INF-файле присутствуют ошибки, Windows также пытается установить значение по умолчанию для параметра . Windows не завершает установку драйвера из-за ошибок в этом диапазоне, но ошибки в этом диапазоне указывают на то, что поведение может измениться в зависимости от версии ОС или номера SKU. В случаях, когда драйвер успешно устанавливается, эти ошибки указывают на то, что существуют обстоятельства, при которых драйвер может установиться неправильно.
| Код ошибки | Описание |
|---|---|
| 1100: несоответствие имени файла копирования DriverStore | Эта ошибка возникает, когда файл копируется или переименовывается из исходного имени и расположения в хранилище драйверов. Пример: |
[SourceDisksFiles] DriverFile.sys=1,x64[DestinationDirs] CopyFileSection=13,SubDirectory
[CopyFileSection] DriverFile.sys
[MyInstallSection] CopyFiles=driverFile.sys
Эта ошибка возникает из-за того, что директива CopyFiles ожидает имя раздела (указывающее список файлов для копирования). Однако директива CopyFiles может указать имя файла. Чтобы отличить имя раздела от имени файла, перед именем файла следует использовать маркер @, как показано ниже:
[MyInstallSection] CopyFiles=@driverFile.sys
[Version] Signature="$Windows NT$" Class=Sample ClassGuid= Provider="Microsoft"
В этом примере раздел установки A.INF ссылается на эквивалентный раздел установки в B.INF.
A.INF [InstallSectionA] Include = B.INF Needs = InstallSectionB AddReg = AddRegB ; ПРЕДУПРЕЖДЕНИЕ 1220[InstallSectionA.Services] Include = B.INF Needs = InstallSectionB.Services
B.INF [InstallSectionB] AddReg = AddRegB [InstallSectionB.Services] .[AddRegB] .
Директива Needs должна ссылаться на эквивалентный раздел установки для обработки в текущем разделе установки. Например, директива Needs в [InstallSectionA.Services] должна указывать на . Службы другого раздела установки. Директива Needs также может использоваться для включения поведения другого раздела DDInstall того же INF. Использование директивы Needs для других типов разделов может привести к нежелательному поведению.
При использовании HKR значение реестра не будет отображаться до установки устройства.
[SourceDisksFiles] filename=disk id
CatalogFile=wudf.cat
Эта ошибка часто возникает, если в INF-файле указано значение реестра, содержащее переменную среды. Пример:
[MyAddReg] HKR,,DllPath,%SystemRoot%\System32\myDll.sys
Эта строка заставляет синтаксический анализатор INF попытаться найти токен SystemRoot из раздела [Строки], а не предполагаемое поведение при сохранении литерала «%SystemRoot%» в реестре. Чтобы использовать литеральное значение %SystemRoot% вместо замены строки, используйте escape-последовательность %%.
[MyAddReg] HKR,,DllPath,%%SystemRoot%%\System32\myDll.sys
Class = Sample ClassGuid =
Следующее приводит к ошибке 1280, так как ClassGuid хорошо известен, но класс не совпадает:
Class = ContosoDevices ClassGuid =
Следующее приводит к ошибке 1281, так как класс хорошо известен, но ClassGuid не совпадает:
Class = Sample ClassGuid =
Если вы ранее не включали этот раздел, так как у вас не было служб и вы использовали службы драйверов папки «Входящие», может потребоваться создать . Раздел Служб, который ссылается на службу INF папки «Входящие» с помощью инструкции NEEDS и INCLUDES.
Например: INF-файл будет иметь следующий код . Раздел служб для каждого целевого объекта ОС, чтобы устранить эту ошибку.
[XXXXXXXX.Install.NTx86.Services] Include=filename.inf Needs=inf-section-name.Services
Для устройств, для которых не требуется драйвер функции, драйвер NULL можно указать следующим образом:
AddService = ,2
Используйте его только в том случае, если inf устанавливает нефункциональное устройство, чтобы указать, что ему не нужен драйвер.
Например: устройство, которому требуется только драйвер фильтра, а не драйвер функции, будет иметь две директивы AddService:
AddService = MyFilterDriver,, My-Service-Install-Section AddService = ,2
Universal INF (1300–1319)
INF-файл драйвера является универсальным, если вы не получаете никаких ошибок или предупреждений с номером ошибки в диапазоне 1300–1319.
Следующие ошибки и предупреждения связаны с возможностью настройки INF:
| Код ошибки или предупреждения | Описание |
|---|---|
| 1300: найдено устаревшее xxx | Эта ошибка возникает при использовании устаревших разделов или директив, таких как LogConfig или DDInstall.CoInstallers. |
| 1301: обнаружена устаревшаяоперацияXxxXxx | Эта ошибка возникает при использовании устаревших разделов или директив, таких как LogConfig или DDInstall.CoInstallers. |
| 1302: обнаружена устаревшая операция XxxдляXxx | Эта ошибка возникает, когда операция влияет на внешние элементы пакета драйвера, такие как удаление службы или удаление файла. |
| 1303: обнаружена устаревшая операция, определяющая совместные установщики | Ошибка 1303 указывает, что операция AddReg указывает coinstaller. Пример: |
AddReg = HKR,,CoInstallers32,0x00010000,"MyCoinstaller.dll"
Драйвер Windows (1320–1329)
INF-файл драйвера соответствует требованиям драйвера Windows, если вы не получаете никаких ошибок или предупреждений с номером ошибки в диапазоне 132x. Эти требования подробно описаны в документации по требованиям к изоляции драйверов .
Следующие ошибки и предупреждения связаны с требованиями к драйверу Windows:
| Код ошибки или предупреждения | Описание |
|---|---|
| 1320: корневой каталог реестра Xxx не изолирован для HKR | Ошибка 1320 указывает, что операция раздела реестра не соответствует требованиям реестра, определенным в разделе Состояние чтения и записи. |
| 1321: корневой каталог реестра XXX значения Xxx не изолирован для HKR | Ошибка 1321 указывает, что операция со значением реестра не соответствует требованиям реестра, определенным в разделе Состояние чтения и записи. |
| 1322: конечный путь к файлу XXX для файла Xxx не изолирован для DIRID 13 | Ошибка 1322 указывает, что файл копируется в недопустимое место назначения в соответствии с требованиями, определенными в разделе Запуск из хранилища драйверов. |
| 1323: раздел реестра службы Xxx должен находиться в подразделе Параметры. | Ошибка 1323 указывает, что значение реестра службы не задано как HKR в подразделе параметров в соответствии с требованиями, определенными в разделе Состояние реестра служб. |
| 1324: в разделе [Версия] должно быть указано PnpLockdown=1 | Ошибка 1324 указывает, что PnpLockdown не был указан в разделе версии. Эта спецификация приводит к тому, что PNP добавляет дополнительную защиту к двоичным файлам в пакете драйвера, чтобы предотвратить незаконное изменение, и всегда должен указываться в пакетах драйверов. |
Установка (2000–2999)
Проблемы в диапазоне 2000–2999 — это проблемы, зависящие от контекста, например директивы, которые не работают с определенными номерами SKU или версиями продукта, или директива, которая не разрешена в указанном классе устройства.
Это предупреждение указывает, что INF предоставляет устаревший механизм, который будет автоматически заменен на актуальный во время анализа. После установки драйвера содержимое раздела будет заменено применимыми директивами Include/Needs.
Чтобы устранить проблему, используйте директивы Include/Needs в разделе DDInstall и для каждого возможного раздела DDInstall.* для ссылки на соответствующие разделы INF DDInstall для папки «Входящие»*, как показано ниже:
[DDInstall] Include=umpass.inf Needs=UmPass ; также включить все существующие директивы DDInstall.[DDInstall.HW] Include=umpass.inf Needs=UmPass.HW ; также включить все существующие директивы DDInstall.HW.
[DDInstall.Interfaces] Include=umpass.inf Needs=UmPass.Interfaces ; также включают все существующие директивы DDInstall.Interfaces.
[DDInstall.Services] Include=umpass.inf Needs=UmPass.Services ; also include any existing any DDInstall.Services directives
[InstallSection.LogConfigOverride] LogConfig=LogConfigSection .
[Изготовитель] %MfgName% = InstallSection[InstallSection] .
При установке драйвера предыдущий синтаксис INF по умолчанию имеет значение x86.
Вместо этого объявите все поддерживаемые архитектуры и укажите соответствующий раздел установки для каждой из них:
[Изготовитель] %MfgName% = InstallSection, NTX86, NTAMD64[InstallSection.NTAMD64] .
[InstallSection.NTX86] .
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Windows driver documentation
Ошибка установки драйвера «Выбранный INF-файл не поддерживает этот метод установки»
Известно, что драйвера устройств могут быть установлены разными способами. Большая часть драйверов устанавливается как обычные программы, то есть запуском исполняемого файла EXE , но есть также и драйвера, которые не используют этот тип контейнера, и в таких случаях их установка выполняется через конфигурационный файл INF . Всё просто, пользователь кликает ПКМ по INF -файлу и выбирает в меню опцию «Установить».
Но представьте себе ситуацию, когда при попытке установить таким образом драйвер вы получаете ошибку «Выбранный INF-файл не поддерживает этот метод установки» .

В чём может быть причина данной ошибки и как её устранить?
Несовместимость с разрядностью системы
С подобной проблемой вы можете столкнуться при попытке установить драйвер, несовместимый с разрядностью ОС. Если вы скачали драйвер с официального или стороннего сайта, убедитесь, что он совместим с вашей версией системы. Если вы не знаете разрядность вашей ОС, откройте командой msinfo32 утилиту “Сведения о системе” и посмотрите значение опции «Тип».

«Компьютер на базе x86» будет означать, что система 32 -разрядная, значение «Компьютер на базе x64» укажет, что система 64 -разрядная.
Конфигурационный INF-файл не имеет раздела DefaultInstall
Другой распространенной причиной ошибки является отсутствие в INF -файле таких разделов как DefaultInstall или DefaultInstall.Service. Убедиться в их наличие или отсутствие не составляет труда, нужно просто открыть INF -файл и изучить его содержимое, вернее, проверить заголовки в квадратных скобках.

Но отсутствие указанных разделов ещё не означает, что установить драйвер нельзя в принципе.
Для установки драйверов с такими INF -файлами следует использовать диспетчер устройств, только нужно знать, какому устройству принадлежит драйвер .
Откройте диспетчер устройств, выберите нужное устройство, кликните по нему правой кнопкой мыши и выберите «Обновить драйвер».

Далее идем по цепочке этих опций:





Драйвер может быть установлен только через командную строку
Если установить драйвер с помощью диспетчера устройств не удалось, для его инсталляции следует воспользоваться командной строкой, возможно, драйвер поддерживает только такой метод установки.
Запустите классическую командную строку с повышенными привилегиями и выполните в ней следующую команду:
rundll32 syssetup,SetupInfObjectInstallAction DefaultInstall 128 "Путь к файлу INF"

Вариант, приведенный последним, как и использование консольной утилиты PNPUTIL – это альтернатива, обычно драйвер удается благополучно установить через Диспетчер устройств.
Недопустимый inf файл передан как параметр
Сообщения: 27
Благодарности: 0
| Конфигурация компьютера | |
| Процессор: Intel(R)_Core(TM)_i7-3630QM_CPU_@_2.40GHz | |
| ОС: Windows 8 64 | |
| Индекс производительности Windows: 5,9 |
Автор: 0neTwo
Дата: 15-12-2012
Изображения
Купил недавно ноут и заметил,что он не видит флешку. Много гуглил,ничего из советов не подошло
Опишу что происходит:
Вставляю флешку,слышу звук подключени «ту ду ду». но реакции нет вообще никакой. В моем компьютере так же ничего не появляется.
Реакцию можно заметить только в Диспетчере устройств. В разделе «Дисковые устройства» появляется silicon -power USB Device. На значке виднеется восклицательный знак
Если проверить состояние,то видно:
Не удалось загрузить драйвер этого устройства. Возможно, драйвер поврежден или отсутствует. (Код 39)
Не удалось загрузить драйвер устройства %hs.
Код ошибки 0x%x
Мои действия:
-Пробывал вставлять 3 флешки разных размеров и от разных производителей в разные USB (от всех один и тот же результат,неудачный)
-Мышь себя чувствует в любой USB отлично. iPhone подключается и распознается тоже без проблем. Так же пробовал подключать внешний сидюк,работает.
-Искал параметры LowerFilters и UpperFilters в разделе реестра
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\ (не нашел)
-Удалял в Диспетчере устройств все Контроллеры USB (драйвера поставились автоматически снова,результат тот же)
-Пробывал программу MK Quick Fix (она заглючила и зависла со словами «Working. «странная программа,не советую)
Вроде все. мож че забыл
-букву флешки поменять не могу,т.к не её не видно
Ах да. винда стоит 8.Использую ноутбук acer aspire V3-571G (если это имеет значение)
INF-файл не поддерживает этот метод установки
Чем современнее становятся операционные системы, тем реже приходится сталкиваться с проблемами при установке драйверов. Конечно, при условии что оборудование и драйвера свежие и от производителя. Однако, иногда бывает и такое. В этой небольшой заметке я покажу, как иногда можно установить драйвера, если они не хотят устанавливаться.
Решение каких-то проблем с установкой оборудования, драйверов, совместимости и тому подобного – это, скажем так, не совсем мой профиль. Я занимаюсь программированием, а иногда (чаще всего вынужденно) системным администрированием. Но иногда приходится помогать решать задачи и не по основному профилю.
Написал мне один давний заказчик письмо примерно такого содержания:
Не могу установить драйвер на принтер CP-D707DW. Система win 7 х 64. Причем драйвер, скачанный с сайта официального производителя. Экзешника в архиве нет. А inf файл пишет, что не поддерживает данного метода установки. Можно ли подправить inf файл, чтобы он стал поддерживать этот самый метод установки?
Файлы inf – это обычные текстовые файлы; они легко правятся в любом текстовом редакторе. Но чтобы их править, придется узнать, а что именно надо править? Что там прописать, чтобы поддерживался метод установки?
Для начала я просто решил попробовать установить этот драйвер у себя, благо семерка и такой же разрядности в наличии имеется. Скачал драйвер и… а нет принтера такого. Ну что ж, открываем «Устройства и принтеры» (Панель управления\Оборудование и звук\Устройства и принтеры). Затем щелкаем правой кнопкой мыши, и выбраем «Добавить принтер» — там указываем путь к папке с драйвером.
Немного ждем, пока устанавливается. И видим интересную картину:

Как видите, драйвер установился и никак не заругался на файл inf. Какой можно сделать вывод? А такой, что иногда драйвера можно ставить даже без устройства – через панель управления.
P.S. Кстати, у заказчика тоже все заработало после установки таким способом.

Автор этого материала — я — Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML — то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.