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

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

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

« : 15-03-2010 18:12 » 

Здравствуйте друзья. Помогите пожалуйста прояснить такой вопрос.

Озадачился фильтром файловой системы, на примерах sfilter и filespy (они выложены здесь https://forum.shelek.ru/index.php/topic,21848.msg215977.html). Возьмем конкретно sfilter.
Есть у него такая функция SfFsNotification, которая вызывается системой, с целью оповесьтить драйвер о зарегистрированных файловых системах. В нее передается указатель на DEVICE_OBJECT, который как я понимаю, представляет объект-устройство, созданный непосредственно файловой системой (и ее же представляющий). Далее через дебри вспомогательных функций, в конце концов происходит вызов ObQueryNameString, которой в качестве параметра "Object" передается как раз этот самый DEVICE_OBJECT файловой системы. Тут одно важное обстоятельство: если имя не будет получено, то лавочка закрывается посредством return (ну конечно после отладочного сообщения). Получили имя DEVICE_OBJECT'а - хорошо. Далее фильтр изо всех сил пытается приатачиться к стеку этого DEVICE_OBJECT'а. И хочет проверить, не "file system recognizer" ли это, чтобы вслучае, если это именно он, отменить свой замысел по приатачиванию. Как я понимаю, у recognizer'а тоже есть имя (он тоже человек), и именно оно и является главным его признаком (по крайней мере для sfilter и filespy). Так вот далее должно произойти банальное сравнение имени объекта устройства с именем recognizer'а ("\\FileSystem\\Fs_Rec"). Но sfilter (равно как и filespy) запрашивает имя самого объекта драйвера, т.е. еще раз вызывается ObQueryNameString, и на этот раз ей передается уже DeviceObject->DriverObject.

Конкретно последнее обстоятельство мне и непонятно. Что за фокус такой. Зачем запрашивать имя объекта-драйвера? Какое тогда имя мы получаем вызовом ObQueryNameString для DEVICE_OBJECT'а ?
Записан
x64
Участник

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

WWW
« Ответ #1 : 10-05-2010 18:37 » 

Есть у него такая функция SfFsNotification, которая вызывается системой, с целью оповесьтить драйвер о зарегистрированных файловых системах. В нее передается указатель на DEVICE_OBJECT, который как я понимаю, представляет объект-устройство, созданный непосредственно файловой системой (и ее же представляющий).

Да, верно, такие устройства называются Control Device Object (CDO), т.е. управляющее устройство драйвера файловой системы. Такие устройства используются для получения запросов, не имеющих прямого отношения к вводу/выводу, например, запросы на монтирование от I/O Manager или другие кастомные запросы, вроде FSCTL_INVALIDATE_VOLUMES для fastfat-а.

Зачем запрашивать имя объекта-драйвера?

Я уже давно не заглядывал в эти сэмплы, но если ребята из MS делают именно так, т.е. смотрят имя драйвера, а не девайса, чтобы отсечь распознавалки, значит для этого есть свои причины. Может быть имя девайса запланировано к изменению в будущем, а может быть что-то ещё, но в своих драйверах лучше всего делать так же, вот и всё.
Записан
resource
Молодой специалист

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

« Ответ #2 : 10-05-2010 19:33 » 

x64, спасибо вам за ответ, но вопрос в общем-то давно уже сошел на нет, т.к. был задан уже почти 2 месяца назад
Записан
Ochkarik
Модератор

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

« Ответ #3 : 10-05-2010 19:43 » 

resource, раз вопрос сошел на нет - мог бы тогда и сам на него ответить Да-да а то висит, понимаешь, тема безответная, уныние наводит... Скромно так...
Ага
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
resource
Молодой специалист

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

« Ответ #4 : 10-05-2010 19:51 » 

Ochkarik, согласен. Но вопрос, так сказать, "никакой" был. И ответ "просто так надо", как-то писать смысла не видел. А товарищ x64 изложил это более прозаично  Улыбаюсь , за что ему и спасибо
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines