Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Нашел самый правильный способ отлавливания момента доступности дисков [upd] 10.01.06 13:10 Число просмотров: 2973
Автор: amirul <Serge> Статус: The Elderman Отредактировано 10.01.06 13:17 Количество правок: 1
|
> а посмотрел код IoInitSystem в > win2k\private\ntos\io\ioinit.c > Хотя учту. Проверю это дело под разными виндами
Насчет того, что симлинки создаются прямо в ftdisk-е это соврал. Вернее симлинки создаются, но я не посмотрел какие. А создается там симлинк \Device\Harddisk0\Volume1 -> \Device\HarddiskVolume1
Симлинки же в \DosDevices\ создаются в MountMgr.sys
kd> kv
ChildEBP RetAddr Args to Child
fc912c0c fc4dbc4b fc912c20 fc912c6c 00000000 nt!IoCreateSymbolicLink (FPO: [Non-Fpo])
fc912c28 fc4e27a8 e1287520 fc912c6c fc4db99c MountMgr!GlobalCreateSymbolicLink+0x23 (FPO: [Non-Fpo])
fc912ca4 fc4e2b3b 80e4be48 fc912d64 00000000 MountMgr!MountMgrMountedDeviceArrival+0x380 (FPO: [Non-Fpo])
fc912cc8 8054c75a fc912d1c 80e4be48 804ed100 MountMgr!MountMgrMountedDeviceNotification+0x49 (FPO: [Non-Fpo])
fc912cf0 805a1908 fc4e2af2 fc912d1c 80e4be48 nt!PiNotifyDriverCallback+0x6d (FPO: [Non-Fpo])
fc912d44 805a1fca e1280278 8065d578 00000001 nt!IopNotifyDeviceClassChange+0xab (FPO: [Non-Fpo])
fc912d74 804ebd08 80e76cd0 00000000 80e8f020 nt!PiWalkDeviceList+0xae (FPO: [Non-Fpo])
fc912dac 80559026 80e76cd0 00000000 00000000 nt!ExpWorkerThread+0xfe (FPO: [Non-Fpo])
fc912ddc 8050f513 804ebc35 00000001 00000000 nt!PspSystemThreadStartup+0x34 (FPO: [Non-Fpo])
00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x16
kd> dS fc912c20; dS fc912c6c
e1287828 "\GLOBAL??\Volume{57dd9f09-2359-1"
e1287868 "1d9-91ad-806d6172696f}"
e1288bf0 "\Device\HarddiskVolume1"
---
Происходит это сразу после реэнумерации устройств в PartMgr-е (еще до выхода из IopInitializeBootDrivers) и до начала инициализации системных драйверов (IopInitializeSystemDrivers). Короче сам mount manager получает информацию о новых дисках через нотификацию, зарегистрированную в IoRegisterPlugPlayNotification
Если не хватит MSDN-а, можешь глянуть на код \private\ntos\mountmgr\mountmgr.c на предмет использования или поискать в гугльгруппах
-----------------
Кстати, а где это в IoInitSystem видно, что можно использовать диски (правда не по симлинкам, а напрямую через устройства)? Сами девайсы создаются уже после инициализации ВСЕХ boot-драйверов во время энумерации девайсов, а симлинки к ним, как я уже сказал в MountMgr-е во время нотификации об изменениях в классе "Дисковые устройства"
|
|
|