Благодарю за то, что не оставили пост без внимания! Необходимо заменить стандартное сообщение Windows XP "Не удаётся удалить имя_файла. Объект используется..." на своё (само сообщение уже сформировано). Теории по хукам в интернете много, а вот кода я нигде не нашёл. Мне нужен код на Си для реализации подобной функции. Думаю подобные перехваты делали многие. Заранее благодарю за ответ!
Может инжект в процессы с подменной MessageBox на свою с проверкой на нужный текст! Или поиск по окнам но это заметно будет!
простой хук мессажбокса проверяешь текст - если строка совпала - подменяешь строку, и вызываешь оригинал если не совпала - вызываешь оригинал без подмены.
Буду искать исходники на n0name Это тот же вариант в смысле, с подменой текста? Вопрос немного не по теме: а как можно узнать полное имя неудаляемого файла? Windows же выдаёт только его короткое имя. Это тоже наверное как-то можно отловить?
Предложение интересное, но мне нужно подменять сообщение динамически. Задача состоит в том, чтобы показать имя процесса занявшего файл, его я с горем пополам получил
ЭТА мессага формируется динамически, поэтому пропатчить ее будет не проще. я конечно могу ошибаться, может я не знаю простых способов патча динамически формируемых мессаг?
в таком случае, мне кажется нужно хукать то, что вызывает мессажбокс, там должен быть хендл "неудаляемого" файла; а уж что вызывает этот мессажбокс я не знаю, ищи сам, или может ктото подскажет.
altlogic Это сообщение выдает EXPLORER.EXE, стало быть надо хукать DeleteFile (или нативные аналоги) и если DeleteFile возвращает неудачу, то далее вспает буй MessageBox, ну и проверка по соответсвующим параметрам. Чтобы хукать прочитай про Detours в гугли или здесь в FAQ'е.
Благодарю всех участвующих в обсуждении за помощь. я думаю в мессаджбокс хэндл файла уже не передаётся. Я так понял нужно перехватывать функцию DeleteFile, вызываемую Exporer'ом. Перехват должен состоять в определении возможности удаления файла. И если его(вообще какой-либо файл) нельзя удалить, то тогда нужно вешать хук на мессаджбокс. Я правильно понял задачу?
Практически да. Но всё же лучше посмотреть сорцы проводника и ориентироваться на конкретные связи, а не на абстрактную прикидку.
ну естественно, просто не получится ее так просто подменить, чтобы она выводила еще чтонибудь. по крайней мере мне так кажется. а то что я имел ввиду динамически - это то что добавляется в нее имя файла, а затем надо добавить имя процесса. при изначальной постановке задачи то что ты предлагаешь действительно подходило. я просто прочитал сразу все, и не обратил внимание что ты выложил этот пост до уточнения задачи. возможен конечно вариант патчить эту строку, а затем патчить процедурку, которая формирует из нее сообщение именно это я имел ввиду здесь и даже в изначальной задаче необходимо или уравнять строку по размеру старой или пересобирать весь ПЕ-файл.
IceStudent Гыг, если бы все исходные коды были доступны. IDA'у Топикстартеру в руки. someone Патчить файлы винды - это дико. Явно имеется ввиду падчинг в памяти - ну т.е. ищем в АП чужого процесса нужную строку предварительно найдя ее в IDA. Хотя способ не блещет универсальностью, хотя бы потому что в разноязыковых версиях будут разные строки. Кароч в топку такой метод. Хуки рулят.
Я с этим согласен. Но к сожалению тему дальше сейчас развивать не могу, так как время поджало совсем, и с преподом сошлись на том, что с меня хватит и консольного приложения определения процесса занявшего файл. Тем не менее я очень благодарен axe_roma'y, someone'y, n0name'y, Mental_Mirror'y и IceStudent'y за принятие участия в обсуждени данного вопроса. Возможно в следующем семестре этот вопрос будет поднят снова.