Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.76
LAren
0 / 0 / 0
Регистрация: 11.09.2009
Сообщений: 6
#1

Остановка USB устройств - C++

11.09.2009, 14:52. Просмотров 2181. Ответов 10
Метки нет (Все метки)

Здраствуйте. Стоит задача: необходимо написать программу на С++, которая позволяет отследить все процессы и все что с ними связано, которые в данный момент времени мешают безопасному извлечению устройства USB. Отследить процессы запущенные непосредственно с флешки нетрудно, а что делать с видеофайлами, текстовыми документами, открытым Total Commander не знаю.

Может кто-нибудь из сведущих людей подскажет что происходит, когда идет попытка остановки устройства? Что делает Windows и в какой последовательности? Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2009, 14:52
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Остановка USB устройств (C++):

Остановка рабочей функции потока - C++
День добрый. Задумался над таким вот вопросом. Допустим, у меня есть две функции get(StopObj obj) и process(StopObj obj). Эти две функции...

Обращение к функциям Диспетчера устройств - C++
Доброго времени суток. Ищу статьи или примеры по работе с диспетчером устройств :) Есть ли у кого ни будь таковые ?)) Если конкретней, то...

Получение списка usb устройств - C++ Builder
При компиляции выдает кучу ошибок о том что не верные символы. Аналогичный код на более младшей версии работает. (Стоит Builder 2010) ...

Остановка рисования в Image - C++ Builder
Добрый день! Не могу придумать как останавливать рисование: При движении мыши на Image рисуется кривая + создается массив с координатами...

Не работает остановка потоков - C++ Builder
Ребята помогите пожалуйста, не могу разобраться с остановкой потоков. Вроде при нажатии на кнопку поток должен переходить в состояние...

Выход (остановка) функции - C++ Builder
Где в этой функции нужно поставить break или goto что бы после нахождения файла 1.txt происходило (прерывание) остановка функции? ...

10
LAren
0 / 0 / 0
Регистрация: 11.09.2009
Сообщений: 6
13.09.2009, 23:27  [ТС] #2
пока решения не нашел. помогите пожалуйста
0
Nikita2009
103 / 102 / 6
Регистрация: 12.09.2009
Сообщений: 453
13.09.2009, 23:53 #3
Ты не можешь вытянуть безопасно флешку или что???
0
Monte-Cristo
2794 / 1380 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
14.09.2009, 00:24 #4
LAren, вперед на MSDN за изучением Api функций. Бьюсь об заклад, ты подыщишь там что-то.
0
Rififi
2362 / 1055 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
14.09.2009, 00:33 #5
Более того, другие уже поискали. И написали USB Safely Remove.
0
LAren
0 / 0 / 0
Регистрация: 11.09.2009
Сообщений: 6
14.09.2009, 15:33  [ТС] #6
про USB Safely Remove я знаю, но брать готовую прогу нельзя, преподаватель не поймет

попробую переформулировать вопрос немного по другому: подскажите какие функции использовать чтобы у каждого процесса посмотреть с какими файлами он связан. В msdn смог найти только функцию GetModuleFileName но она не позволяет отследить все файлы с которыми работает процесс (например видеоплеер: показывает что работает из установленного каталога, а то что сам видеофайл читается с флешки не показывает). Может быть так кто-нибудь что-нибудь сможет подсказать.
0
Alexandoros
228 / 66 / 4
Регистрация: 02.06.2009
Сообщений: 280
16.09.2009, 13:39 #7
http://www.wasm.ru/article.php?article=lockfileswork
По ссылке есть описание метода перечисления хендлов.

Алгоритм приблизительно таков -
1) Создаеш список всех файлов на флешке.
2) Просматриваеш все открытые в системе хендлы и сравниваеш со списком файлов
3) Прибиваеш процессы открывшие файлы на флешке или закрываеш хендлы в этих процессах.
1
LAren
0 / 0 / 0
Регистрация: 11.09.2009
Сообщений: 6
16.09.2009, 14:11  [ТС] #8
спасибо, сейчас буду пробовать
0
LAren
0 / 0 / 0
Регистрация: 11.09.2009
Сообщений: 6
16.09.2009, 18:27  [ТС] #9
с файлами понятно, но остается проблема с TotalCommander. Когда в нем отображается флешка, как "словить тотал за руку", что он просматривает флешку?

появилась идея попробовать следить за портом USB устройства. Получить список всех USB портов, потом проверить воткнута ли в данный порт флешка, и смотреть за всеми обращениями к порту. Тогда можно было бы всю программу свести только к этому и не было бы необходимости отдельно строить список процессов, писать различные функции для процессов непосредственно запущенных с флешки и для всех файлов. Реализуемо ли это?
0
Alexandoros
228 / 66 / 4
Регистрация: 02.06.2009
Сообщений: 280
16.09.2009, 18:38 #10
как "словить тотал за руку", что он просматривает флешку?
Смотри хендл файла в имени которого есть подстрока h:\, где h - имя флешевого диска.

появилась идея попробовать следить за портом USB устройства. Получить список всех USB портов, потом проверить воткнута ли в данный порт флешка, и смотреть за всеми обращениями к порту. Тогда можно было бы всю программу свести только к этому и не было бы необходимости отдельно строить список процессов, писать различные функции для процессов непосредственно запущенных с флешки и для всех файлов. Реализуемо ли это?
С хендлами и проще и красивше.
0
LAren
0 / 0 / 0
Регистрация: 11.09.2009
Сообщений: 6
16.09.2009, 20:44  [ТС] #11
Alexandoros, спасибо Вам за совет. Буду разбираться.

PS нашел исходный код программы FileMon, может быть получится взять оттуда какие-нибудь куски кода
0
16.09.2009, 20:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2009, 20:44
Привет! Вот еще темы с ответами:

Остановка по нажатию кнопки - C++ Builder
Подскажите пожалуста. Необходимо чтобы программа выполняла некий код по циклу до тех пор пока пользователь не нажмёт на кнопку...

Остановка выполнения программы.... - C++ Builder
Есть прога на Builder'е 6.0, можно ли по нажатии кнопки прекращать выполнение всех выполняющихся в ней действий? (т.е. человек запустил...

Остановка обработки OnClose - C++ Builder
Можно ли как то остановить обработку события OnClose ? Например при нажатии на крестик ( срабатывает OnClose) выскакивает сообщение : " Вы...

Правильная остановка потока - C++ Builder
Есть поток, в которым выполняется запрос. При закрытии формы, нужно останавливать выполнение этого потока. Как правильно это сделать? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru