· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Как узнать состояние процесса/потока

Посл.отвђт Сообщенiе


Дата: Июл 11, 2004 03:55:13

Всем привет!
Задача в том чтобы определить состояние процесса -- выполняется/приостановлен/завершен (в том числе принудительно). Среди функций API нужных не знаю, однако sysinternals process explorer способен определять и менять состояние процесса. Значит такое возможно.
Подскажите плиз. Заранее благодарен.


Дата: Июл 11, 2004 09:00:13

GetExitCodeProcess()


Дата: Июл 11, 2004 16:38:58

GetExitCodeProcess вернёт STILL_ACTIVE или код завершения. меня интересует suspended процесс или нет


Дата: Июл 11, 2004 18:19:53 · Поправил: Four-F

Понятие suspended к процессу неприменимо. Выполняется/приостановлен применимо только к потоку. Под suspended ProcessExplorer, скорее всего, имеет в виду, что все потоки процесса приостановлены. Видимо он перебирает все потоки процесса и делает им SuspendThread/ResumeThread или NtSuspendThread/NtResumeThread.

Состояние потоков процесса под NT+ можно узнать через
ZwQuerySystemInformation, SystemProcessesAndThreadsInformation,... Она вернет кучку структур SYSTEM_PROCESSES и SYSTEM_THREADS.
typedef struct _SYSTEM_THREADS {
. . .
    THREAD_STATE State;
. . .
}SYSTEM_THREADS,*PSYSTEM_THREADS;

typedef enum {
    StateInitialized,
    StateReady,
    StateRunning,
    StateStandby,
    StateTerminated,
    StateWait,
    StateTransition,
    StateUnknown
}THREAD_STATE;


Хотя я не уверен, что по полю State можно однозначно сделать вывод о том, что поток именно suspended.


Дата: Июл 12, 2004 13:00:18

Руссинович и Соломон, Внутреннее устройство винды, глава 6, читай внимательнее и найдёшь, там это написано/


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.036