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

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

by
Offline Offline

« : 29-04-2012 18:27 » 

Народ,кто-ибудь может поделиться информацией о том,как происходит монтирование дисков в Windows,- от обнаружения устройства на шине до подгрузки disk.sys и PartMng.sys?
Записан
oleshii
Участник

ru
Offline Offline

« Ответ #1 : 08-06-2012 12:23 » 

А подробнее ? (если тема еще актуальна). Что конкретно интересует ?
Записан
Ochkarik
Модератор

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

« Ответ #2 : 08-06-2012 17:36 » 

куда уж конкретнее то?)
Записан

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

ru
Offline Offline

« Ответ #3 : 09-06-2012 05:02 » 

Шинный протокол - это одно
Генерации IRP другое
PNP сигналыи нотификации = третье
Подъем FS с recognizer - четвертое
IRP path в разных OS - пятое
Что именно ?
Записан
Ochkarik
Модератор

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

« Ответ #4 : 09-06-2012 10:37 » 

инициация, формирование стека, IRP.
то есть с "другого" по, хотя бы, "четвертое")))
Записан

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

ru
Offline Offline

« Ответ #5 : 14-06-2012 11:54 » 

Описывать это в делалях тускло. Да и (будем до конца откровенны) не все мне известно.
Набросаю "крупными штрихами", осталяя за скобками работу хабов и хост-контроллеров.
OS, для простоты положим, XP-like. Кстати, за распознаванием FS with recognizer - на osronline.com,
там даже был код custom recognizer. У систем имеется Root BusEnumerator. Роль его играет PnpManager
который держит внутреннюю очередь уведомлений, доступную извне через IoRegisterPlugPlayNotification
(к MSDN). К нему "цепляются" leaf bus enumerators типа Com, Lpt, USB, PCI, ACPI, и т.д. У каждого стека
PnP devices, принадлежащих той или иной шине имеется функция AddDevice, вызываемая при device hotplug.
Все это "счастье" leaf bus enum выстраивает в "цепочку", зная что за чем и как вызывать. Итак, "втыкаем"
USB флешку. PnPMan "поднимает" device хаба (того порта, в который воткнули устройство). Дальше
поднимается USBSTOR, который служит мостом между USB и диском - для трансляции SCSI запросов в USB
запросы. Для каждого устройства USBSTOR регистрирует 2 типа devices - her own private device type enumerator
и логический FDO. За USBSTOR "поднимается" disk.sys, который как крестик одним концом "упирается" в USBSTOR,
другим - в PartMgr. Концы "крестика" связаны через devnode. Сама node является собственностью VSS.
Yet once sorry - о работе MntMgr, PartMgr, mountdev мало что можно сказать. Их внутрення кухня посажена на private
IOCTL + private interface (в нарушение всех соглашений о безопасности). Часть из этих IOCTL слабо описана в MntMgr,
часть доступна в виде Kernel API типа RtlVolumeDeviceToDosName PartMgr доформирует остальной devices stack, в
котором живут он сам, FS Device (FAT or NTFS) и RealDevice от disk.sys. Они связаный друг с другом через VPB. Очередь
VPB "держит" MntMgr.  На 7-ке все будет совсем по-другому.

Записан
Ochkarik
Модератор

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

« Ответ #6 : 14-06-2012 20:04 » 

ага...спасибо! кое что становится понятно... жаль только, что автор вопроса - молчит)
Записан

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

ru
Offline Offline

« Ответ #7 : 15-06-2012 05:34 » 

Было бы за что. Сайт весьма интересен, кое-что и я по своим проблемам мне неизвестное ранее нашел.
Ответное спасибо "хозяевам поля".
Записан
AlexCasual
Помогающий

by
Offline Offline

« Ответ #8 : 19-06-2012 13:52 » 

oleshii,спасибо за информацию,но всё это общеизвестная теория,а меня интересует практика...
Смысл в том,чтобы добраться из файлового минифильтра (имея грубо говоря указатель на файловый объект)до перечислителя шины (например usbhub.sys).
Записан
oleshii
Участник

