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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2011, 14:34   #1
Fanliss
Пользователь
 
Регистрация: 01.11.2011
Сообщений: 13
По умолчанию Отлов удаления файлов в Windows

Здравствуйте народ!
При удалении файла в виндовс вылазиет окошко для подтверждения удаления "Вы уверены, что хотите удалить файл?". Мне нужно это окошко заменить своей формой. Возможно так же еще запретить удаление.

Всвязи с этим нужно как-то отлавливать сам процесс удаления.
У меня Wibdows XP SP3.
Пробовал делать хук на DeleteFile() и ShFileOperation(). Я в хуках не разбираюсь особо, но нашел как это делается:
http://forum.sources.ru/index.php?sh...5&view=showall

Так вот, если DeleteFile() или ShFileOperation() писать в своей программе, то они замечательно отлавливаются, но удаление файлов в эксплорере проходит на ура и хуки не работают.

Так вот вопрос: как поймать процесс или событие удаления файла в эксплорере?
Просто если DeleteFile() или ShFileOperation() не ловятся, может есть еще какие команды по удалению файлов?

есть такая штука ReadDirectoryChanges, которая следит за папкой, но это слишком локально. Так же в библиотеке компонентов RX есть RxFolderMonitor, но это тоже слежение за папкой и это не то.
Fanliss вне форума Ответить с цитированием
Старый 01.11.2011, 15:28   #2
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

надо перехватывать NtDeleteFile из ntdll.dll. функции DeleteFile и ShFileOperation обращаются к ней
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
haruhi вне форума Ответить с цитированием
Старый 03.11.2011, 09:53   #3
Fanliss
Пользователь
 
Регистрация: 01.11.2011
Сообщений: 13
По умолчанию Отлов удаления файлов в Windows

Почитал в инете, из ntdll.dll перехватывают с помощью сплайсинга API. Нашел как это делают:
http://ms-rem.narod.ru/hook/ApiHook1/apihook.htm
сделал аналогично подмену NtDeleteFile, но ничего не происходит. Файлы как удалялись так и удаляются.
Там на этом сайте есть пример перехвата MessageBox методом сплайсинга, он у меня тоже не работает, точнее ничего не происходит.
Может я делаю что не так? Или это как по-другому делается?

Хотелось бы какой-нибудь рабочий примерчик что ли или мой код посмотреть.
Вложения
Тип файла: rar Перехват удаления файлов.rar (120.6 Кб, 35 просмотров)
Fanliss вне форума Ответить с цитированием
Старый 03.11.2011, 17:56   #4
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Есть довольно нелепое предположение, что NtDeleteFile вызывается уже несколько позже формы о подтверждении удаления файла, ну а вообще, она там не вызывается.
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 03.11.2011, 19:06   #5
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

в любом случае всё сводится к NtDeleteFile
rpy3uH вне форума Ответить с цитированием
Старый 03.11.2011, 19:18   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а вообще, никто не заметил что ТС нужно не перехват самого удаления, а именно перехватить форму?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.11.2011, 19:48   #7
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Да нет там никакого NtDeleteFile. Приаттачтесь к эксплореру, поставьте бряк на данную функцию, да удалите что либо. Как там чего происходит разбираться лень, по крайней мере сегодня.
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 03.11.2011, 20:03   #8
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

посмотрел в отладчике что делает функция kernel32.DeleteFileW : NtOpenFile -> NtSetInformationFile

в данном случае лучший вариант это перехват NtOpenFile и запрет если файл хотят открыть с доступом на запись

Последний раз редактировалось rpy3uH; 03.11.2011 в 20:05.
rpy3uH вне форума Ответить с цитированием
Старый 05.11.2011, 20:35   #9
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Диалог удаления файлов в эксплорере вызывается функцией DialogBoxParamW, ресурсы диалога берутся из библиотеки shell32.dll номера диалогов в ресурсах, в ХР: 1011 -удаление файла,1012 - удаление папки, 1013 - удаление группы объектов
Можно проверять по строкам в ресурсах, вероятно данные идентификаторы могут разниться от версии shell32.
Собственно сам перехват тривиален - ставим перехват на вышеобозначенную DialogBoxParamW, проверяем хендл модуля с ресурсами, идентификатор ресурса, если наш клиент, то вызываем её в обработчике (или вызываем свою форму вместо данной, почистив параметры DialogBoxParamW) и изменяем/оставляем результат, он может быть двух видов как и у MessageBox с параметром MB_YESNO, то есть:
#define IDYES 6 ; был нажат баттон "Да"
#define IDNO 7 ; был нажат баттон "Нет"
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 05.11.2011, 20:41   #10
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а вообще, никто не заметил что ТС нужно не перехват самого удаления, а именно перехватить форму?
только что заметила. тупо как-то получилось.

а так всё намного проще становится, можно через стандартный механизм хуков (WH_CBT)
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии

Последний раз редактировалось haruhi; 05.11.2011 в 20:43.
haruhi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отмена удаления в Windows artemavd Общие вопросы Delphi 8 30.11.2010 13:43
Защита файлов от удаления (assembler) Omega1 Помощь студентам 16 17.11.2010 16:14
Программа для удаления файлов 1malder1 Софт 10 29.05.2010 15:38
Защита файлов от удаления Viteef Свободное общение 5 15.06.2007 22:44
Защита файлов от удаления Viteef Общие вопросы Delphi 10 02.06.2007 07:40