AlexCasual
Помогающий
Offline
|
|
« : 29-04-2012 18:27 » |
|
Народ,кто-ибудь может поделиться информацией о том,как происходит монтирование дисков в Windows,- от обнаружения устройства на шине до подгрузки disk.sys и PartMng.sys?
|
|
|
Записан
|
|
|
|
oleshii
Участник
Offline
|
|
« Ответ #1 : 08-06-2012 12:23 » |
|
А подробнее ? (если тема еще актуальна). Что конкретно интересует ?
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #2 : 08-06-2012 17:36 » |
|
куда уж конкретнее то?)
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
oleshii
Участник
Offline
|
|
« Ответ #3 : 09-06-2012 05:02 » |
|
Шинный протокол - это одно Генерации IRP другое PNP сигналыи нотификации = третье Подъем FS с recognizer - четвертое IRP path в разных OS - пятое Что именно ?
|
|
|
Записан
|
|
|
|
Ochkarik
|
|
« Ответ #4 : 09-06-2012 10:37 » |
|
инициация, формирование стека, IRP. то есть с "другого" по, хотя бы, "четвертое")))
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
oleshii
Участник
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
|
|
« Ответ #6 : 14-06-2012 20:04 » |
|
ага...спасибо! кое что становится понятно... жаль только, что автор вопроса - молчит)
|
|
|
Записан
|
RTFM уже хоть раз наконец! :[ ну или хотя бы STFW...
|
|
|
oleshii
Участник
Offline
|
|
« Ответ #7 : 15-06-2012 05:34 » |
|
Было бы за что. Сайт весьма интересен, кое-что и я по своим проблемам мне неизвестное ранее нашел. Ответное спасибо "хозяевам поля".
|
|
|
Записан
|
|
|
|
AlexCasual
Помогающий
Offline
|
|
« Ответ #8 : 19-06-2012 13:52 » |
|
oleshii,спасибо за информацию,но всё это общеизвестная теория,а меня интересует практика... Смысл в том,чтобы добраться из файлового минифильтра (имея грубо говоря указатель на файловый объект)до перечислителя шины (например usbhub.sys).
|
|
|
Записан
|
|
|
|
oleshii
Участник
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
Помогающий
Offline
|
|
« Ответ #10 : 20-06-2012 06:47 » |
|
oleshii,хотелось бы подробнее о пункте 3,потому что именно в том и смысл,что есть объект usbstor созданный для связи с disk.sys,но связи между FltGetDiskDevice() и этим объектом не прослеживается.
Ко всему прочему BusRelations,если я всё правильно понял, предоставляет список дочерних объектов (PDO),но никак не "вертикальные" связи объектов,-это значит,что направляя запрос на перечисление шинных взаимосвязей,например,к usbhub - я получу список ЕГО дочерних объектов,но никак не связь между хабом и USBSTOR и т.п....
|
|
« Последнее редактирование: 20-06-2012 06:58 от AlexCasual »
|
Записан
|
|
|
|
oleshii
Участник
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
Помогающий
Offline
|
|
« Ответ #12 : 20-06-2012 07:56 » |
|
oleshii, "Спрашиваем Target у FsDevice - получаем disk.sys в VPB->RealDevice" - получаем объект ТОМА,но не объект устройства disk.sys.
|
|
|
Записан
|
|
|
|
oleshii
Участник
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
Помогающий
Offline
|
|
« Ответ #14 : 20-06-2012 18:15 » |
|
oleshii, покажи мне на скринах утилиты DeviceTree взаимосвязь между FsDevice и объектом disk.sys,чтобы было реально видно,у меня почему-то так не получилось...
|
|
|
Записан
|
|
|
|
oleshii
Участник
Offline
|
|
« Ответ #15 : 21-06-2012 04:48 » |
|
Хорошо. Отпишись в личку. Адрес на форуме.
Добавлено через 29 минут и 22 секунды: Не получилось - значит "криво" что то написал. Приведи код, который получает relations и code chunk, который его вызывает.
|
|
« Последнее редактирование: 21-06-2012 05:17 от oleshii »
|
Записан
|
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #16 : 01-08-2012 19:35 » |
|
А почему в личку? Этож форум, а не сайт знакомств. Тем более тема интересная. Понимаю, что дело было уже какбэ давно, но всё же...
|
|
|
Записан
|
|
|
|
|