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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Принудительный Dereference  (Прочитано 6793 раз)
0 Пользователей и 5 Гостей смотрят эту тему.
vvoid
Гость
« : 08-11-2005 14:46 » 

Добрый день!
Сначала лирическое отступление. К примеру, если я всталю флешку, открою её в полупроводнике и потом попытаюсь её отформатировать из коммандной строки, то будет сказано, что просто так формат не может отработать, поскольку диск используется другим процессом и предложится объявить все ссылки на этот диск недействительными. По моему фактически выполняется сброс ссылок на объект, полученных другими процессами при вызове ObReferenceObjectXxx.
Так вот, собственно и вопрос: как я могу удалить объект, на который ещё кто-то ссылается. Причём именно удалить - по IoDeleteDevice. Обращу ваше внимание, на то, что эта функция отрабатывает, но устройство в списке DeviceObject->NextDevice остаётся, а мне нужно сделать, так, чтобы оно уже нигде не оставалось, т.е. сделать "принудительный ObDereferenceObject".
Подскажите, если кто-нибудь знает как это делается.

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

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

« Ответ #1 : 08-11-2005 16:50 » 

делай ObDereferenceObject пока число ссылок до 0 не упадет, потом удаляй... только вот остальные проги могут и свалится от всего этого...)
ибо.... ObDereferenceObject decrements the given object's reference count and performs retention checks.

но вообще это жестоко наверное... может IRP_PNP_QUERY_REMOVE_DEVICE? или SUPRISE_REMOVAL?
« Последнее редактирование: 20-12-2007 19:10 от Алексей1153++ » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
vvoid
Гость
« Ответ #2 : 08-11-2005 17:03 » 

Да тут дело в том, что это как бы референсы на девайс моего драйвера (вирт. шифров. диск) Вот так. И что делать в указанных IOCTL-ях я не знаю. ну разумеется так, чтобы более-менее честно Улыбаюсь
Записан
Ochkarik
Модератор

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

« Ответ #3 : 08-11-2005 17:50 » 

если быть совсем честным  я тожене уверен что веду ся в этих случаях правильно... но по супрайсу - драйвер палюбому из системы должны выкинуть) так что бы ни делай....)))
вообще говоря как-то в рыбах нумеги смотрел...- там более менее все понятно... тока вот IRP типа QUERY - обманываю всех и ресурсы там не выгружаю)
только ответ даю - могу выгрузится или нет...
вообще наверное это через сервисы надо делать наверное...
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
vvoid
Гость
« Ответ #4 : 10-11-2005 17:52 » 

А можно поподробнее что такое SUPRISE_REMOVAL? А то я в DDK набрал, а оно мне ничего не выдало Жаль

И что значит "вообще наверное это через сервисы надо делать наверное..."?
Записан
Ochkarik
Модератор

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

« Ответ #5 : 11-11-2005 11:09 » 

SUPRISE_REMOVAL - я имел в виду IRP_MJ_PNP - IRP_MN_SURPRISE_REMOVAL) написал с ошибкой...
а про сервисы... иде то тут тема была по поводу предустановки драйвера - помоему там обсуждалось что то похожее но про установку...
функции типа SetupDi*** - если есть функции установки драйвера, то наверное есить и выгрузки его же?
еще посмотри в MSDN Platform SDK: Hardware раздел Device Management...и Platform SDK:BaseService: Removable Storage Manager... помоему именно там компать надо)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines