Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.76
Konctantin
 Аватар для Konctantin
921 / 725 / 63
Регистрация: 12.04.2009
Сообщений: 1,700
#1

Получить список модулей указанного процесса - C++

24.08.2012, 11:00. Просмотров 2211. Ответов 3

Доброго времени суток.
Возникла проблема с получением списка модулей процесса.
Пытаюсь получить так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
BOOL ListProcessModules(DWORD dwPID)
{
  HANDLE hModuleSnap = INVALID_HANDLE_VALUE;
  MODULEENTRY32 me32;
 
  hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
  if(hModuleSnap == INVALID_HANDLE_VALUE)
    return FALSE;
 
  me32.dwSize = sizeof(MODULEENTRY32);
  if(!Module32First(hModuleSnap, &me32))
  {
    CloseHandle(hModuleSnap);
    return FALSE;
  }
 
  do
  {
    printf("MODULE NAME:     %s\n",   me32.szModule);
 
  }while(Module32Next(hModuleSnap, &me32));
 
  CloseHandle(hModuleSnap);
  return TRUE;
}
в итоге при вызове
C++
1
hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
получаю результат INVALID_HANDLE_VALUE(0хFFFFFFFF) и ошибку 299.

Когда выполняю операцию для текущего процесса, все работает хорошо.

ОС Windows 7 x64, но не работает и в 32 разрядной.
В качестве параметра передавал
C++
1
CreateToolhelp32Snapshot(TH32CS_SNAPMODULE ...
и
C++
1
CreateToolhelp32Snapshot(TH32CS_SNAPMODULE32 ...
У кого есть какие соображения?

ЗЫЫ. на текущий процесс устанавливал привилегии отладки, не помогло.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2012, 11:00     Получить список модулей указанного процесса
Посмотрите здесь:

C++ Получить имя процесса.
C++ Как получить код завершения процесса
Подключение дополнительных модулей и работа с функциями из этих модулей C++
C++ MinGW - как вывести список установленных модулей с версией?
C++ Получить список файлов и папок
C++ Меню пуск, получить список Win7
Получить список процессов C++
C++ Получить список файлов в каталоге
Получить список файлов и папок в директории C++
C++ Найти последнее вхождение указанного значения в список
C++ Получить список файлов в директории
Получить список драйверов DOS C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
edward_jonson
 Аватар для edward_jonson
157 / 157 / 25
Регистрация: 23.02.2011
Сообщений: 388
24.08.2012, 15:42     Получить список модулей указанного процесса #2
Скорее всего вы передаёте невалидный PID, ибо алгоритм правильный, к тому же с текущим процессом всё работает.

Добавлено через 11 минут
В качестве альтернативы можете попробовать EnumProcessModules()
-=ЮрА=-
24.08.2012, 15:54
  #3

Не по теме:

Konctantin, а код случайно не в DLL зашит?
PS: Кому интересно Мои MFC поделки
приложение MFC диспетчер процессов и окон

Konctantin
 Аватар для Konctantin
921 / 725 / 63
Регистрация: 12.04.2009
Сообщений: 1,700
25.08.2012, 17:54  [ТС]     Получить список модулей указанного процесса #4
Скорее всего вы передаёте невалидный PID,
это исключено...

В общем как пишут забугорные форумы: нельзя вызывать/получить информацию о процессе х64 из процесса х32.
в итоге, функция по получению адреса базового модуля выглядит так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Gets the memory address where the base module was loaded.
DWORD GetBaseAddress(DWORD dwProcessID)
{
    DWORD dwAddress = NULL;
    HANDLE hthSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, dwProcessID);
    if (hthSnapshot) 
    {
        MODULEENTRY32 me = { sizeof(me) };
        if (Module32First(hthSnapshot, &me))
        {
            CloseHandle(hthSnapshot);
            dwAddress = (DWORD)me.modBaseAddr;
        }
    }
 
    return dwAddress;
}
ЗЫ. не пойму только почему все это не работало на х32 разрядной винде (
ЗЫЫ. Проверял на другом компе (с установленой VISTA 32)


Konctantin, а код случайно не в DLL зашит?
нет, это пока что все в исполняемом файле...
Yandex
Объявления
25.08.2012, 17:54     Получить список модулей указанного процесса
Ответ Создать тему
Опции темы

Текущее время: 00:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru