Двоичная переменная представляет из себя набор двойных слов (по 4 байта каждое).
Первое слово (выделено на рисунке красной рамкой) задает общую длину переменной (количество двойных слов)
Остальные двойные слова как раз и являются тэгами.
Тэг, равный единице, выделен зеленой рамкой, двойке — синей.
Закономерность тут простая:
Чем левее расположен тэг тем выше его приоритет в группе.
Тем выше приоритет драйвера, у которого такой тэг имеется.
На приведенном выше рисунке видно, что приоритет тэга 01 выше, чем у тэга 02. Самым высоким приоритетом в этой группе обладает тэг 08 (выделен желтой рамкой).
Кстати, в группе драйверов могут встречаться драйвера с одинаковыми тэгами.
Как в таком случае определяется очередность — мне не известно.
Итак.
Условно представим, что у нас есть:
1) драйвер A, принадлежащий группе драйверов Gr1
2) драйвер В, принадлежащий группе драйверов Gr2
3) приоритет Gr1 > Gr2
Из пункта (3) следует, что приоритет драйвера A выше, чем у B, т.е. драйвер A будет загружен раньше драйвера B.
Нам нужно добиться, чтобы драйвер B грузился раньше A.
Возможные варианты (первые два, пришедшие в голову):
1) изменить приоритет групп драйверов в списке ServiceGroupOrder > List
a) либо повысить приоритет Gr2 (сделать выше, чем у Gr1)
b) (зеркальный вариант) либо понизить приоритет Gr1 (сделать ниже, чем у Gr2)
Оба варианта одинаково плохи, особенно, если каждая из групп содержит больше одного драйвера. Ведь не всегда с уверенностью можно сказать, как на такое перемещение отреагируют остальные драйвера группы.
2) переместить один из драйверов в другую группу:
a) переместить драйвер B в группу Gr1 и присвоить ему более приоритетный Tag, чем у драйвера A.
b) (зеркальный вариант) переместить драйвер B в группу Gr2 и присвоить ему менее приоритетный Tag, чем у драйвера A.
ИМХО, самый оптимальный вариант 2a. Ему я и буду следовать на практике.
ПРАКТИКУМ
Настало время перейти к практике.
Как я уже упоминал в самом начале статьи, весь сыр-бор был затеян из-за того, что
драйвера винды определяли IDE-контроллер раньше, чем драйвер WpcrSet успевал изменить его идентификационные регистры, что приводило к некоторым неудобствам.
Как оказалось, под термином »
драйвера винды» скрывался вполне конкретный »
Драйвер PCI шины«. (
Вы, наверное, догадались, что не зря он присутствует почти на всех вышеприведенных скриншотах )
Иначе говоря, возникла острая необходимость в запуске драйвера WpcrSet
раньше
драйвера PCI.
Настройки драйвера PCI:
1. Драйвер принадлежит группе »
Boot Bus Extender«.
2. Параметр
Tag у драйвера равен двум (02h).
Настройки драйвера WpcrSet по-умолчанию:
Видно, что:
1. Драйвер принадлежит группе »
Extended Base«.
2. У драйвера напрочь отсутствует параметр
Tag, что говорит о его наименьшем приоритете даже в пределах родной группы.
На следующем этапе выясняем, приоретет какой группы (Boot Bus Extender / Extended Base) выше:
System Reserved
Boot Bus Extender
System Bus Extender
SCSI miniport
Port
Primary Disk
[...]
NetworkProvider
RemoteValidation
NetDDEGroup
Parallel arbitrator
Extended Base
PCI Configuration
MS Transactions
Видно, что группа
Boot Bus Extender вторая от начала, а
Extended Base — третья с конца. Следовательно приоритет
Boot Bus Extender гораздо выше.
Поэтому первым делом переносим драйвер WpcrSet в группу
Boot Bus Extender. Для этого меняем параметр »
Group» с
Extended Base на
Boot Bus Extender:
Теперь требуется выставить Tag для драйвера WpcrSet. Причем такой, чтобы его приоритет был выше приоритета тэга драйвера PCI (Tag=02h).
Для этого смотрим на содержимое переменной »
Boot Bus Extender» в разделе [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GroupOrderList]
Видно, что приоритет тэгов 01h,06h,07h,09h,0Ah,0Bh,0Ch,0Dh,0Eh,08h выше приоритета тэга 02h. Поэтому в качесве тэга для WpcrSet можно выбрать один из вышеперечисленных. Но не будем жадничать (и рисковать
), возьмем Tag=01h.
-
Note: На практике могла возникнуть ситуация, когда тэг драйвера PCI оказался бы наиболее приоритетным. т.е. самым левым в списке. Тогда перед ним нам пришлось бы добавить еще дополнительный тэг. При этом первое двойное слово в списке, задающее количество тэгов, пришлось бы увеличить на единицу.
Создадим в разделе WpcrSet параметр типа DWORW и занесем в него шестнадцатиричное значение =1:
Ну, вот и все. Настройки WpcrSet теперь выглядят так:
Теперь, перекрестясь
, можно перезагружать компьютер и наблюдать за изменениями.
Note: Искренне надеюсь, что перед тем, как лезть в реестр, вы предварительно забакапились. Ибо еще раз повторяю: я снимаю с себя всю ответственность за то, что вы учините со своим компьютером, начитавшись моих «статей»!
Не знаю, как у Вас, а у меня все прошло просто замечательно. Драйвер WpcrSet стартовал раньше остальных драйверов и сделал свое черное дело точно и главное вовремя
.
Так что на сегодняшний день вопрос о порядке старта драйверов в системе можно считать разрешенным.
Пара слов про старморс
Так что «полуавтоматический способ», описанный в статье
SiliconImage vs. StarForce, стал, наконец, полностью
атоматическим !
Теперь владельцы контроллера на чипе SiliconImage
SiI0680, один раз настроив WpcrSet (забив регистры и изменив порядок старта драйверов) могут надолго забыть о просьбах старморса переставить диск в другой привод! Также они спокойно могут использовать RMPS диски !
Стоят ли эти бонусы времени, затраченного на понимание материала двух статей, решать Вам самим.
-
NOTE: (для ленивых) описанные в статье манипуляции с реестром можно заменить одним REG-файлом следующего содержания:
REGEDIT4
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\WPCRSET]
"Group"="Boot Bus Extender"
"Tag"=dword:00000001
Минусы способа с использованем REG-файла.
В 90% случаев способ с приведенным регфайлом прокатит.
Но никто не гарантирует что:
* у тэга=1 приоритет выше, чем у тэга PCI драйвера;
* что тэг=1 вообще продекларирован в
GroupOrderList.
Так что не забывайте об этих ограничениях.
Регфайл выложил так же в своем файловом архиве, т.е. здесь (0.8Кб)
ЗЫ: Чуть не забыл! Существует хорошая программа для контролирования порядка загрузки драйверов Windows.
Называется она
LoadOrder (17Кб, автор Bryce Cogswell,
сайт)
Так что тем, кто задумает претворить в жизнь описанные в этой статье рекомендации, программа LoadOrder позволит проконтролировать правильность своих действий.
К сожалению, программа не позовляет изменить существующий порядок загрузки, только отобразить. Но и это, согласитесь, уже неплохо.
Короче, рекомендую
За наводку на столь полезную тулзу СПАСИБО все тому же участнику форума
Cuddles! Пользуясь случаем, еще раз выражаю этому человеку, который первым же своим сообщением в форуме помог разрешить серьезную проблему, свой искренний РЕСПЕКТ!.
Обсудить эту и другие статьи/записи с моей персональной страницы можно
в соответствующей ветке конференции.
Все способы:
- Последовательность установки ПО
- Чипсет
- Видеокарта
- Сетевые драйвера (LAN-карта и адаптер Wi-Fi)
- Звуковой чип
- Bluetooth
- Остальное оборудование
- Заключение
- Вопросы и ответы: 1
Обычно новые ноутбуки большинства производителей идут с предустановленной операционной системой и подходящими драйверами для всего аппаратного обеспечения. Однако после переустановки ОС драйвера требуется установить заново, и сегодня мы хотим познакомить вас с порядком инсталляции служебного ПО.
Последовательность установки ПО
Наверняка многие пользователи скажут, что порядок установки драйверов не слишком важен. В некоторых случаях это справедливо, однако порой некорректная последовательность может привести к неработоспособности тех или иных компонентов – беспроводных адаптеров или видеокарты. Во избежание подобного следует инсталлировать драйвера в предложенном нами порядке.
Чипсет
Чипсет (chipset) представляет собой вторую по важности микросхему на материнской плате ноутбука – фактически, это средство управления всем встроенным оборудованием. Следовательно, если не устанавливать ПО для этого компонента первым, могут проявиться проблемы в работе контролируемого им «железа».
Видеокарта
Второй по важности драйвер, который следует установить – ПО видеокарты. Обычно сразу после установки Виндовс используется базовый драйвер, но он очень ограничен (не поддерживает разрешения выше 800×600). Для комфортной работы лучше будет инсталлировать драйвер GPU сразу.
Читайте также: Обновление драйверов для видеокарты
Сетевые драйвера (LAN-карта и адаптер Wi-Fi)
Наличие на целевом компьютере доступа к интернету здорово облегчит дальнейшую работу, позволяя уже на нём проводить операцию загрузки ПО. Рекомендуем первым инсталлировать драйвер сетевой карты, затем – беспроводного адаптера.
Звуковой чип
Дальше рекомендуем установить программное обеспечение для звукового устройства – если установить его после, могут появиться проблемы с работой этого компонента, особенно если используется программная надстройка от производителя.
Bluetooth
Теперь следует установить драйвера для адаптера Блютуз. Впрочем, это требуется только для некоторых специфических лэптопов, у которых присутствуют раздельные адаптеры беспроводных сетей.
Читайте также: Поиск и инсталляция драйверов для Bluetooth-адаптера в Windows 10
Остальное оборудование
Самыми последними стоит инсталлировать драйвера для дополнительного «железа»: тачпада, дактилоскопического датчика, слота для работы с картами памяти, веб-камеры и так далее. Именно здесь порядок не важен – основные драйвера мы уже установили.
Особое внимание обратим на пункты «Неизвестное устройство» в «Диспетчере устройств». Обычно Виндовс, особенно новейших версий, способна самостоятельно определить распространённое оборудование и загрузить драйвера для него. Однако в случае специфического аппаратного обеспечения может понадобится самостоятельно найти и установить ПО. Инструкция далее поможет вам в решении этой проблемы.
Урок: Поиск драйверов для неизвестного устройства
Заключение
Мы рассмотрели порядок установки драйверов на ноутбук. Напоследок хотим отметить, что последовательность, скорее, примерная, чем точная – в первую очередь установите ПО для чипсета, ГПУ и коммуникаций, а дальнейшее уже по необходимости.
Наша группа в TelegramПолезные советы и помощь
-
cresta
Active Member
- Публикаций:
-
0
- Регистрация:
- 13 июн 2004
- Сообщения:
- 2.257
Порядок загрузки в общем случае определяется параметром start в соответствующем ключе ветки «CurrentControlSet/Services» реестра.
А как можно определить, в каком порядке будут запущены драйвера, если параметр start одинаков для нескольких драйверов, например 0х3
-
Four-F
New Member
- Публикаций:
-
0
- Регистрация:
- 31 авг 2002
- Сообщения:
- 1.237
Это не то чтобы порядок загрузки. Этот параметр очень общо определяет лишь в какой фазе загрузки системы нужно грузить драйвер. Точный порядок загрузки драйверов определить невозможно. А влиять на него можно с помощью помещения драйвера в определенную группу Load Order Group. В пределах группы порядок задается с помощью числового тега Tag. Также можно сделать загрузку драйвера зависимой от загрузки других груп Depend On Group и/или драйверов Depend On Service.
Всё это есть в доках. См. описание CreateService и вокруг. На sysinternals.com где-то лежить утиль LoadOrder (или как-то так). Показывает порядок загрузки, но не точно.
-
cresta
Active Member
- Публикаций:
-
0
- Регистрация:
- 13 июн 2004
- Сообщения:
- 2.257
Спасибо, сейчас пойду смотреть этот LoadOrder.
Тут собственно проблема такая: запускаю два драйвера, и мне нужно, чтобы они стартовали рпи загрузке системы как можно раньше, и в определенной последовательности (т.е. первый должен сделать подготовительные шаги для второго, пока тот ещё не стартовал)
-
Saint German
New Member
- Публикаций:
-
0
- Регистрация:
- 13 сен 2003
- Сообщения:
- 222
а что если использовать loadimageroutine? это для установления/определения порядка загрузки.
-
cresta
Active Member
- Публикаций:
-
0
- Регистрация:
- 13 июн 2004
- Сообщения:
- 2.257
Это что такое?
Гугл таких слов не знает.
-
MegaZu
New Member
- Публикаций:
-
0
- Регистрация:
- 22 июл 2005
- Сообщения:
- 290
cresta
PsSetLoadImageNotifyRoutine ставит нотифай, до ХР насколько я помню ее убрать невозвожно(легально )
в ХР уже есть PsRemoveLoadImageNotifyRoutine для снятия.
Saint German
А как сменить порядок ? Она ж выдает калбек когда модуль уже загружаеться …
-
Saint German
New Member
- Публикаций:
-
0
- Регистрация:
- 13 сен 2003
- Сообщения:
- 222
да это мой четров стиль выражатьсянадо так —
установления(определения) т.е. видя что загружается
driver1.sys & driver2.sys примерно определяем.
-
MegaZu
New Member
- Публикаций:
-
0
- Регистрация:
- 22 июл 2005
- Сообщения:
- 290
Saint German
А то я думал может ты чёт новое придумал
-
Four-F
New Member
- Публикаций:
-
0
- Регистрация:
- 31 авг 2002
- Сообщения:
- 1.237
cresta, если нужно чтобы драйвер стартовал при загрузке системы как можно раньше, то его нужно поместить в группу «Boot Bus Extender». При этом он должен быть зарегистрирован как SERVICE_BOOT_START или SERVICE_SYSTEM_START. Тэг можно любой назначить, т.к. для тебя скорее всего всё равно каким номером твой драйвер будет грузится в пределах группы. Только имей ввиду, что в буттайме есть ряд ограничений, т.к. файловая система ещё не смонтирована, доступны не все разделы реестра и т.п.
А насчет двух драйверов: не проще ли переложить обязанности первого на второй или наоборот
См. в ДДК «Specifying Driver Load Order».
-
Saint German
New Member
- Публикаций:
-
0
- Регистрация:
- 13 сен 2003
- Сообщения:
- 222
Four-F
Мне так кажется для целей его драйвера, это плохо подходит, это сильно усложнит логику работы его драйвера.
Чтобы Windows могла взаимодействовать и корректно обращаться к физическому оборудованию компьютера, в операционной системе должны быть установлены соответствующие драйвера. В этой статье мы рассмотрим, как вручную установить драйверы устройств в Windows 10/11 и Windows Server 2016-2025.
Содержание:
- Автоматический поиск драйверов в Windows
- Поиск драйверов для неизвестных устройств
- Ручная установка драйвера с помощью INF файла в Windows
- Экспорт и импорт драйверов в Windows
Автоматический поиск драйверов в Windows
В образ современных версий Windows включены базовые драйвера для распространенных типов устройств. После подключения устройства к компьютеру, Windows попытается выбрать наиболее подходящий драйвер из локального хранилища драйверов. Кроме того, Windows может автоматически установить драйвера некоторых устройств, которые опубликованы в каталоге Microsoft Update:
- Попробуйте выполнить автоматический поиск подходящих драйверов через диспетчер устройств. Откройте Device Manager (
devmgmt.msc
), щелкните по устройству, для которого отсутствует драйвер, и выберите Update Driver -> Search automatically for updated driver software. - Если драйвер не найден, диспетчер оборудования предложит выполнить автоматический поиск драйвера через Windows Update. Нажмите на ссылку Search for updated drivers on Windows Updates или перейдите: Settings -> Windows Update -> Check for Updates.
Для брендовых (OEM) устройств, все необходимые драйвера обычно можно найти по названию модели компьютера на сайте производителя. Если компьютер собран из разных комплектующих, искать и устанавливать драйвера скорее всего придется по отдельности.
Если Windows не смогла автоматически подобрать подходящие драйвера, их придется установить вручную.
Поиск драйверов для неизвестных устройств
Начать нужно с определения производителя и модели оборудования подключенного устройства. Если для устройства отсутствует драйвер, он отображается в диспетчере оборудования Windows с желтой восклицательной иконкой.
- Откройте свойства неизвестного устройства и перейдите на вкладку Details
- В выпадающем списке выберите свойство Идентификаторы оборудования (Hardware IDs)
- Скопируйте идентификатор. В нашем примере это VID_2357&PID_010C
В идентификаторе оборудования указан ID производителя (VID) и ID продукта (PID). В нашем случае VID=2357 и PID=010C. Затем на сайте https://devicehunt.com/ определите название устройства по его VID и PID. В этом примере это внешний USB сетевой адаптер TP-Link (TL-WN722N v2/v3 [Realtek RTL8188EUS])
Теперь перейдите на сайт вендора и по модели оборудования найдите драйвер для вашей версии Windows. В моем случае это драйвер для Windows 10/11 (TL—WN722N_V4_190409_Win10/11). Скачайте драйвер.
Категорически не рекомендуем скачивать драйвера с любых сайтов, кроме официальных сайтов производителей.
Ручная установка драйвера с помощью INF файла в Windows
В нашем примере драйвер упакован в ZIP архив, который содержит автоматический установщик setup.exe. Он используется для автоматической установки драйвера, а также различных дополнительных программ и утилит от вендора (в этом примере мы не будем использовать установку драйверов через такой инсталлятор).
Если же распаковать содержимое архива, можно найти в нем папку, в которой хранятся только файлы драйвера. В каталоге драйвера обязательно должен быть INF файл (текстовый файл с конфигурацией драйвера, описанием зависимых файлов, правилами установки и т.д.), а также CAT и DAT, SYS, DLL файл(ы) (опционально).
Драйвер из INF файла можно установить несколькими способами.
Установка драйвера из Device Manager.
- Щелкните по вашему устройству в диспетчере оборудования и выберите Update Driver
- Выберите Browse my computer for driver software
- Нажмите кнопку Browse и укажите путь к распакованной папке с драйвером. Включите опцию Include subfolders для автоматического сканирования вложенных папок на наличие драйверов
- Нажмите Next, чтобы продолжить установку драйвера.
Также можно вручную добавить любой драйвер в хранилище драйверов Windows. Для этого щелкните правой кнопкой по INF файлу драйвера в проводнике и выбрать Install.
Или можно установить драйвер из командной строки с помощью утилиты pnputil.
pnputil /add-driver c:\drivers\windows_10_64bit\netrtwlanu.inf
Можно рекурсивно установить все драйвера хранящиеся в каталоге (включая подпапки) с помощью команды:
pnputil /add-driver C:\Drivers\*.inf /subdirs /install
Это также добавит драйвер в хранилище драйверов Windows (
C:\Windows\System32\DriverStore\FileRepository
). Осталось выбрать пункт Update Driver в диспетчере задач, и драйвер для вашего устройства автоматически будет установлен из локального хранилища драйверов.
После того, как устройство корректно определилось в Device Manager, можно перейти к следующему устройству, для которого отсутствуют драйвера.
Оптимально использовать такой
порядок установки драйверов в Windows
: в первую очередь нужно установить драйвера чипсета и контроллеров материнской карты. Драйвера сетевого адаптера, затем драйвера для видео и аудио карт, и в последнюю очередь для внешних устройств (драйвера принтера, сканера, проектора, других USB устройств).
Экспорт и импорт драйверов в Windows
Можно вывести все сторонние драйвера (кроме встроенных), которые установлены в хранилище драйверов Windows:
DISM /online /get-drivers /format:table
Чтобы удалить любой драйвер из хранилища, нужно указав его INF файл в формате oemxx.inf. Например:
pnputil /delete-driver oem46.inf /uninstall /force
Если у вас есть несколько однотипных компьютеров, вы можете экспортировать все установленные драйвера на одном компьютере, а затем импортировать их на другом.
Выгружаем все установленные в Windows драйвера в каталог C:\Drivers:
dism /online /export-driver /destination:C:\Drivers
Теперь папку Drivers нужно скопировать на другой компьютер и установить (импортировать) все драйвера одной командой:
pnputil.exe /export-driver * c:\drivers
Также можно предварительно интегрировать эти драйвера в установочный образ Windows. В этом случае все оборудование компьютера будет определено автоматически сразу после установки, а ручная установка драйверов не понадобиться.