|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
08.11.2011, 13:27 | #11 |
Пользователь
Регистрация: 01.11.2011
Сообщений: 13
|
Вот как раз через стандартный механизм хуков и не получается, потому что не понятно что ловить. Попробую ловить DialogBoxParamW.
Хотя конечно то, что "идентификаторы могут разниться от версии shell32" несколько напрягает. И еще удаление бывает в корзину, бывает мимо, диалоги разные. Еще удаление бывает в других программах, например Тотал командер или вообще в какой-то своей, там наверное тоже будет по-другому. Хотелось бы что-то более универсальное... Хотя хотя бы с эксплорером справиться. Попробую еще NtSetInformationFile |
08.11.2011, 13:43 | #12 |
Форумчанин
Регистрация: 05.10.2011
Сообщений: 368
|
запрет через NtSetInformationFile сложно реализуем так какэтой функции передаётся хендл файла. получение имени по хендлу трудоёмкая задача, система будет тормозить так как каждый при вызове NtSetInformationFile для всех файлов в системе ваш перехватчик будет получать имя файла по хендлу.
намного удобнее и проще перехватывать NtOpenFile и запрещать доступ к искомому файлу если программа запрашивает доступ на запись/изменение а ещё лучше перехватывать NtCreateFile так как NtOpenFile это оболочка вокруг NtCreateFile
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
|
08.11.2011, 15:33 | #13 |
Пользователь
Регистрация: 01.11.2011
Сообщений: 13
|
я никак не могу понять как NtOpenFile связан с удалением файлов? он же открывает? И если я запрещу NtOpenFile, они же тогда и открываться не будут?
Блин, хоть бы какой-нибудь примерчик рабочий. Как вообще это все делается? Последний раз редактировалось Fanliss; 08.11.2011 в 16:21. |
08.11.2011, 19:43 | #14 |
Форумчанин
Регистрация: 23.04.2009
Сообщений: 346
|
NtOpenFile не является никакой оберткой это такой же отдельный сервис как и NtCreateFile.
TotalCmd для вывода формы об удалении файлов\каталогов использует MessageBoxA (моя версия коммандера, по крайней мере) с uType = MB_YESNOCANCEL, то есть возвращаемые параметры аналогичны будут эксплороровским. Для отлова нужных MsgBox - проверка в обработчике перехвата параметра lpText, lpCaption = "Total Commander". "Рабочие примерчики" вам придется писать самому т.к. кроме вас это никому не нужно. То что вас напрягает возможность изменения ID ресурса, опять же, повторяю - ищите динамически или хардкорьте в коде идентификаторы для различных версий. Удаление помимо корзины (Shift+Del) имеет точно тот же диалог, что и удаление в корзину.
Нет, ну правда..
|
08.11.2011, 20:20 | #15 |
Форумчанин
Регистрация: 05.10.2011
Сообщений: 368
|
для того чтобы удалить файл надо сначала получить его хендл с доступом на запись (и ещё парой мелочей, но главное флаг записи). если программа не получит хендла, то и удалить его не сможет
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
|
10.11.2011, 10:21 | #16 | |
Пользователь
Регистрация: 01.11.2011
Сообщений: 13
|
Получилось у меня перехватывать DialogBoxParamW. При удалении файлов вывожу свою форму. При разном удалении (файл, папка, группа файлов) вывожу разные надписи на форме.
Правда нюансов много и работы много. Такой вопрос: а откуда эта информация: Цитата:
Я стараюсь сделать диалоги подобные виндовским. С удалением все нормально. Не понятно как отловить перемещение в корзину. Еще нужно получать имя удаляемого файла или папки, а если их много, то количество (ну как в винде). Получится это при перехвате DialogBoxParamW? |
|
10.11.2011, 10:54 | #17 |
Форумчанин
Регистрация: 23.04.2009
Сообщений: 346
|
Из отладчика и редактора ресурсов эта информация. Вступайте и декомпелируйте
Нет, ну правда..
|
10.11.2011, 12:31 | #18 |
Форумчанин
Регистрация: 23.04.2009
Сообщений: 346
|
И опять же, вам не нужно подделывать форму - просто в самом перехватчике вызовите диалоговое окно из shell32.dll, параметры все приходят в процедуру перехвата и возвращайте результат IDNO на выходе из перехвата, далее по коду анализируется этот результат работы функции и отталкиваясь от него происходит удаление..или не происходит удаление. То же самое и в ТоталКоммандере, с той лишь разницей, что там функция MessageBoxA и уже явно придется парсить строки содержащиеся в окне, чтобы ловить именно МсгБокс удаления файлов
Нет, ну правда..
|
10.11.2011, 13:39 | #19 |
Пользователь
Регистрация: 01.11.2011
Сообщений: 13
|
Я никогда не пользовался отладчиком.... Он декомпилирует в ассемблер? Это сложновато А что за отладчик?
Форму мне надо именно свою, потому как она сложная и просто готовым диалоговым окном не обойтись я думаю? Или вы не об этом? я делаю замену первых байт функции на переход на мою: Код:
Код:
Параметры как я понимаю приходят в dwInitParam? Потому что где еще? Но что с ним делать? |
11.11.2011, 16:03 | #20 |
Форумчанин
Регистрация: 23.04.2009
Сообщений: 346
|
(все имена структур вымышенные, любые совпадения - случайны и вообще все справедливо для установленной у меня версии Explorer, не факт что это не меняется)
DialogBoxParamW: lParam указатель на структуру xSplorer xSplorer: xSplorer+4h указатель на имя первого файла\папки fiest_name_pointer xSplorer+28h количество указанных файлов\папок fiest_name_pointer: file_name_pointer-8h указатель на массив имен all_files all_files заканчивается dd 0 каждое имя заканчивается dw 0 получаем имя первого из файлов, по смещению в 4 байта (там находится адрес строки) от указателя в lParam по смещению в 0х28 - счетчик числа удаляемых объектов, т.е. если там единица, то доступ к массиву имен не нужен если счетчик более единицы, то от указателя на имя первого файла отнимаем 8 байт и получаем в данной ячейке указатель на массив имен заканчивающийся четырьмя нулевыми байтами, имена разделены двойным нулевым байтом ибо везде юникод
Нет, ну правда..
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Отмена удаления в 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 |