![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать какие 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)