ru
Offline Offline

« Ответ #9 : 20-06-2012 05:04 » 

Если мне не изменяет зрение, изначально Вы ТАК вопрос в посте не ставили. Как спросили, так ответил.
Конкретику расписывать не буду. Общий алгоритм таков:
1) IoRegisterPlugPlayNotification = по USB class GUID получаем USBSTOR (их 2) на "нижнюю" часть deice node посредством перечесления relations = хаб "лежит" там
    здесь же необходимо ТЩАТЕЛЬНО пересчислить Bus relations - для отлова связи с хабом
2) В минифильтре получаем объект "верхней" части device node (к IFS minifilter WDK = FltGetDiskDevice или как-то в этом роде
3) По device relations получаем связи dsik.sys, полученного на 1м этапе c объектом, полученным на 2м этапе (под XP это тоже disk.sys)
На 7-ке общий принцип сохраняется, хотя некоторые вещи меняются
Записан
AlexCasual
Помогающий

by
Offline Offline

« Ответ #10 : 20-06-2012 06:47 » 

oleshii,хотелось бы подробнее о пункте 3,потому что именно в том и смысл,что есть объект usbstor созданный для связи с disk.sys,но связи между FltGetDiskDevice() и этим объектом не прослеживается.

Ко всему прочему BusRelations,если я всё правильно понял, предоставляет список дочерних объектов (PDO),но никак не "вертикальные" связи объектов,-это значит,что направляя запрос на перечисление шинных взаимосвязей,например,к usbhub - я получу список ЕГО дочерних объектов,но никак не связь между хабом и USBSTOR и т.п....
« Последнее редактирование: 20-06-2012 06:58 от AlexCasual » Записан
oleshii
Участник

ru
Offline Offline

« Ответ #11 : 20-06-2012 07:08 » 

Вся система строится на омбинации запросов TargetRelations - BusRelations
Спрашиваем Target у FsDevice - получаем disk.sys в VPB->RealDevice
Спрашиваем Target у 2го disk.sys получаем USBSTOR, сидящиий в BusRelations у usbhub
В проекте нужен USBFilter, реализующий attach к хост-колнтроллерам, тем самым будет получен доступ к объектам хабов low level
Записан
AlexCasual
Помогающий

by
Offline Offline

« Ответ #12 : 20-06-2012 07:56 » 

oleshii, "Спрашиваем Target у FsDevice - получаем disk.sys в VPB->RealDevice" - получаем объект ТОМА,но не объект устройства disk.sys.
Записан
oleshii
Участник

ru
Offline Offline

« Ответ #13 : 20-06-2012 08:27 » 

ЧИТАЕМ ВНИМАТЕЛЬНЕЕ: on XP, under of other os picture will be different

Добавлено через 51 секунду:
Проверьте имя объекта тома. И вопросов больше не будет.
« Последнее редактирование: 20-06-2012 08:28 от oleshii » Записан
AlexCasual
Помогающий

by
Offline Offline

« Ответ #14 : 20-06-2012 18:15 » 

oleshii, покажи мне на скринах утилиты DeviceTree взаимосвязь между FsDevice и объектом disk.sys,чтобы было реально видно,у меня почему-то так не получилось...
Записан
oleshii
Участник

ru
Offline Offline

« Ответ #15 : 21-06-2012 04:48 » 

Хорошо. Отпишись в личку. Адрес на форуме.

Добавлено через 29 минут и 22 секунды:
Не получилось - значит "криво" что то написал. Приведи код, который получает relations и code chunk, который его вызывает.
« Последнее редактирование: 21-06-2012 05:17 от oleshii » Записан
resource
Молодой специалист

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

« Ответ #16 : 01-08-2012 19:35 » 

А почему в личку? Этож форум, а не сайт знакомств. Тем более тема интересная. Понимаю, что дело было уже какбэ давно, но всё же...
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines