Возможно ли загрузить вторую копию драйвера?
Известно, что в процесс не получится загрузить один и тот же файл через LoadLibrary(). Но что на счет драйверов? Можно ли это сделать не прибегая к «загрузке вручную»? То есть средствами самой Windows.
Как выясняется, запросто. Достаточно создать две разные службы, которые ссылаются на один и тот же бинарь. И никаких проблем.
Как это будет выглядеть в windbg:
8a642000 8a7e4000 driver_signed (private pdb symbols) c:\client\build\x86\debug\bin\driver.pdb
93a3d000 93bdf000 driver_signed_93a3d000 (private pdb symbols) c:\client\build\x86\debug\bin\driver.pdb
Вторая копия получит суффикс, который является базовым адресом. Брейкпоинты на копию ставятся без проблем, достаточно использовать имя driver_signed_93a3d000.
Как это можно использовать? А например для того, чтобы загрузить копию драйвера который Patchguard не дает хучить, но не заморачиваться с ручной загрузкой секций, импортами, экспортами, релокациями…