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

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

Как узнать какие DLL подгружены к процессу? [D6, Win2k, WinXP]


Xemax ©   (2002-10-12 21:24:00) 

Как узнать какие DLL подгружены к процессу? Это надо сделать используя ТОЛЬКОбиблиотеки Ntdll.dll и Kernel32.dll. Еще раз обращу внимание на слово ТОЛЬКО- PSAPI.dll выходит за граници этого только!!!


Толик   (2002-10-14 10:35:00) [1]

В StringList записываются имена подгруженных файлов и HICON ассоциированных с ними иконок

procedure EnumLoadingModule(const AStrings: TStrings);
var
MemoryInfo: TMemoryBasicInformation;
Region: longword;
pStr: pchar;
FileInfo: PSHFileInfo;
const
SizeFileInfo: longword = System.SizeOf(TSHFileInfo);
begin
Region := 0;
pStr := SysUtils.StrAlloc(MAX_PATH);
try
FileInfo := System.GetMemory(SizeFileInfo);
try
while Windows.VirtualQuery(pointer(Region), MemoryInfo, System.SizeOf(MemoryInfo)) =
System.SizeOf(MemoryInfo) do
with MemoryInfo do begin
if (State <> MEM_FREE) and (BaseAddress <> nil) and (AllocationBase = BaseAddress) then begin
if GetModuleFileName(longword(BaseAddress), pStr, MAX_PATH) > 0 then begin
ShellAPI.SHGetFileInfo(pStr, 0, FileInfo^, SizeFileInfo,
SHGFI_ICON or SHGFI_SMALLICON);
AStrings.AddObject(pStr, TObject(FileInfo^.hIcon));
end;//if
end;//if
Region := Region + RegionSize;
end;//with
finally
System.FreeMemory(FileInfo);
end;//try
finally
SysUtils.StrDispose(pStr);
end;//try
end;


Digitman   (2002-10-14 09:12:00) [2]

нет, это не PEB.
это жалкое подобие PEB

а что тебе не читается обычными (документированными) средствами-то ?

в цикле (с пом. ф-ции VirtualQuery[Ex]) пройдись по всем регионам ВАП процесса, отфильтруй только те, что имеют MEMORY_BASIC_INFORMATION.TYPE = MEM_IMAGE, базовый адрес каждого из полученных регионов трактуй как хэндл PE-модуля и вызывай для этого хэндла GetMofuleFileName().
И всех делов ! Фильтр по TYPE = MEM_IMAGE заведомо работает на всех NT-based платформах, так что - проще способа не найдешь


Xemax   (2002-10-13 18:20:00) [3]

typedef struct _PEB {
BYTE Reserved1[2];
BYTE BeingDebugged;
BYTE Reserved2[229];
PVOID Reserved3[59];
ULONG SessionId;
} PEB, *PPEB;

И что мне потом с этой структурой делать?


Digitman   (2002-10-13 13:33:00) [4]

читай все относящееся к структуре PEB (process environmemt block)


Наверх

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