Форум: "Начинающим";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];
ВнизЗапись в файл в 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.391 c