Как отредактировать inf файл драйвера
До Windows 10 Windows выбрал один пакет драйверов для установки для данного устройства. Это привело к большим сложным пакетам драйверов, которые включали код для всех сценариев и конфигураций, а каждое дополнительное обновление требовало обновления для всего пакета драйверов. Начиная с Windows 10 можно разделить функциональные возможности INF на несколько компонентов, каждый из которых может обслуживаться независимо. Пакет основного драйвера, установленный на устройстве, теперь называется базовым пакетом драйверов и обрабатывается системой так же, как пакеты драйверов были обработаны до Windows 10. Чтобы расширить функциональные возможности базового пакета драйверов, предоставьте расширение INF в отдельном пакете драйверов. Расширение INF:
- Может предоставляться другой компанией и обновляться независимо от базового INF.
- Использует тот же синтаксис INF, что и базовый INF, но может расширить базовый INF для настройки или специализации.
- Повышает ценность устройства, но не требуется для работы базового пакета драйверов. В отсутствие расширения INF система должна иметь возможность загружать и подключаться к сети только с базовым пакетом драйверов. Устройства ввода, встроенные в систему, такие как клавиатура, должны иметь возможность работать по крайней мере с базовыми функциями без встроенных функций расширения.
- Должен быть универсальным INF-файлом.
На каждом устройстве должен быть установлен один базовый пакет драйвера, с которым может быть связан один или несколько infs расширения. Расширение INF не сможет установить на устройстве, если на устройстве отсутствует базовый пакет драйвера, который также будет установлен на устройстве.
Ниже приведены типичные сценарии, в которых можно использовать inf-расширение:
- Изменение параметров, предоставляемых в базовом пакете драйверов, например настройка понятного имени устройства или изменение параметра конфигурации оборудования.
- Создание одного или нескольких программных компонентов путем указания директивы INF AddComponent и предоставления INF-файла компонента.
- Предоставление параметров, относящихся к модели или форм-фактору системы, которые повышают удобство работы или функциональные возможности устройства, такие как данные калибровки оборудования.
- Добавление драйвера фильтра в стек устройств.
Пример кода для некоторых из этих сценариев можно найти в приведенных ниже примерах. См. также пример пакета драйверов, совместимых с DCH, в котором описывается, как в примере универсального драйвера DCHU используются infs расширения.
Совместная работа пакета расширения INF и базового драйвера
Во время установки устройства параметры расширения INF применяются после параметров в базовом пакете драйверов. В результате, если расширение INF и базовый пакет драйверов задают тот же параметр, применяется версия расширения INF. Аналогичным образом, если пакет базового драйвера изменяется, расширение INF остается и применяется к новому базовому пакету драйверов. Если на одном устройстве установлено несколько infs расширений, то предварительно заданное упорядочение, в котором будут применяться infs расширения, поэтому одно расширение INF не может детерминированно переопределить значения, предоставляемые другим расширением INF. Отдельные infs расширения, предназначенные для одних и того же устройств, не должны пытаться изменить те же параметры.
Полезно включить комментарии в базовый пакет драйверов, описывающий, какие записи можно переопределить расширением INF, а также применимые диапазоны значений и ограничения параметров.
Указание extensionId
При написании расширения INF создается специальный GUID с именем ExtensionId, который является записью в разделе [Версия] INF.
Система определяет возможные infs расширения для конкретного устройства, сопоставляя идентификатор оборудования и совместимые идентификаторы устройства с идентификаторами, указанными в inf расширения в разделе Models , который применяется к этой системе.
Среди всех возможных infs расширений, указывающих одно и то же значение ExtensionId , система выбирает только один для установки и применяет его параметры к базовым пакетам драйверов. Используется дата драйвера и версия драйвера, указанные в INF, для выбора одного INF-файла между несколькими расширениями с одинаковым идентификатором ExtensionId.
Чтобы проиллюстрировать, рассмотрим следующий сценарий, включающий гипотетический устройство, для которого существует три infs расширения:
Значения ExtensionId и отображаются в фигурных скобках, а ранг каждого базового пакета драйвера отображается на лентах баннеров.
Во-первых, система выбирает базовый пакет драйверов с лучшим рейтингом и самой высокой версией.
Также выбирается расширение INF с уникальным значением ExtensionId . Система применяет базовый пакет драйверов для устройства, а затем применяет два расширения INFs для этого устройства.
Обратите внимание, что INF-файлы расширения всегда применяются после базового пакета драйверов, но нет определенного порядка применения infs расширения.
Создание расширения INF
Ниже приведены записи, которые необходимо определить inf как расширение INF.
Укажите эти значения для Class и ClassGuid в разделе Version. Дополнительные сведения о классах установки см. в разделе Системные классы установки устройств, доступные поставщикам.
Укажите запись ExtensionId в разделе [Версия] . Создайте новый GUID для начальной версии INF расширения или повторно используйте последний GUID для последующих обновлений начального расширения INF.
Обратите внимание, что организация может использовать только идентификатор ExtensionID , принадлежащий ему. Сведения о регистрации идентификатора расширения см. в разделе "Управление отправками оборудования" в информационная панель Центра разработки оборудования для Windows.
- При обновлении расширения INF оставьте идентификатор ExtensionId одинаковым и приращение версии и даты, указанной в директиве DriverVer . Для заданного значения ExtensionId PnP выбирает INF с наибольшим значением DriverVer.
Если расширение INF предназначено для Windows 10 S, см. Windows 10 в требованиях к драйверу В режиме S сведения об установке драйверов в этой версии Windows.
В разделе INF Models укажите одно или несколько аппаратных и совместимых идентификаторов, соответствующих идентификаторам целевого устройства. Обратите внимание, что эти аппаратные и совместимые идентификаторы не должны соответствовать идентификаторам базового пакета драйверов. Как правило, расширение INF содержит более конкретный идентификатор оборудования, чем базовый пакет драйверов, с целью дальнейшей специализации конкретной конфигурации драйвера. Например, базовый пакет драйверов может использовать двухкомпонентный идентификатор оборудования PCI, а расширение INF указывает четырехкомпонентный идентификатор оборудования PCI, как показано ниже:
Кроме того, расширение INF может перечислить тот же идентификатор оборудования, что и базовый пакет драйверов, например, если устройство уже очень узко предназначено или если базовый пакет драйверов уже содержит наиболее конкретный идентификатор оборудования.
В некоторых случаях расширение INF может предоставить менее конкретный идентификатор устройства, например совместимый идентификатор, чтобы настроить параметр для более широкого набора устройств.
Целевой объект CHID можно использовать, если четырехкомпонентный идентификатор оборудования невозможен или не является достаточно строгим.
Не определяйте службу с помощью SPSVCINST_ASSOCSERVICE . Расширение INF не может предоставить драйвер функции для устройства. Однако расширение INF может определять другие службы, такие как драйвер фильтра для устройства. Дополнительные сведения об указании служб см. в директиве INF AddService.
В большинстве случаев пакет драйвера INF расширения отправляется в Центр разработки оборудования отдельно от базового пакета драйверов. Примеры упаковки infs расширения, а также ссылки на пример кода см. в примере пакета драйверов, совместимых с DCH.
Процесс проверки и отправки драйверов одинаков для infs расширения, что и для пакетов базовых драйверов. Дополнительные сведения см. в Windows начало работы HLK.
Удаление драйвера расширения
Чтобы удалить пакет драйвера расширения из системы и удалить его с любых устройств, использующих его, используйте команду PnPUtil delete-driver с флагом uninstall . Это позволяет удалить пакет драйверов расширения с устройств без удаления базового пакета драйверов.
Найдите имя oem.inf пакета драйверов для удаления и использования pnputil /delete-driver oem.inf /uninstall .
pnputil /enum-drivers можно использовать для определения соответствующего имени oem.inf.
Пример 1. Использование расширения INF для задания понятного имени устройства
В одном из распространенных сценариев производитель устройства (IHV) предоставляет базовый пакет драйверов, а затем системный построитель (OEM) предоставляет расширение INF, которое дополняет и в некоторых случаях переопределяет конфигурацию и параметры базового пакета драйверов. В следующем фрагменте кода представлен полный inf-файл расширения, в который показано, как задать понятное имя устройства.
Пример 2. Использование расширения INF для установки дополнительного программного обеспечения
Следующий фрагмент кода представляет собой полное расширение INF, которое входит в набор средств установки пакета драйверов для универсальных драйверов. В этом примере для создания компонентов, устанавливающих службу и исполняемый файл, используется директива INF AddComponent . Дополнительные сведения о том, что можно сделать в INF-файле компонента, см. в разделе "Использование INF-файла компонента".
Сведения о доступе к этому файлу в интернете см. в разделе osrfx2_DCHU_extension.inx .
Сведения о том, как использовать расширение INF для установки драйвера фильтра, см. в разделе "Порядок драйверов фильтра устройств".
Чтобы повысить расширяемость, рекомендуется поместить необязательную функциональность IHV в шаблон INF расширения.
обратная совместимость
Любые изменения в базовом пакете драйверов должны быть тщательно протестированы, чтобы убедиться, что он не нарушает обратную совместимость для существующих infs расширения.
При управлении базовым пакетом драйверов следуйте приведенным ниже рекомендациям.
Установка оборудования часто сопровождается трудностями. Больше всего времени занимает поиск драйвера для установки оборудования. В этот этап многие пользователи заходят в тупик – казалось бы, драйвер скачан с официального сайта производителя, но нет, они упорно не хотят устанавливаться.
Все дело в том, что одна и та же модель оборудования (например, веб-камера) на самом деле может быть собрана на совершенно разных микрочипах. А производитель иногда предоставляет программное обеспечение только для одного чипа.
В этом случае выручают драйвера от другого производителя схожего вида компьютерной периферии, или драйвера от производителя серии микросхем, на которых собрано оборудование.
Иногда нужно изменить драйвера под конкретное свое оборудование. Изменение драйвера сводится к редактированию файла сведений (это файлы с расширением *.inf) и последующей установки модернизированного драйвера.
Обычно нужно изменить или дописать только тот раздел файла *.inf, в котором перечисляются Коды экземпляров оборудования, поддерживаемые драйвером. Надо вписать ИД оборудования для своего устройства.
Рассмотрим наглядный пример (реальный случай был рассмотрен на Форуме). На ноутбуке eMachines E728 под Windows XP не устанавливается звуковая карта. Ид оборудования звуковой карты имеет вид:
Код:
HDAUDIO/FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1025049B |
Поиск драйверов именно с точно таким же ИД не дал результатов. Но к счастью имеется драйвер звуковой карты Conexant от ноутбука eMachines D725, который поддерживает звуковые карты, у которых следующие Коды экземпляров:
Код:
HDAUDIO/FUNC_01&VEN_14F1&DEV_5051&SUBSYS_10250214 HDAUDIO/FUNC_01&VEN_14F1&DEV_5051&SUBSYS_10250215 HDAUDIO/FUNC_01&VEN_14F1&DEV_5051&SUBSYS_10250219 HDAUDIO/FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1025021A HDAUDIO/FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1025021C HDAUDIO/FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1025021D HDAUDIO/FUNC_01&VEN_14F1&DEV_5051&SUBSYS_10250253 |
В ИД оборудования очень важна именно первая часть кода VEN_14F1&DEV_5051 , которая определяет производителя чипа и точную модель чипа. Как видно у найденного драйвера она совпадает с кодом звуковой карты.
Как изменить драйвер?
Для редактирования драйвера, все файлы должны быть распакованы в любую папку. Среди распакованных папок и файлов находим файл с расширением *.inf. В нашем случае – это файл WAUHER5a.inf.
Откроем его в обычном Блокноте для редактирования.
В начале файла увидим следующие строчки:
Код:
%HdAudioFunctionDriver.Hermosa5051.DeviceDesc% = HdAudModelSJ,HDAUDIO/FUNC_01&VEN_14F1&DEV_5051& SUBSYS_1025049B |
После этого файл WAUHER5a.inf сохраняем и устанавливаем только что измененный драйвер. Звук заработает!
Точно по такому же принципу можно редактировать драйвера для веб-камеры, видеокарты, модема и так далее. Но помните, что оно не гарантирует вам стопроцентного результата.
Установка оборудования часто сопровождается трудностями. Больше всего времени занимает поиск драйвера для установки оборудования. В этот этап многие пользователи заходят в тупик – казалось бы, драйвер скачан с официального сайта производителя, но нет, они упорно не хотят устанавливаться.
Все дело в том, что одна и та же модель оборудования (например, веб-камера) на самом деле может быть собрана на совершенно разных микрочипах. А производитель иногда предоставляет программное обеспечение только для одного чипа.
В этом случае выручают драйвера от другого производителя схожего вида компьютерной периферии, или драйвера от производителя серии микросхем, на которых собрано оборудование.
Иногда нужно изменить драйвера под конкретное свое оборудование. Изменение драйвера сводится к редактированию файла сведений (это файлы с расширением *.inf) и последующей установки модернизированного драйвера.
Обычно нужно изменить или дописать только тот раздел файла *.inf, в котором перечисляются Коды экземпляров оборудования, поддерживаемые драйвером. Надо вписать ИД оборудования для своего устройства.
Рассмотрим наглядный пример (реальный случай был рассмотрен на Форуме). На ноутбуке eMachines E728 под Windows XP не устанавливается звуковая карта. Ид оборудования звуковой карты имеет вид:
Код:
HDAUDIO/FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1025049B |
Поиск драйверов именно с точно таким же ИД не дал результатов. Но к счастью имеется драйвер звуковой карты Conexant от ноутбука eMachines D725, который поддерживает звуковые карты, у которых следующие Коды экземпляров:
Код:
HDAUDIO/FUNC_01&VEN_14F1&DEV_5051&SUBSYS_10250214 HDAUDIO/FUNC_01&VEN_14F1&DEV_5051&SUBSYS_10250215 HDAUDIO/FUNC_01&VEN_14F1&DEV_5051&SUBSYS_10250219 HDAUDIO/FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1025021A HDAUDIO/FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1025021C HDAUDIO/FUNC_01&VEN_14F1&DEV_5051&SUBSYS_1025021D HDAUDIO/FUNC_01&VEN_14F1&DEV_5051&SUBSYS_10250253 |
В ИД оборудования очень важна именно первая часть кода VEN_14F1&DEV_5051 , которая определяет производителя чипа и точную модель чипа. Как видно у найденного драйвера она совпадает с кодом звуковой карты.
Как изменить драйвер?
Для редактирования драйвера, все файлы должны быть распакованы в любую папку. Среди распакованных папок и файлов находим файл с расширением *.inf. В нашем случае – это файл WAUHER5a.inf.
Откроем его в обычном Блокноте для редактирования.
В начале файла увидим следующие строчки:
Код:
%HdAudioFunctionDriver.Hermosa5051.DeviceDesc% = HdAudModelSJ,HDAUDIO/FUNC_01&VEN_14F1&DEV_5051& SUBSYS_1025049B |
После этого файл WAUHER5a.inf сохраняем и устанавливаем только что измененный драйвер. Звук заработает!
Точно по такому же принципу можно редактировать драйвера для веб-камеры, видеокарты, модема и так далее. Но помните, что оно не гарантирует вам стопроцентного результата.
Добрый день.
Недавно в руки попал ноутбук SONY PCG-61412M (VPCCW1S1E/L) с Windows 7 Home Premium х64. Решил поставить на него новый драйвер для видеокарты NVIDIA GeForce GT M330, так как стоял еще старый от производителя за 28/10/2010.
Скачал последний официальный драйвер, но при установке он мне выдал, что поддерживаемых устройств в системе не найдено. Решил проверить через сайт c помощью автоматического определения устройства в системе, в результате получил приглашение перейти на сайт производителя ноутбука.
Анализ
Прочитав несколько статей кто и как решал эту проблему, наткнулся на утилиту nVidia Mobility Modder Tool. Если её натравить на оригинальный драйвер, то она изменит определенные файлы и добавит устройства от производителей ноутбуков. В моем случае она не помогла бы, так как в списке добавляемых видеокарт моей не было.
Далее наткнулся на сайт, который предоставляет уже измененные свежие драйвера NVIDIA для видеокарт производителей ноутбуков. Достаточно указать идентификатор устройства ( DEV ) и идентификатор поставщика подсистемы ( SUBSYS ) и, возможно, появится список подходящих драйверов. Идентификаторы Вашей видеокарты можно посмотреть в Диспетчере устройств (нажать + R, написать devmgmt.msc и нажать ОК).
[На изображении DEV = 1243 и SUBSYS = 85081043 ]
Затем открыть Cвойства [Properties] видеоадаптера и на вкладке Сведения [Details] посмотреть Код экземпляра устройства [Hardware Ids] ). Мне этот сайт не помог.
Редактирование
На этом мои поиски закончились и я решил просмотреть, какие устройства и их идентификаторы указаны в оригинальном драйвере от Nvidia. Скачал и распаковал последний драйвер версии 310.90. После распаковки драйвера перешел в каталог Display.Driver . Там меня интересует файл, в котором должна содержаться запись [NVIDIA_SetA_Devices.NTamd64.6.1] – для ОС Windows 7, определяющая для какой операционной системы, и запись названия устройства "NVIDIA GeForce GT 330M" . В моём случае это был файл nvtd.inf .
В этом файле есть еще разделы [NVIDIA_SetA_Devices.NTamd64.6.0] – для Windows Vista, [NVIDIA_SetA_Devices.NTamd64.6.2] – для Windows 8.
В конце файла есть раздел [Strings] , в этом разделе ищу название своей видеокарты. Я нашел несколько записей:
NVIDIA_DEV.0A29.FD22.1179 = "NVIDIA GeForce GT 330M"
NVIDIA_DEV.0A29.FD30.1179 = "NVIDIA GeForce GT 330M "
В этих записях можно обнаружить идентификаторы DEV и SUBSYS . Пример, 0A29 – это идентификатор устройства, а FD22.1179 – идентификатор поставщика подсистемы (здесь он разделен точкой, в Диспетчере устройств нет). Я выбрал самую первую запись NVIDIA_DEV.0A29.FD22.1179 = "NVIDIA GeForce GT 330M" .
Для моей видеокарты запись должна выглядеть так
NVIDIA_DEV.1243.8508.1043 = "NVIDIA GeForce GT 330M"
Теперь перехожу в раздел [NVIDIA_SetA_Devices.NTamd64.6.1] и запись %NVIDIA_DEV.0A29.FD22.1179% = Section002, PCI\VEN_10DE&DEV_0A29&SUBSYS_FD221179 меняю на свою
%NVIDIA_DEV.1243.8508.1043% = Section002, PCI\VEN_10DE&DEV_1243&SUBSYS_85081043
Можно изменить существующие записи, а можно и добавить новые. После изменений сохранил файл и установил драйвер.
Есть написанный wdf драйвер, замечательно работающий под Windows 7 x32.
Переткнули железку в более новый компьютер с семёркой x64.
Я перекомпелировал драйвер для этой среды, но при установке ОС х64 сказала, что не нашла подходящих драйверов.
понял, что надо ещё и inf файл переписать.
Вот такой старый:
переделал вот так:
реакция системы осталась прежней.
подскажите пожалуйста, что сделал не так, или что не дописал.
Спасибо.
p.s.
не принципиально, будет ли один .inf на два файла драйверов или для каждого драйвера будет свой inf.
Здравствуйте, smithana, Вы писали:
S>Есть написанный wdf драйвер, замечательно работающий под Windows 7 x32.
S>Переткнули железку в более новый компьютер с семёркой x64.
цифровая подпись нужна
Здравствуйте, redp, Вы писали:
R>цифровая подпись нужна
при загрузке в режиме с отключённой проверкой подписей она не нужна.
нашлась ошибка в тексте:
[AD200Dev.NTamd86]
и справил на
[AD200Dev.NTamd64]
но ничего не поменялось.
Здравствуйте, smithana, Вы писали:
S>Здравствуйте, redp, Вы писали:
R>>цифровая подпись нужна
S>при загрузке в режиме с отключённой проверкой подписей она не нужна.
А может все-же тестовая подпись (тестовым сертификатом) нужна. Проверь.
Здравствуйте, smithana, Вы писали:
S>нашлась ошибка в тексте:
S>[AD200Dev.NTamd86]
S>и справил на
S>[AD200Dev.NTamd64]
S>но ничего не поменялось.
в [Manufacturer] тоже надо
Здравствуйте, Psybot, Вы писали:
P>Здравствуйте, smithana, Вы писали:
S>>нашлась ошибка в тексте:
S>>[AD200Dev.NTamd86]
S>>и справил на
S>>[AD200Dev.NTamd64]
S>>но ничего не поменялось.
P>в [Manufacturer] тоже надо
пардон, не заметил готовый inf )
1. вместо [ClassInstall64] надо [ClassInstall32.ntamd64]
2. вместо [Models.NTx64] — [Models.amd64]
3. если мне не изменяет склероз, то для SERVICE_BOOT_START даже при отключенной
проверке цифровая подпись внедренная в .sys обязательна
Здравствуйте, Psybot, Вы писали:
P>1. вместо [ClassInstall64] надо [ClassInstall32.ntamd64]
P>2. вместо [Models.NTx64] — [Models.amd64]
P>3. если мне не изменяет склероз, то для SERVICE_BOOT_START даже при отключенной
P>проверке цифровая подпись внедренная в .sys обязательна
Спасибо тебе, добрый человек.
система точно также как и в х86 сказала, что не нашла цифровой подписи, и предложила выбор, либо всё равно ставить, либо нет.
Драйвер поставился, но тут же вылетела ошибка, что в данной ОС цифр. подп. обязательна, и удалила драйвер.
А загрузившись в режиме без проверки цифр. подписи, драйвер замечательно встал и заработал.
Подскажите тогда ещё по легализации.
Дорого ли стоит подпись и к кому обращаться, т.к. на наших сайтах обсуждают только как обойти подпись, а на заграничных ничего не нашёл.
только упоминание, что пару лет назад подпись стоитла от 150 до 400 баксов на год.
Подпись даётся только на один драйвер или на компанию и я ей могу сколько угодна драйверов подписывать?
Есть отличия от ЭЦП полученные у GlobalsSign, и от прохождения WHQL?
или ЭЦП одинаковые, но во втором случае я ещё и Certified for Windows получаю?
Читайте также: