Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись в файл в DLL, THandle файла в разных процессах 
:(
    Опции темы
Dmitry_177
Дата 17.10.2006, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



Привет всем! Мне нужно в dll записывать в файл информацию и с этим у меня возникли проблемы... Запись нужно делать в функции обработки хука, и т.к. все глобальные переменные объявленные в библиотеке в каждом процессе обнуляются (имеют свой экземпляр) сделал отображение в память (CreateFileMapping) переменных, все вроде хорошо, но в файл ничего не записывается...((( Пробовал создавать по разному файл, и паскалевским методом (AssignFile) на WinAPI, и так и так не работает... Подскажите пожалуйста!

Код

const
  UniqueHook: PChar = 'InfoMMF';

type
  PHookInfo = ^THookInfo;
  THookInfo = packed record
    Hook: HHook;
    File: THandle;  // TextFile;
    BytesWrite: DWord;
  end;

var
  HookInfo: PHookInfo;
  MMFHandle: THandle;

function HookProc(Code: Integer; wParam: Word; lParam: LongInt): LongInt; stdcall;
begin
  WriteFile();  // WriteLn();    -> ни первой ни второй функцией (в зависимости от создаваемого файла, ничего не записывает в файл)
end;

procedure InstallHook(); export; stdcall;
begin
  HookInfo^.File := CreateFile('c:\test.txt', GENERIC_WRITE, 0, nil, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);

  {AssignFile(HookInfo^.File, 'c:\test.txt');
  if FileExists('c:\test.txt') then
    Append(HookInfo^.File)
  else
    Rewrite(HookInfo^.File);}

  HookInfo^.Hook := SetWindowsHookEx(...);
end;

procedure RemoveHook(); export; stdcall;
begin
  UnHookWindowsHookEx(HookInfo^.Hook);
  CloseHandle(HookInfo^.File);   // CloseFile(HookInfo^.File);
end;

procedure OpenGlobalData();
begin
  MMFHandle := CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, SizeOf(THookInfo), UniqueHook);
  HookInfo := MapViewOfFile(MMFHandle, FILE_MAP_ALL_ACCESS, 0, 0, SizeOf(THookInfo));
end;

procedure CloseGlobalData();
begin
  UnmapViewOfFile(HookInfo);
  CloseHandle(MMFHandle);
end;

procedure DLLEntryPoint(dwReason: DWord); stdcall;
begin
  case dwReason of
    DLL_PROCESS_ATTACH: OpenGlobalData;
    DLL_PROCESS_DETACH: CloseGlobalData;
  end;
end;

exports
  InstallHook,
  RemoveHook;

begin
  DLLProc:= @DLLEntryPoint;
  DLLEntryPoint(DLL_PROCESS_ATTACH);
end.

PM MAIL   Вверх
Dmitry_177
Дата 17.10.2006, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



На сколько я понял, хендл файла от одного процесса не подходит к другому... Может есть какое-нибудь решение этой проблемы?
PM MAIL   Вверх
Romikgy
Дата 17.10.2006, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



не понял общего смысла,  smile
но может слова эти помогут pipes, socket


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Dmitry_177
Дата 17.10.2006, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



Не помогут, тут только Dll и все.. передавать в программу или сервис ничего не надо... Нужно записывать в файл из библиотеки в разных процессах, в которые она вклинивается
PM MAIL   Вверх
Romikgy
Дата 17.10.2006, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



тогда бери обычные файлы  и работай с ними , только в системе свой допустим семафор заведи и юзай файл по очереди всеми dll ками 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1288 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.