Форум программистов «Весельчак У»
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
Начало
Наши сайты
Галерея
Весельчак У
Наша Вики
Хранилище
Проекты
Правила
Правила форума
Правила русского языка
Помощь
Поиск
Календарь
Почта
Войти
Регистрация
Форум программистов «Весельчак У»
>
Направления программирования
>
Drivers
(Модераторы:
Ochkarik
,
aks68
) > Тема:
Отмонтирование диска
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Отмонтирование диска (Прочитано 12373 раз)
0 Пользователей и 1 Гость смотрят эту тему.
vvoid
Гость
Отмонтирование диска
«
:
28-07-2005 10:55 »
Всем желаю здравствовать!!!
Написал, значится, я драйвер виртуального жёсткого диска (типа файл-контейнер, монтируешь его и система не видит разницу между ним и диском С: ). Далее пытаюсь его отмонтировать, тобишь погасить поток обработки IRP, почистить DeviceExtension и наконец IoDeleteDevice. Тут возможно два варианита событий:
1. Если с момента последнего обращения к диску (форматирования, копирования файлов и т.д.) прошло достаточно много времени или обращений к диску не было вообще (примонтировал и сразу отмонтировал), то всё проходит нормально.
2. Если я сразу после форматирования и копирвания на диск некоторого количиства файлов попытаюсь диск отмонтировать, то система помирает (BSD с ошибкой BAD_POOL_HEADER (0x00000020,....) ).
Мои мысли по этому поводу: винда не до конца заканчивает запись данных в файл-контейнер (??кеширует их чтоль??), хотя никаких STATUS_PENDING не возвращает. Или другая мысль: система не сразу одупляется, что диска уже вроде как нет и продолжает слать ему запросы (как бы по инерции).
Люди добрые может кто встречался с данной проблемой, знает как её решить или как обойти (красиво и без хаков) погите, пжл. Буду очень признателен.
Спасибо!
Записан
SlavaI
Главный специалист
Offline
Re: Отмонтирование диска
«
Ответ #1 :
01-08-2005 07:35 »
А такой вопрос- ты отваливаешься только когда счетчик открытых хендлов равен нулю? Или ты его вобще нет проверяешь?
Записан
vvoid
Гость
Re: Отмонтирование диска
«
Ответ #2 :
01-08-2005 07:53 »
Если можно - чуток по подробней. Так как я могу и не на то подумать, то скажу следующее: все ресурсы, занятые мной я освобождаю, каждому ObReferenceObject соответсвует ObDereferenceObject, ZwCreateFile - ZwClose. Хотя похоже речь идёт не о захваченых ресурсах?
Что имеется ввиду под счётчиком открытых хендлов и как вести его счёт?
Благдарю!
Записан
SlavaI
Главный специалист
Offline
Re: Отмонтирование диска
«
Ответ #3 :
01-08-2005 08:13 »
Ну тобой занятые, а что никому кроме тебя прямо нельзя открыть твой супер диск. Как минимум на каждый IRP_MJ_CREATE должен прийти IRP_MJ_CLEANUP и IRP_MJ_CLOSE
Записан
vvoid
Гость
Re: Отмонтирование диска
«
Ответ #4 :
01-08-2005 08:21 »
Что значит никто кроме меня? А на фига он тогда такой вообще нужен. Я же говорил, что работа с ним не должна отличаться от работы с любым другим диском компа.
> "Как минимум на каждый IRP_MJ_CREATE должен прийти IRP_MJ_CLEANUP и IRP_MJ_CLOSE"
Вот вот. Уже ближе к телу
)
[RP_MJ_CLEANUP и IRP_MJ_CLOSE] или [RP_MJ_CLEANUP или IRP_MJ_CLOSE]?
Я так понимаю здесь и ведётся счёт открытых хендлов.
И если это как минимум, то что есть ещё, чтоб было "как по-нормальниум" а ещё лучше "как максимум"??
«
Последнее редактирование: 01-08-2005 08:29 от vvoid
»
Записан
vvoid
Гость
Re: Отмонтирование диска
«
Ответ #5 :
02-08-2005 15:59 »
ОК!! Проблема решена! Бага - чтобы отмонтировать диск ему посылался IOCTL_STORAGE_EJECT_MEDIA в обработчике которого вызывалась ф-ция IoDeleteDevice, то есть она вызывалась до завершения IRP, а это бага. На такую мысль натолкнула статья
http://www.osronline.com/article.cfm?article=385
.
Записан
SlavaI
Главный специалист
Offline
Re: Отмонтирование диска
«
Ответ #6 :
08-08-2005 09:01 »
IoDeleteDevice для PDO должен вызываться в при обработке IRP_MN_REMOVE_DEVICE или при удалении FDO.
Записан
vvoid
Гость
Re: Отмонтирование диска
«
Ответ #7 :
08-08-2005 10:08 »
Насколько я понимаю это для плуг-н-плюй. Я не обрабатываю IRP_MJ_PNP.
Записан
SlavaI
Главный специалист
Offline
Re: Отмонтирование диска
«
Ответ #8 :
08-08-2005 10:17 »
Что то я тогда не понимаю по какому принципу вобще идет удаление. Ты расскажи поподробней. У тебя сам девайс исчезает или носитель, типа как в дисководе, сидюке, магнитооптике.
Записан
vvoid
Гость
Re: Отмонтирование диска
«
Ответ #9 :
08-08-2005 11:20 »
Его можно примонтировать как Fixed (отображается как диск С, к примеру) или как Removable (отображается как флэшка). Есть утиль, для управления (монтировать, отмонтировать, инфо и т.д.). При отмонтировании "исчезает сам девайс", а не его медиа.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Форум программистов «Весельчак У»
>
Направления программирования
>
Drivers
(Модераторы:
Ochkarik
,
aks68
) > Тема:
Отмонтирование диска
Загружается...