Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2011, 12:03   #1
Dee63
Пользователь
 
Аватар для Dee63
 
Регистрация: 09.03.2010
Сообщений: 48
По умолчанию Работа с USB накопителями

Всем привет!
ранее решал задачу получения инфы о USB устройствах (накопителях) в системе (http://programmersforum.ru/showthread.php?t=149948).

А сейчас мне стало интересно: если я имею путь с USB-накопителю в виде
USBSTOR\DISK&VEN_-PRETEC&PROD_02GB&REV_1.00\B0F77724E DE24D&0
и знаю его букву в системе, то возможно ли какой-то процедурой реализовать отключение этого USB-носителя по букве или по этому пути, причем так, что даже если этот диск используется какой-то программой, то отключение произойдет в любом случае?

Гугл результата не дал. а мне интересно.
Dee63 вне форума Ответить с цитированием
Старый 26.05.2011, 10:38   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Я тебе уже давал ссылку, только она оперирует немного другими данными. Но смысл тот же. Всё происходит через функцию CM_Request_Device_Eject. поэтому тебе придётся сначала как-то конвертировать, букву диска в его индекс в списке дисковых устройств, либо в данные которые принимает функция CM_Request_Device_Eject

а если вообще тебе нужна инфа то вот
http://www.google.ru/#hl=ru&source=h...&bih=886&cad=b
rpy3uH вне форума Ответить с цитированием
Старый 27.05.2011, 09:17   #3
Dee63
Пользователь
 
Аватар для Dee63
 
Регистрация: 09.03.2010
Сообщений: 48
По умолчанию

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
Я тебе уже давал ссылку, только она оперирует немного другими данными. Но смысл тот же. Всё происходит через функцию CM_Request_Device_Eject. поэтому тебе придётся сначала как-то конвертировать, букву диска в его индекс в списке дисковых устройств, либо в данные которые принимает функция CM_Request_Device_Eject

а если вообще тебе нужна инфа то вот
http://www.google.ru/#hl=ru&source=h...&bih=886&cad=b

Спасибо, это я читал. Это у меня реализовано.

Но там функция для безопасного извлечения. А меня это не будет устраивать, т.к. если с флешкой кто-то или что-то работает, то она уже не извлечется через безопасное извлечение.

А вот не безопасное извлечение, а просто отрубание нафиг, даже с потерей данных?
Dee63 вне форума Ответить с цитированием
Старый 27.05.2011, 11:29   #4
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

из обычного приложения вряд ли получится, так как надо принудительно закрыть все хендлы связанные с этим устройством. а вот из драйвера без проблем
rpy3uH вне форума Ответить с цитированием
Старый 27.05.2011, 12:00   #5
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Цитата:
а вот из драйвера без проблем
это идея. закрешить драйвер нафиг, ну и чтобы наверняка, это должен быть kernel mode драйвер. Только так драйвера никто не пишет, большинство пользователей не поймут.
f.hump вне форума Ответить с цитированием
Старый 30.05.2011, 09:07   #6
Dee63
Пользователь
 
Аватар для Dee63
 
Регистрация: 09.03.2010
Сообщений: 48
По умолчанию

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
из обычного приложения вряд ли получится, так как надо принудительно закрыть все хендлы связанные с этим устройством. а вот из драйвера без проблем
Я вот что думаю.
По идее, использовать USB накопитель может(в большинстве случаев) либо какой-то файловый менеджер типа Тотал Коммандера ( и ему подобных), либо медиапроигрыватель (сразу цепляет в себя, если на флешке есть музыка), либо Эксплорер.ехе.
А это все пользовательские приложения, которые можно завершить.

Искал хоть немного практической части реализации программы Unlocker, но так и не нашел.
А там реализовано как раз таки через поиск хендлов на диск (или файл, папку и т.п.).
Dee63 вне форума Ответить с цитированием
Старый 30.05.2011, 09:21   #7
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

ну в принципе, можно найти все файловые хедлы в системе. отсеять все которые относятся к искомой флешке, найти владельцев этих хендлом и завершить процессы-владельцы. При завершении процесса, все его открытые хендлы закрываются
rpy3uH вне форума Ответить с цитированием
Старый 30.05.2011, 10:12   #8
Dee63
Пользователь
 
Аватар для Dee63
 
Регистрация: 09.03.2010
Сообщений: 48
По умолчанию

Порылся на тему хендлов.
У Руссиновича есть утилита в пакете SysInternals. handle называется.

Так вот, не показывает она того, что нужно.

Как я проверял.
Открыл тотал. в нем перешел на флешку (диск Н).
Запустил этот хэндл и натравил на процесс тотала. и в итоге он не показывает, что открыт на просмотр диск Н. Однако показывает на диски С и Д.
Думал я конечно, что он флешку как файл открыл-тоже нет.

Вот так.

Totalcmd.exe pid: 884 BIGS\*******
C: File (RW-) C:\Windows\winsxs\x86_microsoft.win dows.common-controls_6595b64144ccf1df_6.0.7601. 17514_none_41e6975e2bd6f2b2
F0: Section \Sessions\1\BaseNamedObjects\window s_shell_global_counters
10C: File (RW-) C:\Windows\winsxs\x86_microsoft.win dows.common-controls_6595b64144ccf1df_6.0.7601. 17514_none_41e6975e2bd6f2b2
1A4: Section \BaseNamedObjects\__ComCatalogCache __
1AC: Section \BaseNamedObjects\__ComCatalogCache __
1B0: Section \BaseNamedObjects\windows_shell_glo bal_counters
1F4: File (R-D) C:\Windows\Fonts\StaticCache.dat
1FC: File (RW-) C:\Windows\winsxs\x86_microsoft.win dows.common-controls_6595b64144ccf1df_6.0.7601. 17514_none_41e6975e2bd6f2b2
22C: File (RW-) C:\ =======тут открыт на просмотр диск С
244: File (RWD) C:\
2D8: Section \BaseNamedObjects\C:*ProgramData*Mi crosoft*Windows*Caches*cversions.2. ro
2DC: Section \BaseNamedObjects\C:*ProgramData*Mi crosoft*Windows*Caches*{6AF0698E-D558-4F6E-9B3C-3716689AF493}.2.ver0x00000000000000 07.db
2E0: Section \BaseNamedObjects\C:*ProgramData*Mi crosoft*Windows*Caches*cversions.2. ro
2E4: Section \BaseNamedObjects\C:*ProgramData*Mi crosoft*Windows*Caches*{DDF571F2-BE98-426D-8288-1A9A39C3FDA2}.2.ver0x00000000000000 02.db

А диск Н не показывается(((


Получается, что не отловить такое дело?
Dee63 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с джойстиком через USB Gonzo Мультимедиа в Delphi 4 17.11.2010 20:22
Работа с USB SERG1980 Компоненты Delphi 11 26.10.2010 10:09
Работа с USB cnst_bus Lazarus, Free Pascal, CodeTyphon 1 22.11.2009 13:30
Работа с usb портом Spice Общие вопросы .NET 6 16.07.2008 08:32
Работа USB накопителями D7_beginner Win Api 4 04.12.2007 12:47