![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
18192123 |
![]()
Сообщение
#1
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Задание вот такое: получить список процессов, модулей и их свойств.
Из msdn нашла, как получить список того и того. Подскажите пожалуйста, как теперь получить их свойства?
void PrintProcessNameAndID( DWORD processID, unsigned int i)
{
TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");
// Get a handle to the process.
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, processID );
// Get the process name.
if (NULL != hProcess )
{
HMODULE hMod;
DWORD cbNeeded;
if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),
&cbNeeded) )
{
GetModuleBaseName( hProcess, hMod, szProcessName,
sizeof(szProcessName)/sizeof(TCHAR) );
}
}
// Print the process name and identifier.
wsprintf(pszStrPID,_T("%d %s (PID: %u)"), i,szProcessName, processID);
SendMessage(hListBoxAllInfo,LB_ADDSTRING, 0, (LPARAM)(LPCSTR)pszStrPID);
//_tprintf( TEXT("%s (PID: %u)\n"), szProcessName, processID );
CloseHandle( hProcess );
}
void PrintModules( DWORD processID )
{
HMODULE hMods[1024];
HANDLE hProcess;
DWORD cbNeeded;
unsigned int i;
// Print the process identifier.
wsprintf(pszStrPID,_T(" Process ID: %u"), processID);
SendMessage(hListBoxAllInfo,LB_ADDSTRING, 0, (LPARAM)(LPCSTR)pszStrPID);
//printf( " Process ID: %u", processID );//<----
// Get a list of all the modules in this process.
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, processID );
if (NULL == hProcess)
return;
if( EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded))
{
for ( i = 0; i < (cbNeeded / sizeof(HMODULE)); i++ )
{
TCHAR szModName[MAX_PATH];
// Get the full path to the module's file.
if ( GetModuleFileNameEx(hProcess, hMods[i], szModName,
sizeof(szModName)/sizeof(TCHAR)))
{
// Print the module name and handle value.
wsprintf(pszStrPID,_T("%s (0x%08X)"),szModName, hMods[i]);
SendMessage(hListBoxAllInfo,LB_ADDSTRING, 0, (LPARAM)(LPCSTR)pszStrPID);
// _tprintf(TEXT("\t%s (0x%08X)\n"),
// szModName, hMods[i]);
}
}
}
CloseHandle( hProcess );
}
void OnClickButAllData(HWND hwnd)
{
RECT Rect;
GetClientRect(hwnd,&Rect);
unsigned int i;
// Get the list of process identifiers.
DWORD aProcesses[1024], cbNeeded, cProcesses;
wsprintf(pszStrPID,_T("_Name_of_Process__(PID)_"));
SendMessage(hListBoxAllInfo,LB_ADDSTRING, 0, (LPARAM)(LPCSTR)pszStrPID);
if (!EnumProcesses(aProcesses, sizeof(aProcesses),&cbNeeded))
MessageBox(hWndMain,TEXT("Error!"),TEXT("WARNING"),MB_ICONERROR);
// Calculate how many process identifiers were returned.
cProcesses = cbNeeded / sizeof(DWORD);
wsprintf(pszStrPID,_T("There are %d processes:"),cProcesses-1);
SendMessage(hListBoxAllInfo,LB_ADDSTRING, 0, (LPARAM)(LPCSTR)pszStrPID);
// Print the name and process identifier for each process.
for ( i = 0; i < cProcesses; i++ )
if( aProcesses[i] != 0 )
{
PrintProcessNameAndID( aProcesses[i],i);
PrintModules( aProcesses[i]);
}
}
|
18192123 |
![]()
Сообщение
#2
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Для получения информации о модулях нашла функцию GetModuleInformation(), реализовала её.
А для получения информации о процессах хочу использовать QueryWorkingSet().
BOOL QueryWorkingSet(
HANDLE hProcess,
PVOID pv,
DWORD cb
);
С первым параметром понятно, но объясните пожалуйста - как интерпретировать 2-й? И как задать 3-й? Сообщение отредактировано: 18192123 - 26.10.2008 17:21 |
volvo |
![]()
Сообщение
#3
|
Гость ![]() |
Цитата как интерпретировать 2-й? И как задать 3-й? Вот так:// dwProcessId - это PID, для которого должна быть QueryWorkingSet
HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, dwProcessId );
PVOID pv[MAX_COUNT] = {0}; // MAX_COUNT - обычный #define... Скажем, 500 или 1000
if ( !QueryWorkingSet ( hProcess, pv, sizeof(pv) ) )
{
// Можно работать с pv
}
Кстати, а ты знаешь, что именно возвращает функция QueryWorkingSet? Что в массиве pv содержится? |
18192123 |
![]()
Сообщение
#4
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
|
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Цитата(Microsoft.com) The working set of a process is the set of memory pages currently visible to the process in physical RAM memory. Набор страниц памяти, видимых процессу, в физической памяти... PVOID pv[MAX_COUNT] = { 0 } ;
char s[128];
if (!QueryWorkingSet ( hProcess, pv, sizeof(pv) )) {
// Выдать сообщение о сбое QueryWorkingSet
}
else {
for(unsigned int i = 0;i < MAX_COUNT; i++) {
if(pv[i] != NULL ) {
if(i == 0) {
sprintf(s, "Всего записей: 0x%x\n", pv[i]);
// s выводится на экран/memo/listbox
}
else {
sprintf(s, "\t0x%-4x pv : 0x%X\n", i, (DWORD)pv[i]);
// s выводится на экран/memo/listbox
}
}
else
{
break ;
}
}
}
|
18192123 |
![]()
Сообщение
#6
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
хм...а у меня строки из каких-то совершенно посторонних символов вывелись...
я к коду из предыдущего поста просто добавила вывод в listbox...
SendMessage(hListBoxAllInfo,LB_ADDSTRING, 0, (LPARAM)(LPCSTR)s);
|
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
|
18192123 |
![]()
Сообщение
#8
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Вот такие, примерно? .. Так это оно и есть, список страниц памяти, видимых твоему процессу... А ты что ожидала увидеть? если бы такие...вот такие вот.. Эскизы прикрепленных изображений ![]() |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Цитата вот такие вот.. А, ну так это из-за юникода: wchar_t s[128];
// ...
wsprintf(s, L"\t0x%-4x pv : 0x%X\n", i, (DWORD)pv[i]);
и все будет отображаться... |
![]() ![]() |
![]() |
Текстовая версия | 19.07.2025 6:54 |