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

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

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

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

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

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

Всем доброго дня
Возникла такая проблема: пишу под себя небольшую утилитку, использующую TWebBrowser, основная проблема - хранение куки в разных местах (например, запустили два экземпляра приложения - куки от первого пишутся в папку D:\cok1, куки от второго D:\cok2)

Перехватом CreateFileA удалось добиться подмены папки, файлы сохраняются. Затруднения возникают на стадии изменения этих файлов
Хоть перехват и работает, почему то не ловятся следующие обращения:


В трейсе последнего вызова вообще нету CreateFile + как мне показалось (хотя я мог что-то упустить) - все остальные функции работы с файлами не принимают путь до файла - только хэндл. Откуда он получается - тоже не нашел:


Собственно вопрос - как это исправить? Где может быть ошибка?
Используемый для хуков код ниже:
Код:
var   CreateFileBridge,OpenFileBridge:TFunctionRestoreData;
...
function NewCreateFile(lpFileName: PAnsiChar; dwDesiredAccess, dwShareMode: DWORD;
  lpSecurityAttributes:PSecurityAttributes; dwCreationDisposition, dwFlagsAndAttributes:DWORD; hTemplateFile:Cardinal):Cardinal; stdcall;
var t,newFileName:ansistring;
begin
  UnHookcodeHook(@CreateFileBridge);
  result:=0;
  try
  newFileName:=lpFileName;
  CheckForCookies(newFileName);
 result:=CreateFileA(PAnsiChar(newFileName),dwDesiredAccess,dwShareMode,lpSecurityAttributes,dwCreationDisposition,dwFlagsAndAttributes,hTemplateFile);
  finally
 SetProcedureHook(GetModuleHandle('kernel32.dll'),'CreateFileA',@NewCreateFile,@CreateFileBridge);
  end;
end;

...

  if not (@CreateFileBridge=nil) then
    UnHookcodeHook(@CreateFileBridge);
  SetProcedureHook(GetModuleHandle('kernel32.dll'),'CreateFileA',@NewCreateFile,@CreateFileBridge);
Библиотека взята отсюда (спасибо rpy3uH )
благодарность - сюда (не забываем писать от кого)

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

Разобрался сам
Перехватил еще NtOpenFile и ZwQueryFullAttributesFile и все заработало
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехват DeleteFileA (Delphi) Zer0 Помощь студентам 2 01.08.2012 22:19
Перехват сообщения в 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