Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа с процессами

23K
02 июля 2007 года
MurzET
13 / / 02.07.2007
Никак не могу найти информацию о работе с процессами .

Меня интересуют следующие вопросы:

1) Как вывести на экран ( Работаю в Borland C++ Builder 6 ) информацию о всех процессах, запущенных в системе .
2) Как узнать адрес первой и последней ячеек памяти, занимаемой процессом?

P.S: Только ради Бога, не отсылайте меня к Рихтеру . Его пример у меня не работает .
4.3K
02 июля 2007 года
flat
142 / / 27.12.2005
Цитата:
1) Как вывести на экран ( Работаю в Borland C++ Builder 6 ) информацию о всех процессах, запущенных в системе



Код:
HANDLE HS = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        PROCESSENTRY32 P;
        P.dwSize = sizeof (PROCESSENTRY32);

        if (Process32First(HS, &P))
                do
                {
                        printf("%s\n", P.szExeFile);

                } while (Process32Next(HS, &P));
        CloseHandle(HS);
23K
23 сентября 2007 года
MurzET
13 / / 02.07.2007
Цитата: flat
Код:
HANDLE HS = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        PROCESSENTRY32 P;
        P.dwSize = sizeof (PROCESSENTRY32);

        if (Process32First(HS, &P))
                do
                {
                        printf("%s\n", P.szExeFile);

                } while (Process32Next(HS, &P));
        CloseHandle(HS);



HANDLE HS = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); - не проходит . Пишет "Cannot convert void to unsigned int *" .

23K
23 сентября 2007 года
MurzET
13 / / 02.07.2007
пишу

int FillProcessesList(TRichEdit slProcesses)

{THandle *hSnap ;
PROCESSENTRY32 pe32 ;
int i;

// Проверяем кооректность параметра
// Пролучаем снапшот состояния системных объектов
hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

и вот тут не проходит :(
29K
23 сентября 2007 года
Горлум
15 / / 09.09.2007
Цитата: MurzET
HANDLE HS = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); - не проходит . Пишет "Cannot convert void to unsigned int *" .



Ты хочешь сказать, что CreateToolhelp32Snapshot объявлена как возвращающая тип void? Или ты пропустил звёздочку (void*)? Если последнее, просто сделай каст:

 
Код:
HADNLE hSnap=(unsigned int*)CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

Если же всё-таки первое, то бросай этот долбаный Бильдер к чертям собачим.
32K
24 сентября 2007 года
htm
1 / / 24.09.2007
А для чего извращения с указателями?
 
Код:
HANDLE hProcessSnap;
hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );

Кстати есть прекрасный пример в MSDN.
367
24 сентября 2007 года
Meatcoins
303 / / 18.01.2006
Это делается так:
Код:
local cb:DWORD
local p:PVOID
local dwMemAddr:DWORD
and cb, 0
invoke ZwQuerySystemInformation, SystemProcessesAndThreadsInformation, addr p, 0, addr cb

.if cb!=0
invoke VirtualAlloc,0h,cb,MEM_COMMIT,PAGE_READWRITE
.if eax!=0
mov dwMemAddr,eax
mov p,eax
invoke ZwQuerySystemInformation,SystemProcessesAndThreadsInformation, p, cb, addr cb
            .if eax == STATUS_SUCCESS
            invoke MessageBox,0h,$CTA0("ZwQuerySystemInformation Ok"),$CTA0("Ok"),MB_OK
           mov eax,dword ptr p
            .endif
.else
invoke MessageBox,0h,$CTA0("VirtualAlloc Error"),$CTA0("Error"),MB_OK
.endif
invoke VirtualFree,dwMemAddr,cb,MEM_DECOMMIT
.if eax!=0
.else
invoke MessageBox,0h,$CTA0("VirtualFree Error"),$CTA0("Error"),MB_OK
.endif

.endif

В dwMemAddr будет адрес памяти, в которой будут все процессы!

Память заполнится вот такими структурами:
Код:
SYSTEM_PROCESSES STRUCT

    NextEntryDelta              DWORD   ?
    ThreadCount             DWORD   ?
    Reserved1               DWORD   6 dup(?)
    CreateTime              LARGE_INTEGER <>
    UserTime                LARGE_INTEGER <>
    KernelTime              LARGE_INTEGER <>
    ProcessName             UNICODE_STRING <>
    BasePriority                SDWORD  ?
    ProcessId               DWORD   ?
    InheritedFromProcessId          DWORD   ?
    HandleCount             DWORD   ?
    Reserved2               DWORD   2 dup(?)
    VmCounters              VM_COUNTERS <>
    IoCounters              IO_COUNTERS <>
    Threads                 SYSTEM_THREADS <>

SYSTEM_PROCESSES ENDS

NextEntryDelta - это указатель на следующую структуру!

Есть ещё EnumProcesses...
29K
24 сентября 2007 года
Горлум
15 / / 09.09.2007
Цитата:
Это делается так: ...

Ну ты и загнул! Человек на С++ пишет, причём в Бильдере, а ты ему Ассемблер. :D

27K
24 сентября 2007 года
Quark
12 / / 24.09.2007
Цитата: MurzET
Никак не могу найти информацию о работе с процессами .

Меня интересуют следующие вопросы:

1) Как вывести на экран ( Работаю в Borland C++ Builder 6 ) информацию о всех процессах, запущенных в системе .
2) Как узнать адрес первой и последней ячеек памяти, занимаемой процессом?

P.S: Только ради Бога, не отсылайте меня к Рихтеру . Его пример у меня не работает .



Тут всё просто. в первом случае есть замечательная апишка ZwQuerySystemInformation с флагом SystemProcessesAndThreadsInformation. Она выдаст пиды, имена, потоки всех процессов. Что касается памяти - тут можно обычным перебором (типа ReadProcessMemory) либо просмотреть страницы данного процесса - там тоже какая-то апишка есть.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог