Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.52/48: Рейтинг темы: голосов - 48, средняя оценка - 4.52
 Аватар для rusack007
22 / 22 / 9
Регистрация: 30.07.2015
Сообщений: 161

Список процессов и пользователей

30.07.2015, 17:20. Показов 10765. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер,
Я в WinAPI новичок, потому хотел бы попросить помощи в программе у более опытных программистов.

Необходимо выдать список процессов, их id, имя пользователя, запустившего процесс, а также найти свой собственный процесс. Покопавшись в MSDN и других источниках, написал такой говнокод

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// processExplorer.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <windows.h>
#include <tlhelp32.h>
 
#define MAX_NAME 256
 
char* getProcessUsername(HANDLE hSnapshot, PROCESSENTRY32 processList)
{
    DWORD dwSize = 256;
    HANDLE hProcess;
    TOKEN_USER *pUserInfo;
    static char staticName[MAX_NAME];
    char name[MAX_NAME];
    char domain[MAX_NAME];
    char *result;
    int iUse;
 
    hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processList.th32ProcessID);
    OpenProcessToken( hProcess, TOKEN_QUERY, &hSnapshot );
    pUserInfo = (PTOKEN_USER) GlobalAlloc( GPTR, dwSize );
    GetTokenInformation(hSnapshot, TokenUser, pUserInfo, dwSize, &dwSize );
    LookupAccountSidA( 0, pUserInfo->User.Sid, name, &dwSize, domain, &dwSize, (PSID_NAME_USE)&iUse );
    strncpy_s(staticName, name, _TRUNCATE);
    //printf( "%s\n", lpDomain, lpName );
    result=staticName;
    return result;
}
 
 
VOID printProcessList(HANDLE CONST hStdOut)
{
    PROCESSENTRY32 processList;
    TCHAR szBuff[1024];
    DWORD dwTemp;
    HANDLE CONST hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    HANDLE hProcess;
    HANDLE hCurrentProcess;
 
    processList.dwSize = sizeof(PROCESSENTRY32);
    Process32First(hSnapshot, &processList);
    while(Process32Next(hSnapshot, &processList))
    {
        wsprintf(szBuff, L"ID: %08X; *.exe file: %s\r\n",
            processList.th32ProcessID, processList.szExeFile);
        WriteConsole(hStdOut, szBuff, lstrlen(szBuff), &dwTemp, 0);
        printf("User: %s \n", getProcessUsername(hSnapshot, processList));
        hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processList.th32ProcessID);
        hCurrentProcess = GetCurrentProcess();
        if (hProcess == hCurrentProcess)
        {
            printf("  <-- It's my process");
        }
//      getProcessUsername();
//      printf("\n");
    }
    CloseHandle(hSnapshot);
}
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    HANDLE CONST hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    printProcessList(hStdOut);
    
    ExitProcess(0);
    return 0;
}
Собственно, пользователя выдаёт, а вот псевдопользователей типа "СИСТЕМА" не пишет, а выдаёт сплошные "???". Ну и мой процесс не находит. Помогите, пожалуйста!

P.S. Сильно по голове не бейте, нуб пока ещё
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.07.2015, 17:20
Ответы с готовыми решениями:

Список процессов.
Здравствуйте. Я вывел на экран список процессов запущенных в системе с помощью ToolHelp32 API. (CreateToolhelp32Snapshot, Process32First и...

Не создается список процессов
Здравствуйте! Подскажите, пожалуйста почему после получения списка потоков нельзя получить список процессов, т.е. после вызова функции с...

Список запущеных процессов
Доброго времени суток. Возникла необходимость получить список запущеных процессов.Суть в том что хочу создать структуру данных которая...

47
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
15.08.2015, 22:06
Студворк — интернет-сервис помощи студентам
4 - это System, его не получится открыть ни OpenProcess, ни еще как-либо.
0
 Аватар для rusack007
22 / 22 / 9
Регистрация: 30.07.2015
Сообщений: 161
15.08.2015, 22:20  [ТС]
Эм, точно? LookupAccountSid при всех этих ошибках получил это, что мне и нужно (выделено жёлтым)
Миниатюры
Список процессов и пользователей  
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
15.08.2015, 22:33
У меня ваш код стабильно выдает FALSE на LookupAccountSid для
процесса с PID == 4, привилегия отладки включена.
0
 Аватар для rusack007
22 / 22 / 9
Регистрация: 30.07.2015
Сообщений: 161
15.08.2015, 22:45  [ТС]
Это я понимаю, но странно. Ведь даже в name уже получено значение СИСТЕМА.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
16.08.2015, 08:58
Нет, оно не получено.
На вашем скрине управление еще не перепрыгнуло функцию LookupAccountSid.
0
 Аватар для rusack007
22 / 22 / 9
Регистрация: 30.07.2015
Сообщений: 161
16.08.2015, 09:25  [ТС]
Понял, а за счёт чего в Windows штатный диспетчер задач может отображать корректно все данные?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
16.08.2015, 09:27
За счет "хитрой логики".
Например, я знаю, что PID 0 - это IDLE, а PID 4 - System,
для этого вовсе не обязательно получать их access token-ы.
1
 Аватар для rusack007
22 / 22 / 9
Регистрация: 30.07.2015
Сообщений: 161
16.08.2015, 09:37  [ТС]
Хи, наводка получена
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.08.2015, 09:37

Командный файл, выводящий список пользователей в системе и их процессов
Доброго времени суток! Есть такое задание: создать командный файл, осуществляющий вывод на экран список пользователей, зарегистрированных...

Вывести список пользователей, запустивших указанное (либо большее) количество процессов
Здравствуйте, нужно написать команду которая выведет список пользователей, запустивших указанное (либо большее) количество процессов. ...

Получить список пользователей, относящихся к группе с наибольшим числом пользователей
Дали задание: &quot;Получить список пользователей относящихся к группе с наибольшим числом пользователей&quot; программа для Линукса, никогда не...

Процедура Shell / подсчет количества процессов пользователей.
Написать процедуру Shell,которая: Вводит с терминала некоторое число Всем пользователям,работающим в данный момент в системе,...

Разработка программного обеспечения для автоматизации процессов учета и регистрации заявок пользователей
Здравствуйте! есть такая задача как &quot;Разработка программного обеспечения для автоматизации процессов учета и регистрации заявок...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
48
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru