Использование кеша драйверов для корректной установки драйверов в windows PE3
Из-за того что Windows PE имеет ограниченный набор драйверов
Microsoft-Windows-Winpe-Drivers-Package -2 в SP0 и 3 в SP1
Microsoft-Windows-Common-Drivers-Package -78
Microsoft-Windows-Client-Wired-Network-Drivers-Package -16
многие драйвера не возможно загрузить штатными средствами, к примеру аудио. Любой аудио драйвер обращается к файлу wdmaudio.inf и пытается загрузить файлы WMALFXGFXDSP.dll, SysFxUI.dll, drmk.sys, portcls.sys, drmkaud.sys, даже если эти файлы уже находятся на свои местах. Для добавления драйверов в windows PE все файлы должны находится в одной директории вместе с inf файлом, то есть обычно в директории windows\inf, иначе выдается сообщение, что windows не может загрузить драйвер
Это создает неудобство при использовании аудио драйвер-пака. Либо вышеперечисленные файлы должны находится в каждой папке каждого драйвера, либо нужно копировать все аудио драйвера в windows\inf
В нормальной windows все драйвера хранятся в DriverStore\FileRepository, связь между ними и inf файлами из windows\inf обеспечивается при помощи “кеша драйверов”.
infpub.dat- содержит опубликованное имя драйвера и 16-тиричную адресную ссылку в infstor.dar
infstor.dat- имя папки в FileRepository и перекрестная ссылка в infpub.dat
drvindex.dat- имя, папка и содержание папки
INFCACHE.1
infstrng.dat
Google на всех языках приносит единственную, и абсолютно тупую, ссылку по этим файлам- удалить их в случае возникновения определённых проблем. Эти файлы не восстанавливаются системой. Переустановка драйверов windows без них невозможна. Кеш создаётся только при установке соответствующего Drivers-Package
Итак, задача: установить wdmaudio.inf в windows PE
-Простейшее решение загрузить его с помощью drvload.exe или DISM.exe из папки вида wdmaudio.inf_x86_neutral_aed2a4456700dfde не проходит. Wdmaudio получает oem имя, и далее бесполезен. Это понятно- отсутствуют соответствующие сертификаты
Уточнение задачи: получить правильный кеш для нужных драйверов
-Решение- использовать кеш от установленной системы или дистрибутива.
Работает, но не универсально. В системе установлены oem драйвера и хотфиксы.
Если попытаться интегрировать уже установленный драйвер во время сборки то он не интегрируется, даже если драйвер был удалее из системы ранее. Добавить можно указав правильные oem и имя папки из FileRepository, эти параметры навсегда остаются в кеше драйверов. Наверное, можно пройтись по infpub.dat hex-редактором и заменить все oem на omm
С хотфиксами другие проблемы. Если хотфикс включает апгрейд для драйвера то имя рабочей папки изменится. Например “Windows6.1-KB2529073-x86.msu” для SP1 изменит “usb.inf_x86_neutral_2620fd493cad7d41” на “usb.inf_x86_neutral_1584ed9878602b0f”. Оба имени будут существовать в instor.dat, меняется только ссылка в файле infpub.dat на правильное имя папки драйвера при установке или удалении обновления. Что хрошо, так это что можно удалить все хотфиксы оффлайн при помощи DISM, и получить валидные файлы кеша драйверов
-Итак, лучше решение, на данном этапе, использовать чистый кеш из официальных дистрибутивов. Очищенный кеш то же не плохо, но требует время и\или программное решение для очистки . Но всё это только для SP0
SP1 первого релиза, имеет разные версии драйверов для winRe.wim и установленной windows. В winRe (и в WAIKе)все новые, в windows 26 старых от SP0, включая msmouse, cpu, msports т.е. они не работают при импорте кеша из дистрибутива
-Самое простое решение – копирование всех новых (или для SP1 старых) папок драйверов из дистрибутива в создаваемый boot.wim. Это ведёт к увеличению PE3 и удлинению времени загрузки. Второго, теоретически быть не должно, но при 5-ти usbport.inf папках и двух usb.inf загрузка чуть ли не в два раза дольше, не устанавливается USB modem. Никаких обращений к неустановленным драйверам в Windows\inf\setupapi.dev.log. После удаления ненужных папок напрямую из boot.wim, т.е. без пересборки, всё работает нормально
-Второй вариант – изменить при помощи hex-редактора имена папок драйверов в импортированных файлах кеша (infstor.dat и drvindex.dat) на имена из winpe, точнее на имена из Microsoft-Windows-Common-Drivers-Package не сработал.
-Третий, и самый лучший, испытанный способ это переименовать папки в WinPe в соответствии с именами из системы источника. Но опять, это просто сделать только для свежеустановленной, чистой системы. После установки хотфиксов опять нужно знать новое имя драйвера
Хотелось бы узнать состав драйвер пака SP1 первой волны, может никаких проблем с разными версиями драйверов больше нет, или может тестировался очень кривой дистрибутив
Напоследок, ещё один способ, вытекающий из вышеописанного, это установить нужный драйвер используя хотфикс, вот только существует ли он для wdmaudio и других драйверов
В общем случае имортированный кеш драйверов решает проблемы автоматической установки драйверов при загрузки или подключении устройства. Например USB принтер автоматом подгружает драйвер USB Printing Support
Ещё одна интересная вещь, выявленная во время тестирования всех этих методик
Если система при загрузке имеет не валидный кеш для usb.inf и usbport.inf то загрузка происходит очень быстро, естественно без поддержки USB устроиств, но USB клавиатура и мышь работают. Но это win PE, и в ней можно находу подсунуть новый кеш или переименовать папки драйверов и затем уже включить поиск оборудования
Просьба выложить на файлообменник чистые файлы драйвер-кеша из официальных дистрибутивов SP0 и SP1 wawe1. Ultimate или Professional, x86 и x64.
PS
Может ктонибудь знает где можно взять Microsoft-Windows-Client-Drivers-Package, или способ его создания только для нужных драйверов?
Из-за того что Windows PE имеет ограниченный набор драйверов
Microsoft-Windows-Winpe-Drivers-Package -2 в SP0 и 3 в SP1
Microsoft-Windows-Common-Drivers-Package -78
Microsoft-Windows-Client-Wired-Network-Drivers-Package -16
многие драйвера не возможно загрузить штатными средствами, к примеру аудио. Любой аудио драйвер обращается к файлу wdmaudio.inf и пытается загрузить файлы WMALFXGFXDSP.dll, SysFxUI.dll, drmk.sys, portcls.sys, drmkaud.sys, даже если эти файлы уже находятся на свои местах. Для добавления драйверов в windows PE все файлы должны находится в одной директории вместе с inf файлом, то есть обычно в директории windows\inf, иначе выдается сообщение, что windows не может загрузить драйвер
Это создает неудобство при использовании аудио драйвер-пака. Либо вышеперечисленные файлы должны находится в каждой папке каждого драйвера, либо нужно копировать все аудио драйвера в windows\inf
В нормальной windows все драйвера хранятся в DriverStore\FileRepository, связь между ними и inf файлами из windows\inf обеспечивается при помощи “кеша драйверов”.
infpub.dat- содержит опубликованное имя драйвера и 16-тиричную адресную ссылку в infstor.dar
infstor.dat- имя папки в FileRepository и перекрестная ссылка в infpub.dat
drvindex.dat- имя, папка и содержание папки
INFCACHE.1
infstrng.dat
Google на всех языках приносит единственную, и абсолютно тупую, ссылку по этим файлам- удалить их в случае возникновения определённых проблем. Эти файлы не восстанавливаются системой. Переустановка драйверов windows без них невозможна. Кеш создаётся только при установке соответствующего Drivers-Package
Итак, задача: установить wdmaudio.inf в windows PE
-Простейшее решение загрузить его с помощью drvload.exe или DISM.exe из папки вида wdmaudio.inf_x86_neutral_aed2a4456700dfde не проходит. Wdmaudio получает oem имя, и далее бесполезен. Это понятно- отсутствуют соответствующие сертификаты
Уточнение задачи: получить правильный кеш для нужных драйверов
-Решение- использовать кеш от установленной системы или дистрибутива.
Работает, но не универсально. В системе установлены oem драйвера и хотфиксы.
Если попытаться интегрировать уже установленный драйвер во время сборки то он не интегрируется, даже если драйвер был удалее из системы ранее. Добавить можно указав правильные oem и имя папки из FileRepository, эти параметры навсегда остаются в кеше драйверов. Наверное, можно пройтись по infpub.dat hex-редактором и заменить все oem на omm
С хотфиксами другие проблемы. Если хотфикс включает апгрейд для драйвера то имя рабочей папки изменится. Например “Windows6.1-KB2529073-x86.msu” для SP1 изменит “usb.inf_x86_neutral_2620fd493cad7d41” на “usb.inf_x86_neutral_1584ed9878602b0f”. Оба имени будут существовать в instor.dat, меняется только ссылка в файле infpub.dat на правильное имя папки драйвера при установке или удалении обновления. Что хрошо, так это что можно удалить все хотфиксы оффлайн при помощи DISM, и получить валидные файлы кеша драйверов
-Итак, лучше решение, на данном этапе, использовать чистый кеш из официальных дистрибутивов. Очищенный кеш то же не плохо, но требует время и\или программное решение для очистки . Но всё это только для SP0
SP1 первого релиза, имеет разные версии драйверов для winRe.wim и установленной windows. В winRe (и в WAIKе)все новые, в windows 26 старых от SP0, включая msmouse, cpu, msports т.е. они не работают при импорте кеша из дистрибутива
-Самое простое решение – копирование всех новых (или для SP1 старых) папок драйверов из дистрибутива в создаваемый boot.wim. Это ведёт к увеличению PE3 и удлинению времени загрузки. Второго, теоретически быть не должно, но при 5-ти usbport.inf папках и двух usb.inf загрузка чуть ли не в два раза дольше, не устанавливается USB modem. Никаких обращений к неустановленным драйверам в Windows\inf\setupapi.dev.log. После удаления ненужных папок напрямую из boot.wim, т.е. без пересборки, всё работает нормально
-Второй вариант – изменить при помощи hex-редактора имена папок драйверов в импортированных файлах кеша (infstor.dat и drvindex.dat) на имена из winpe, точнее на имена из Microsoft-Windows-Common-Drivers-Package не сработал.
-Третий, и самый лучший, испытанный способ это переименовать папки в WinPe в соответствии с именами из системы источника. Но опять, это просто сделать только для свежеустановленной, чистой системы. После установки хотфиксов опять нужно знать новое имя драйвера
Хотелось бы узнать состав драйвер пака SP1 первой волны, может никаких проблем с разными версиями драйверов больше нет, или может тестировался очень кривой дистрибутив
Напоследок, ещё один способ, вытекающий из вышеописанного, это установить нужный драйвер используя хотфикс, вот только существует ли он для wdmaudio и других драйверов
В общем случае имортированный кеш драйверов решает проблемы автоматической установки драйверов при загрузки или подключении устройства. Например USB принтер автоматом подгружает драйвер USB Printing Support
Ещё одна интересная вещь, выявленная во время тестирования всех этих методик
Если система при загрузке имеет не валидный кеш для usb.inf и usbport.inf то загрузка происходит очень быстро, естественно без поддержки USB устроиств, но USB клавиатура и мышь работают. Но это win PE, и в ней можно находу подсунуть новый кеш или переименовать папки драйверов и затем уже включить поиск оборудования
Просьба выложить на файлообменник чистые файлы драйвер-кеша из официальных дистрибутивов SP0 и SP1 wawe1. Ultimate или Professional, x86 и x64.
PS
Может ктонибудь знает где можно взять Microsoft-Windows-Client-Drivers-Package, или способ его создания только для нужных драйверов?