Автор
|
Тема: Как сохранять переменную в dll-ке?
|
RADIO |
опубликован 31-10-2001 17:08 MSK
Как мне сделать так, чтобы некая переменная (в моём случае строка) сохранялась в dll-ке, как это сделано в виндах с паролем на скрин-сейвер? (там пароль хранится в PASSWORD.CPL с ключом SCRSAVE) И как мне её вытаскивать и менять? Заранее Спасибо!
|
Demo_S
|
опубликован 31-10-2001 23:38 MSK
Хм, единственное, что я могу придумать, это заранее в длл место отвести а потом запускать процесс, который проверяет, загружена ли еше эта длл, и как только она выгружена, пишет в файл этой длл новую строку. а пока длл загружена надо хранить строку в памяти. А для этого в длл делаешь шаред ресурс, который будет общим для всех копий дллл. таким образом , пока длл в памяти, все ее использующие апликашены будут брать строку из этого шаред ресурса, а как она выгрузиться, так ее запущенный процесс быстренько пропатчит.будут вопросы по организации шаред секции - пиши. |
Hvostarik
|
опубликован 01-11-2001 00:56 MSK
если не секрет, шаред мемори(переменная) организуется с помощью .def файла, раздела sections, и #pragma data_seg ???если есть рабочий пример, интересно глянуть(кажется он где-то проскакивал на этом сайте) |
RADIO
|
опубликован 01-11-2001 13:09 MSK
То есть надо сделать так (у меня библиотеку использует заведомо один процесс): HMODULE hLib = LoadLibrary(...); ... FreeLibrary(hLib); и потом открывать dll-ку как нормальный файл, искать нужную секцию и переписывать её? А штатными, так сказать, средствами - никак? И ещё - как проверить, загружена ли dll в данный момент, если она используется несколькими процессами? |
Demo_S
|
опубликован 04-11-2001 02:31 MSK
2Hvostarik def файл LIBRARY hookdll DESCRIPTION 'Keyboard and Mouse Hook'EXPORTS InitHook KeyboardProc ReleaseHook SECTIONS .hdata READ WRITE SHARED cpp файл #pragma data_seg(".hdata") HHOOK g_curhook=0;
char szBuf[MaxEls+10]={0}; short BufSize=0; char FileName[32]={0}; #pragma data_seg() BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { g_hMod=hModule; .... 2RADIO да. штатными может и можно, просто я не знаю. если файл для записи не открывается - значит занят. хотя наверное есть функцша, можно в мсдн порыться..
|