Я знаю, что Sinsinternals Process Explorer молча загружает драйвер устройства под названием PROCEXPxxx.SYS. Мне интересно, как это получается. Для меня это похоже на хороший пример бесшумного связывания компонента режима ядра в нашем приложении.Как программа Windows загружает драйвер ядра без перезагрузки или вызова CreateService
Во-первых, драйвер создается динамически из exe (возможно, как ресурс).
С помощью Process Monitor для проверки реестра я могу сказать, что PE использует RegCreateKey для создания ключей в HKLM \ System \ CurrentControlSet \ Services \ PROCEXPxxx вручную (и сразу же удаляет его после этого, чтобы после драйвера не осталось ничего бежит).
Используя «dumpbin/import procexp.exe», я обнаружил, что PE не импортирует CreateService. И с помощью API-монитора (http://www.rohitab.com/apimonitor) я подтвердил, что CreateService не будет вызываться при его запуске.
Итак, как Process Explorer элегантно загружает драйвер без перезагрузки и вызывает CreateService?
Решение не может, на самом деле, быть элегантным. Обратите внимание, что функции kernel32.dll обычно просто перенаправляются на ntdll.dll, и даже функции ntdll.dll могут быть встроены в код приложения, магия происходит в ядре, приложение должно выполнять только инструкцию SYSENTER. –
Также возможно, что он использует функции установки драйвера устройства (SetupDi *), а не функции диспетчера служб. –
Ben Voigt, SetupDi * не участвуют, поскольку dumpbin показывает, что он даже не импортирует setupapi.dll. – JavaMan