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

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

Ответ давно <a href="http://www.sql.ru/forum/actualtopics.aspx?search=%CA%E0%EA+%EF%EE%**%F3%F7%E8%F2%FC+%F1%EF%E8%F1%EE%EA+%E2%F1%E5%F5+%E7%E0%EF%F3%F9%E5%ED%ED%FB%F5+%EF%F0%EE%F6%E5%F1%F1%EE%E2+&submit=%CD%E0%E9%F2%E8&bid=20" target="_blank">здесь</a>. Перед тем, как задать вопрос, нужно попытатся воспользоваться поиском
Просмотрев приведенные ссылки, я, уважаемый 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

Кури пример <a href="http://rouse.drkb.ru/files/taskmon.zip" target="_blank">taskmon</a> <a href="http://rouse.drkb.ru/winapi.php" target="_blank">отсюда</a>, там все есть. Суть в вызове 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

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