Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 09.12.2009, 18:23   #1
transserg
Пользователь
 
Регистрация: 24.09.2009
Сообщений: 10
Репутация: 33
По умолчанию список всех загруженных модулей в системе

првиет всем как получить список всех модулей которые испольщуются процессами в системе?
получаю модули так
Код:

Procedure GetSystemInformation;
 var
   Temp: PSYSTEM_MODULE_INFORMATION;
   modin:PSYSTEM_MODULE_INFORMATION;
   ReturnLength: DWORD;
  I: integer;
  ou:integer;
 begin
  ou:=0;
   try
     ReturnLength := 0;
     if NtQuerySystemInformation(SystemModuleInformation,nil, 0, ReturnLength) <> STATUS_INFO_LENGTH_MISMATCH then
      Exit;
     if ReturnLength > 0 then
       begin
        GetMem(modin, ReturnLength);
        try
         if NtQuerySystemInformation(SystemModuleInformation,modin, ReturnLength, ReturnLength) = 0 then
         begin
           Temp := modin;
           for I := 0 to Temp^.uCount do
      //     if pos('.dll',String(Temp^.aSysM[i].ImageName))>0 then
             Form2.ListBox1.Items.Add(ExtractFileName(Temp^.aSysM[i].ImageName));
         end;
       finally
         FreeMem(modin);
       end;
     end;
   finally
   end;
end;

но заметил что выводит модули только своего процесса а не все что в системе
transserg вне форума   Ответить с цитированием
Старый 09.12.2009, 19:37   #2
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Адрес: Санкт-Петербург
Сообщений: 178
Репутация: 33

icq: 478-807-730
По умолчанию

Пример на C++, но идея общая:

Код:

//Перечисление модулей процесса
int EnumerateModules(DWORD PID)
{
	//Входной параметр - идентификатор процесса, чьи модули мы собираемся
	//перечислять. Во первых создадим snapshot информации о модулях
	//теперь нам нужна информация о конкретном процессе - процессе
	//с идентификатором PID
	HANDLE pMdlSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, PID);
	bool bIsok = false;
	//структура с информацией о модуле
	MODULEENTRY32 MdlEntry;
	//зададим размер
	MdlEntry.dwSize = sizeof(MODULEENTRY32);
	//и найдем первый модуль
	bIsok = Module32First(pMdlSnap, &MdlEntry);
	//и далее, как и с процессами
	while(bIsok)
	{	
		//печатаем имя модуля
		printf("	%s n", MdlEntry.szModule);
		//и переходим к следующему
		bIsok = Module32Next(pMdlSnap, &MdlEntry);	
	}
	//чистим память!
	CloseHandle(pMdlSnap);
	return 1;
}

//Перечисление процессов
	int EnumerateProcs(void)
{
	//создаем "снимок" информации о процессах
	//первый параметр функции - константа, определяющая,
	//какую информацию нам нужно "снять", а второй - 
	//идентификатор процесса, к которому относится эта
	//информация. В данном случае это 0 т.к. мы делаем
	//снимок всех процессов
	HANDLE pSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

	bool bIsok = false;
	//Структура, в которую будут записаны данные процесса
	PROCESSENTRY32 ProcEntry;
	//установим ее размер, это необходимое действие
	ProcEntry.dwSize = sizeof(ProcEntry);
	//теперь определим первый процесс
	//первый параметр функции - хэндл "снимка" информации
	//второй - адрес структуры PROCESSENTRY32
	//true - в случае удачи, false - в случае неудачи
	bIsok = Process32First(pSnap, &ProcEntry);	
	//здесь можно было вставить роскошный цикл for(....) но это
	//не совсем удобочитаемо
	//так что цикл while
	while(bIsok)
	{
		//печатаем имя процесса, его идентификатор
		//теперь, когда у нас есть структура ProcEntry
		//То, какую информацию вы из нее возьмете, зависит
		//только от задачи ))
		printf("%s  %un", ProcEntry.szExeFile, ProcEntry.th32ProcessID);
		bIsok = Process32Next(pSnap, &ProcEntry);
	}
	//чистим память!
	CloseHandle(pSnap);
	return 1;
}

Подробнее смотрим тут
__________________
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума   Ответить с цитированием
Старый 09.12.2009, 19:47   #3
transserg
Пользователь
 
Регистрация: 24.09.2009
Сообщений: 10
Репутация: 33
По умолчанию

nazavrik СПАСИБО но не то... требуется именно на натив апи =) и вывести сразу все загруженные модули а не для каждого процесса отдельно.... вопрос стоит потому что ищется вариант такой чтоб не просматривать каждый процесс по отдельности в поисках модулей
transserg вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать список всех свойств TWebbrowser eskander Общие вопросы Delphi 1 26.03.2009 11:12
Как получить список всех своих ip адресов now9009 Работа с сетью в Delphi 1 18.03.2009 06:40
Получить тексты всех окон в системе micaell Win Api 1 25.02.2009 10:02
список всех открытых файлов и папок. Teleport Общие вопросы Delphi 4 22.06.2008 11:29
Как узнать список всех окон Никки Общие вопросы Delphi 5 23.01.2008 09:10


16:12.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru