Debugger
Цитата:
Значит ли это, что теперь можно будет без проблм установить неподписанный новый драйвер, даже если у Windows есть свой, более старый?
|
Нет, ранжир драйверов это не меняет. Просто функция, проверяющая текушую политику подписи всегда выдает ignore, не зависимо от состояния защитного хеша и значений реестра. Тупая идея - 'испортить' подпись встроенного драйвера, добавив пару пробелов в его inf.
Другая идея - похакать функцию проверки каталогов, чтобы все файлы считались "подписанными". Будет время - покапаюсь Ida в потрохах
setupapi еще раз.
Тут вот выложил новую версию. Менялся только финиш.
Код:

Изменения в версии от 6 марта.
1. Исправлена досадная ошибка в процедуре само удаления, которая могла привести в некоторых
случаях к удалению лишних файлов в папке, где находился finish.exe.
2. После переосмысления изменена логика работы finish.
3. Изменено поведение при KeepDrivers = 0 и AutoCleanup = 0 - при таком сочетании не происходит сброс
путей на стандартное %SystemRoot%\inf и удаление исходной папки драйверов.
4. Изменено поведение функции очистки (finish cleanup). При отсутствии presetup.ini происходит удаление
только служебных файлов. Ни какие папки с драйверами не удаляются.
5. Процедура сброса путей на стандартное %SystemRoot%\inf при KeepDrivers = 0 перенесена в функцию очистки.
6. Добавлены два ключа командной строки finish.
"ktd" или "k" - принудительный запуск функции сохранения драйверов.
"panels" или "p" - принудительный запуск функции установки панелей (дополнений) драйверов.
7. Уменьшен размер диалога по вертикали.
Небольшая выдержка из доки:
Код:

Более подробно, в деталях логика работы finish следующая:
При запуске из SetupParam происходит чтение параметров из presetup.ini и занесение в RunOnceEx ключей для
запуска следующей стадии после перезагрузки.
Если указан параметр UseRunOnceEx=0 , то выполняются следующие два действия:
Происходит обработка finish.ini и запуск установки панелей (дополнений) драйверов (при наличии finish.ini).
Если указан параметр KeepDrivers = 1, то происходит сохранение драйверов в папку и по критериям, определенным в
finish.ini. Если finish.ini отсутствует, то происходит сохранение всей папки с драйверами в папку по
умолчанию (%SystemRoot%\OemDrv). Помните, что в этом случае при недостатке места на системном разделе и большом
обьеме папки с драйверами возможны проблемы.
Если указан параметр KeepDrivers = 0, то просто ничего не делается.
Если указан параметр UseRunOnceEx=1 , то два вышеприведенных действия обрабатываются на этапе первой загрузки.
Эти же действия можно вызвать принудительно запуском finish с соответствующими ключем (panels или ktd).
При вызове ktd будет принудительно проставлен параметр KeepDrivers = 1, чтобы пути поиска не были сброшены
при очистке.
Также, на этапе первой загрузки по окончанию установки панелей и сохранения драйверов при указанном ключе
AutoCleanup = 1 происходит процедура очистки - удаляются папки драйверов и всех служебных файлов (в том числе,
и самого finish.exe).
Это же действие можно вызвать принудительно запуском finish с соответствующим колючем (cleanup).
Так же на этом этапе производится следующее - если не был указан параметр KeepDrivers = 1, то происходит
сброс путей поиска на %SystemRoot%\inf.
По поводу HWID* - нужен finish.ini и FinishDrv.log для анализа ошибок.