Системные процессы

NDAleksey

Доброго времени суток всем! Следующим кодом получаю список процессов:PROCESSENTRY32 proc; HANDLE h;h = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);proc.dwSize = sizeof(PROCESSENTRY32);Process32First(h, &proc);Memo1->Text = "";while ( Process32Next(h, &proc) ) Memo1->Lines->Add(String(proc.szExeFile));Возникает вопрос: как разделить процессы на системные и несистемные (как в taskmanager)?P.S. Извиняюсь что код не на Дельфи, но если кто поможет буду благодарен.P.P.S. Очень надеюсь на расширенный ответ....
8 ответов

NDAleksey

Ответ давно здесь. Перед тем, как задать вопрос, нужно попытатся воспользоваться поиском


NDAleksey

Ответ давно здесь. Перед тем, как задать вопрос, нужно попытатся воспользоваться поиском
Просмотрев приведенные ссылки, я, уважаемый Kozer, не нашел ответа на мой вопрос. А Вы видимо его не совсем поняли. Благо моя упертость именно в этом направлении позволила мне конкретизировать мой вопрос. Теперь мне нужно узнать в каком контексте запущен был exe-файл (то есть с какими правами — пользователя, системы и так далее). Если кому-нибудь не будет затруднительно, то прошу дать ответ или ссылку на ответ...


NDAleksey

Кури пример taskmon отсюда, там все есть. Суть в вызове NtQuerySystemInformation.


NDAleksey

wellwell, NtQuerySystemInformation may be altered or unavailable in future versions of Windows. Applications should use the alternate functions listed in this topic.


NDAleksey

Кури пример taskmon отсюда, там все есть. Суть в вызове NtQuerySystemInformation.
В приведенном примере есть ошибка. Надо заменить блок:
Temp := Pointer(DWORD(Temp) + Temp^.NextOffset);
 <b>until</b> Temp^.NextOffset = <b>0</b>;
на
AOffset := Temp^.NextOffset;
 Temp := Pointer(DWORD(Temp) + AOffset);
 <b>until</b> AOffset = <b>0</b>;


NDAleksey

А иначе съедается ряд информации, эта типичная ошибка, которую очень часто приходится наблюдать.


NDAleksey

И все-таки, что такое "системный процесс"?__Avenger__, у вас ТМ не той системы


NDAleksey

В приведенном примере есть ошибка. Надо заменить блок:
Temp := Pointer(DWORD(Temp) + Temp^.NextOffset);
 <b>until</b> Temp^.NextOffset = <b>0</b>;
на
AOffset := Temp^.NextOffset;
 Temp := Pointer(DWORD(Temp) + AOffset);
 <b>until</b> AOffset = <b>0</b>;
Точно, тогда последняя запись теряется.