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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2012, 16:59   #1
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию Перехват DeleteFileA (Delphi)

Всем добрый вечер, уже день ковыряюсь, не могу понять в чем проблема.

Суть - нужно перехватывать удаление кукисов и подменять путь к ним (хук используется локальный), используется TWebBrowser
С CreateFileA все работает как часы. А вот перехват DeleteFileA выдает AV

Пример кода:

Код:
var DelFile:TFunctionRestoreData;

procedure CheckForCookies(var AFileName: ansistring);
begin
    if ContainsText(AFileName,'\Cookies\') then begin
//    if not ContainsText(NewFileName,'\Cookies\Low') then
//      newFileName:=Format('D:\test\%d\',[FValue])+ExtractFileName(newFileName)
//    else
      Delete(AFileName,1,pos('\Cookies\',AFileName)+8);
      AFileName:=Format('D:\test\%d\',[FValue])+ExtractFileName(AFileName);
    ForceDirectories(ExtractFileDir(AFileName));
  end;
end;

function NewDeleteFile(lpFileName:PAnsiChar):boolean;
var newFileName:ansistring;
begin
  if lpFileName=nil then begin
    result:=false;
    exit;
  end;

  if lpFileName='' then begin
    result:=false;
    exit;
  end; //этот кусок уже следствие экспериментов
  newFileName:=lpFileName;
  CheckForCookies(newFileName);
  UnHookcodeHook(@DelFile);
  result:=windows.DeleteFileA(PAnsiChar(newFileName));
  SetProcedureHook(GetModuleHandle('kernel32.dll'),'DeleteFileA',@NewDeleteFile,@DelFile);
end;

procedure TForm3.Button1Click(Sender: TObject);
begin
  FValue:=Random(1000);
  Caption:=IntToStr(FValue);
  if not (@DelFile=nil) then
    UnHookcodeHook(@DelFile);
  SetProcedureHook(GetModuleHandle('kernel32.dll'),'DeleteFileA',@NewDeleteFile,@DelFile);
Все используемые переменные (CookiePath,FValue - инициализированы и в них стоят нужные значения)
Используемый модуль для хуков закинул во вложение
P.S. Не исключено, что рязрядность системы имеет значение, на всякий случай - x64 (приветствуются пинки в нужную сторону для того, чтобы код работал под разными системами)

Заметил, что валится при таком условии:

т.е. при перехвате указатель на строку передается какой-то очень уж странный.
Вложения
Тип файла: rar apihooktools.rar (2.3 Кб, 10 просмотров)
благодарность - сюда (не забываем писать от кого)

Последний раз редактировалось Zer0; 31.07.2012 в 17:34.
Zer0 вне форума Ответить с цитированием
Старый 01.08.2012, 13:14   #2
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

Эх, уже в который раз остаюсь без ответа
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 01.08.2012, 22:19   #3
Djleito
Пользователь
 
Аватар для Djleito
 
Регистрация: 19.06.2012
Сообщений: 26
По умолчанию

а какая именно выдается ошибка?
Продаю исходник на программу-тестовик по биологии, обращаться по icq: 613-206-971 или в личку
Djleito вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехват Miha85193 Общие вопросы Delphi 2 23.05.2012 13:16
Перехват сообщения в Delphi консольного приложения. Never74 Общие вопросы Delphi 2 26.09.2011 19:55
Delphi! Перехват нажатия клавиши при свернутой форме? AlienNation Общие вопросы Delphi 22 24.08.2011 20:23
статья - Перехват API функций. Основы. Delphi Pblog Обсуждение статей 0 23.06.2010 05:13
Перехват нажатия ЛКМ [Delphi/Hooks] anGeee Win Api 1 07.12.2009 00:58