Я добавил некоторый код в образец MSNMNTR платформы фильтрации Windows для своего собственного приложения, но он по-прежнему имеет ту же структуру. Я скомпилировал драйвер и приложение для 64-разрядной версии Win8, а также подписал драйвер. На (виртуальной) машине, на которой я создал код, образец работает нормально и правильно отслеживается. Когда я копирую inf, sys и exe на другую машину, образец НЕ отслеживает. Через вывод traceview я вижу, что на второй машине DriverEntry() не вызывается, поэтому управление потоком никогда не настраивается. На двух машинах установлена релизная версия Win8. Это не похоже на проблему с моим новым кодом, так как драйвер отлично работает на машине № 1, и это не похоже на проблему с подписью, потому что, когда я отключаю обязательное использование подписи на машине № 2, у меня все еще есть проблема. И релизная, и отладочная версии кода имеют одну и ту же проблему. Шаги, которые я использую для настройки и запуска кода, приведены ниже. Какие вещи могут вызвать такое поведение?
- Скопируйте драйвер .pdbs в папку для traceview.
- Щелкните правой кнопкой мыши .inf и выберите «Установить».
- Запустите «net start msnmntr» из командной строки с повышенными привилегиями.
- Запустите traceview от имени администратора.
- Запустите «monitor monitor «C:\Program Files\Internet Explorer\iexplore.exe»» из командной строки с повышенными привилегиями.
P.S. Я еще не поставил на него Windbg, но я обновлю вопрос с результатами, как только попробую.
Отредактировано для добавления: Хорошо, я запустил отладчик режима ядра на обеих машинах и увидел разницу в поведении. Прежде всего, DriverEntry вызывается на обеих машинах. Я ошибся. Однако на машине, где код работает (т.е. отслеживает веб-трафик), DriverEntry вызывается при запуске monitor.exe (шаг 5 выше), а на машине, где код не работает, вызывается DriverEntry когда выполняется «net start msnmntr» (шаг 3 выше).