Перейти к содержанию

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


Рекомендуемые сообщения

Всем привет, наверно странный вопрос. Понадобилась такая тема как отображение процессов(Помогаю товарищу), да задача элементарная. 

Что-то типо этого:

 

 


void GetProcessesList()
{
    DWORD ProccessID = NULL;
    
    HANDLE hSnapshot;
    // Обьявим структуру ProcessEntry и сразу заполним ее размер. 
    PROCESSENTRY32 pe32 = { sizeof(PROCESSENTRY32) };


    hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    // Начинаем перебирать с первого процесса!)
 
    if (Process32First(hSnapshot, &pe32))
    {
        // Цикл
        do
        {
            // Чуть позже переделаю AddText в функцию с неизвестным кол-вом параметров и буду формировать строки
            // Через vsprintf уже внутри, а пока е... с буфером

            // Лишние 3 строки  для переделывания AddText  это перебор для меня :D 
            ProccessID = pe32.th32ProcessID;
            
            char buff[255];
            sprintf(buff, "PID: %d", ProccessID);

            AddTextToList(hListBox1, buff);
            AddTextToList(hListBox1, pe32.szExeFile);
        }
        // До тех пор пока есть след. процесс
        while (Process32Next(hSnapshot ,&pe32 ));
    }
    AddTextToList(hListBox1, "Finish \n");
    CloseHandle(hSnapshot);

}
 

 

 

Вроде все просто и работает отлично. Но мне нужно отфильтровать процессы, не найти какой-то конкретны(Это слишком легкая задача), а отфильтровать типо системный/пользовательский и отобразить только пользовательские. Или можно, а даже лучший вариант это как в CE 6.7 вкладка Application но это уже не обязательно. Как бы это можно реализовать? Может не правильно гуглил, но гугл инфы не дал :(

 Заранее спасибо! :)

 

Изменено пользователем temtriss
Ссылка на комментарий
Поделиться на другие сайты

9 минут назад, ReWanet сказал:

Может чем поможет.

Спасибо, но чуть выше в коде это и реализовано)) А вот как отличить системное приложение и пользовательское вообще не сообразить :(

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, temtriss сказал:

А вот как отличить системное приложение и пользовательское вообще не сообразить :(

https://msdn.microsoft.com/en-us/library/aa446654(VS.85).aspx
https://msdn.microsoft.com/en-us/library/aa379573(v=vs.85).aspx

http://www.cyberforum.ru/post2471350.html  ( Там по C# но это не меняет сути )

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

В 31.10.2017 в 23:17, ReWanet сказал:

но это не меняет сути

Пока не было времени посмотреть :(( Работа :(( Но завтра последний рабочий день и 3 выходных, обязательно гляну!)) Спасибо и + в репу в любом случае :))) Если ответов больше не будет, то тему можно закрыть в выходные сам разберусь если инфа выше не поможет :))

Ссылка на комментарий
Поделиться на другие сайты

  • ReWanet закрыто и открыто это тема

Проще через SID получить имя владельца процесса.
LookupAccountSid + GetTokenInformation + OpenProcessToken

Открываешь токен для каждого процесса, получаешь SID владельца токена который передаешь в LookupAccountSid  и получаешь имя владельца, домен и всякое такое.

 

В 31.10.2017 в 21:33, temtriss сказал:

Как бы это можно реализовать?

Открой исходники CE и посмотри как там это реализовано, да и перепиши под себя

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

В 02.11.2017 в 21:53, partoftheworlD сказал:

имя владельца процесса.

Хех, я не подумал об одном моменте, для получения токена нужен хэндл, а на стадии получения хэндла отсеивается 99% ненужных приложений из списка c ошибкой 0x5(Windows (User-Mode): Access is denied.). В общем решил задачу!) Всем еще раз спасибо за участие, тему можно закрыть!)

Ссылка на комментарий
Поделиться на другие сайты

  • ReWanet закрыл тема
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.