Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.29;
Скачать: CL | DM;

Вниз

Запись в файл в DLL, THandle файла в разных процессах   Найти похожие ветки 

 
Dmitry_177   (2006-10-17 12:48) [0]

Привет всем! Мне нужно в 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.


 
Ketmar ©   (2006-10-17 13:06) [1]

а кто ж тебе наврал, что хэндлы от одного процесса подходят к другому???


 
Dmitry_177   (2006-10-17 13:20) [2]

А как же тогда сам хендл хука?


 
Ketmar ©   (2006-10-17 13:23) [3]

>[2] Dmitry_177 17-Oct-2006, 13:20
>А как же тогда сам хендл хука?
это исключение. %-)


 
Dmitry_177   (2006-10-17 13:27) [4]

Может есть какое-нибудь решение?


 
Ketmar ©   (2006-10-17 13:31) [5]

>[4] Dmitry_177 17-Oct-2006, 13:27
>Может есть какое-нибудь решение?
конечно, есть.
открывать файл заново, а не передавать хэндлы.
сделать сервис, которому передавать данные, а он уже будет писать в файл.
и ещё куча решений.



Страницы: 1 вся ветка

Текущий архив: 2006.10.29;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.112 c
15-1160162164
SkySpeed
2006-10-06 23:16
2006.10.29
Как можно вызвать программу в PHP с TEXT a?


2-1160955562
Silantiy
2006-10-16 03:39
2006.10.29
Rabota s documentami Word


15-1160100204
vidiv
2006-10-06 06:03
2006.10.29
Интерактивность в PDF


15-1160213675
Sperminator
2006-10-07 13:34
2006.10.29
Темы на siemens x65,x75


3-1157479783
DBE
2006-09-05 22:09
2006.10.29
paradox на другом компе