Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать какая программа загрузила мою DLL? [D6, NT4, Win2k, WinXP]


Страницы:   1 2

VBill ©   (2002-03-19 16:55:00) 

Как узнать какая программа загрузила мою DLL?
Надо получить о ней хоть какую нибудь информацию - HANDLE or имя файла or и т.д.


Digitman   (2002-03-20 16:25:00) [21]

>Dimka Maslov
Я не проверял, но ! Если библ-ку динамически востребовал additional thread некоего процесса ?


Dimka Maslov   (2002-03-20 15:22:00) [22]

Всё о-о-о-чень просто. Для того, чтобы узнать имя процесса, загрузившего библиотеку, достаточно воспользоваться стандартной функцией ParamStr(0). Это даст правильный результат даже если бибиотека используется из MSVC++!


Digitman   (2002-03-20 09:38:00) [23]

Points to a procedure invoked by a DLL entry point.

Unit

System

Category

miscellaneous routines

var DLLProc: Pointer;

Description

DLLProc is used to specify a procedure that is invoked every time a DLL"s entry point is called. A procedure assigned to DLLProc must take one parameter of type Integer. For example,

procedure LibraryProc(Reason: Integer);

When the procedure is invoked, this single parameter contains a value between 0 and 3 as defined by the following group of constants in the Windows unit.

const

DLL_PROCESS_DETACH = 0;
DLL_PROCESS_ATTACH = 1;
DLL_THREAD_ATTACH = 2;
DLL_THREAD_DETACH = 3;

For further details on the meaning of these constants, refer to the description of the DllEntryPoint function in the Win32 API online help.

Note: DLL_PROCESS_ATTACH is passed to the procedure only if the DLL’s initialization code calls the procedure and specifies DLL_PROCESS_ATTACH as a parameter.

---------------------------------------------------------------
Резюме :
в теле DllProc (см.хэлп, как ее "перехватить") с параметром DLL_PROCESS_ATTACH или DLL_THREAD_ATTACH достаточно вызвать MainThreadId или GetCurrentThreadId, чтобы, получив Id процесса/потока, использовать этот Id для получения инф-ции о процессе/потоке, "подключившемся" к твоей DLL.


paul_shmakov   (2002-03-20 01:42:00) [24]

2 Dimka Maslov:
насчет обычного $400000 - не правда, для получения этого числа нужно использовать GetModuleHandle(nil)


Виктор Щербаков   (2002-03-19 17:34:00) [25]


> причина вызова функции (насколько я помню).

Чего ж еще нужно? Если причина вызова DllMain- проецирование dll в адресное пространство процесса, то исследуй наздоровье загрузивший dll процесс например так: Dimka Maslov © (19.03.02 17:21)


VBill   (2002-03-19 17:30:00) [26]

Виктор Щербаков
До задания вопроса изучил DllProc и ничего интересного там не нашел - HMODULE DLLки и причина вызова функции (насколько я помню).

Dimka Maslov
Попробую.
>Обычно hInstance ...
А если нет ?)


Dimka Maslov   (2002-03-19 17:21:00) [27]

Обычно hInstance основного модуля в процессе равен $00400000 (если его Image Base не переопределён программистом, создавшим его). Этим и можно воспользоваться для определении пути к программе, загрузившей динамическую библиотеку.

function GetApplicationName: string;
var
Buffer: array [0..MAX_PATH-1] of
begin
GetModuleFileName($00400000, @Buf[0], SizeOf(Buffer));
Result:=PChar(@Buf[0]);
end;


Виктор Щербаков   (2002-03-19 17:12:00) [28]

Тогда смотри в хэлпе DllProc.
Но лучше почитать у Рихтера про DllMain.


VBill   (2002-03-19 17:06:00) [29]

Это которые CreateToolhelp32Snapshot и т.д?? Тогда
1. WinNT 4.0 Unsupported
2. Какая именно функция??

Мне надо в момент загрузки DLL (не обязательно при загрузке, но имхо в другое время не получится точно) узнать какая прога ее загружает.


Виктор Щербаков   (2002-03-19 17:00:00) [30]

Смотри Tool Help Functions.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо