Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как отследить загрузку драйверов  (Прочитано 16671 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
l_sunny
Участник

ru
Offline Offline

« : 21-04-2011 10:02 » 

Стоит задача определить время загрузки Windows, в том числе всех драйверов.
Ставлю загрузку своего драйвера самым первым (проверяю этот факт через программу LoadOrder [http://technet.microsoft.com/en-us/sysinternals/bb897416]),
потом пробую перехватить загрузку драйверов через CallBack функцию установленную через PsSetLoadImageNotifyRoutine.
Проблема в том что в перехватчик, установленный через PsSetLoadImageNotifyRoutine попадают только драйвера с флагом загрузки =1(SERVICE_SYSTEM_START),
а с флагом 0(SERVICE_BOOT_START) не отлавливаются! Жаль
Хотелось бы перехватить запуск всех драйверов, начиная с sptd.sys и acpi.sys, может есть ещё какие-нибудь способы?

P.S. Перехват NtLoadDriver через SST нежелателен, если вообще возможен на первоначальном этапе загрузки ОС.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 21-04-2011 10:21 » 

ну... во-первых есть готовые решения: bootvis (пользовался недавно - отличная вещь, и выполняет все что вам надо). в любом случае - попробуйте запустить)
а во вторых... может быть через какой нибудь готовый WMI это можно сделать?

попробуйте тут покопать...
Windows Hardware Developer Center > Learn > Systems > Performance
« Последнее редактирование: 21-04-2011 10:25 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
l_sunny
Участник

ru
Offline Offline

« Ответ #2 : 22-04-2011 02:23 » 

bootvis я тоже смотрел, смысл в том, чтобы сделать самому. Только непонятно как он работает, драйвера в нём вроде как нет, но DeviceIoControl пользуется, видимо он использует что-то уже встроенное в систему.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 22-04-2011 07:13 » new

l_sunny, bootvis помоему кроме времени загрузки еще  и продолжительность запуска как-то оценивал?
навряд ли это можно сделать только через отслеживание загрузки Image драйвера.

драйвер может в экзешник быть встроен. все утилиты от OCR так распространяются.
я бы посмотрел что они там вызывают. какие функции...
если есть встроенный драйвер - можно попытаться его образ записать и посмотреть какие функции он вызывает.

PSвозможно они там тупо время последнего доступа к файлу смотрят?)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
x64
Участник

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 30-04-2011 01:25 » 

...может есть ещё какие-нибудь способы?

Попробуй FsRtlRegisterFileSystemFilterCallbacks().
Не уверен, что это будет работать на 100%, но стоит попробовать.
Колбек называется PreAcquireForSectionSynchronization, и не забудь написать каркас файлового фильтра.

Перехват NtLoadDriver через SST нежелателен, если вообще возможен на первоначальном этапе загрузки ОС.

Возможно, но бесполезно, т.к. к этому моменту файлы-образы boot-драйверов уже загружены в память и поставлены в очередь на инициализацию.
« Последнее редактирование: 30-04-2011 21:31 от x64 » Записан
l_sunny
Участник

ru
Offline Offline

« Ответ #5 : 03-05-2011 14:50 » 

Колбек называется PreAcquireForSectionSynchronization, и не забудь написать каркас файлового фильтра.
Не делал раньше фильтры файловых систем. Попробовал сначала PreAcquireForSectionSynchronization запустить без фильтра,
функция выполнилась успешно,  но колбек не вызывается.
Видимо без фильтра не обойтись. Только каркас какого фильтра нужно сделать,
того который цепляется через IoAttachDeviceToDeviceStack (и к чему его тогда приаттачивать?)
или который регистрируется через FltRegisterFilter() как минифильтр?
Записан
x64
Участник

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 14-05-2011 21:05 » 

Видимо без фильтра не обойтись.

Да.

Только каркас какого фильтра нужно сделать,
того который цепляется через IoAttachDeviceToDeviceStack (и к чему его тогда приаттачивать?)
или который регистрируется через FltRegisterFilter() как минифильтр?

Если фильтр будет работать только на Windows XP SP2 и выше, то пиши сразу минифильтр, это проще. Сэмплы минифильтров есть в WDK в папке src\filesys\miniFilter. По поводу legacy-фильтров немного информации есть у меня в блоге здесь, сэмплы есть в более ранних WDK, например, в Windows Server 2003 DDK, скачать здесь.
Записан
l_sunny
Участник

ru
Offline Offline

« Ответ #7 : 16-05-2011 09:02 » 

Спасибо, буду разбираться. Только наверное минифильтры здесь не подойдут, ведь пока fltmgr.sys не загрузится их не подключить.
Записан
x64
Участник

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 18-05-2011 00:01 » 

Спасибо, буду разбираться. Только наверное минифильтры здесь не подойдут, ведь пока fltmgr.sys не загрузится их не подключить.

Верно, хотя он грузится достаточно рано, так что не знаю, попробуй. Вообще, с legacy-фильтрами та же проблема может быть, т.е. пока драйвер файловой системы не обозначил своё присутствие, ни хрена ты не узнаешь об открываемых/проецируемых файлах. Ну я уже сказал - пробуй.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines