|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.05.2011, 12:03 | #1 |
Пользователь
Регистрация: 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-носителя по букве или по этому пути, причем так, что даже если этот диск используется какой-то программой, то отключение произойдет в любом случае? Гугл результата не дал. а мне интересно. |
26.05.2011, 10:38 | #2 |
добрый няша
Старожил
Регистрация: 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 |
27.05.2011, 09:17 | #3 | |
Пользователь
Регистрация: 09.03.2010
Сообщений: 48
|
Цитата:
Спасибо, это я читал. Это у меня реализовано. Но там функция для безопасного извлечения. А меня это не будет устраивать, т.к. если с флешкой кто-то или что-то работает, то она уже не извлечется через безопасное извлечение. А вот не безопасное извлечение, а просто отрубание нафиг, даже с потерей данных? |
|
27.05.2011, 11:29 | #4 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
из обычного приложения вряд ли получится, так как надо принудительно закрыть все хендлы связанные с этим устройством. а вот из драйвера без проблем
|
27.05.2011, 12:00 | #5 | |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
Цитата:
|
|
30.05.2011, 09:07 | #6 | |
Пользователь
Регистрация: 09.03.2010
Сообщений: 48
|
Цитата:
По идее, использовать USB накопитель может(в большинстве случаев) либо какой-то файловый менеджер типа Тотал Коммандера ( и ему подобных), либо медиапроигрыватель (сразу цепляет в себя, если на флешке есть музыка), либо Эксплорер.ехе. А это все пользовательские приложения, которые можно завершить. Искал хоть немного практической части реализации программы Unlocker, но так и не нашел. А там реализовано как раз таки через поиск хендлов на диск (или файл, папку и т.п.). |
|
30.05.2011, 09:21 | #7 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
ну в принципе, можно найти все файловые хедлы в системе. отсеять все которые относятся к искомой флешке, найти владельцев этих хендлом и завершить процессы-владельцы. При завершении процесса, все его открытые хендлы закрываются
|
30.05.2011, 10:12 | #8 |
Пользователь
Регистрация: 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 А диск Н не показывается((( Получается, что не отловить такое дело? |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с джойстиком через 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 |