Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 11.11.2014
Сообщений: 17

Ошибка доступа к процессу

11.01.2016, 13:40. Показов 665. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, получаю список процессов достаю необходимую информацию, но c одного процесса нельзя получить имя пользователя. Программа выдает ошибку и перебор процессов останавливается и список процессов получается не полным. Как обработать ошибку? Что бы если нельзя получить имя, оставить поле пустым.

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
    while (EnumProcess)
    {
        PID=Process.th32ProcessID;
                if((PID==4)||(PID==0)||(PID==4456))
          {
         EnumProcess = Process32Next(ProcessSnap, &Process);
          }
        else
          {
        ListView1->Items->Add();
        Item = ListView1->Items->Item[ListView1->Items->Count-1];
 
        InfoProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE , Process.th32ProcessID); 
        if(!(OpenProcessToken(InfoProcess, TOKEN_QUERY, &hToken))); 
            AnsiString ER=GetLastError();
            ListBox3->Items->Add("OpenToken "+ER);
 
        pUserInfo=(PTOKEN_USER) GlobalAlloc(GPTR, dwSize);
        if(!(GetTokenInformation(hToken, TokenUser, pUserInfo, dwSize, &dwSize)));
            AnsiString EG=GetLastError();
            ListBox3->Items->Add("GetTokenInfo "+EG);
                
//Ошибка получения имени пользователя 
        if(!(LookupAccountSidA (0, pUserInfo->User.Sid, name, &dwSize, domain, &dwSize, (PSID_NAME_USE)&iUse)));
        AnsiString EC=GetLastError();
        ListBox3->Items->Add("Lookup "+EC);
 
        Item->Caption=PID;// Ид процесса
        Item->ImageIndex=0;//картинка
        Item->SubItems->Add(Process.szExeFile); // Имя процесса
 
        switch (GetPriorityClass(InfoProcess))
            {
              case 256: Item->SubItems->Add("Реальный"); break;
              case 128:  Item->SubItems->Add("Высокий"); break;
              case  32:  Item->SubItems->Add("Нормальный"); break;
              case  64:  Item->SubItems->Add("Низкий");  break;
              case  32768:  Item->SubItems->Add("Нормальный+"); break;
              case  16384:  Item->SubItems->Add("Низкий+");  break;
            }
 
        Item->SubItems->Add(name);
Миниатюры
Ошибка доступа к процессу  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.01.2016, 13:40
Ответы с готовыми решениями:

Закрытие доступа к процессу
есть процесс к примеру h.exe как можно сделать так, чтобы невозможно было получить доступ к его памяти? или просто скрыть его...

Django Ошибка доступа (403) Ошибка проверки CSRF. Запрос отклонён
На хостинге разместил сайт и не могу войти в админку, т.к. возникает 403 ошибка "Ошибка доступа (403). Ошибка проверки CSRF. Запрос...

Ошибка при запуске клиента,ошибка сетевого доступа
когда начинаю загружать саму базу в 1с-ке, выдается ошибка: Ошибка при выполнении операции с информационной базой ...

4
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
11.01.2016, 15:12
Для начала приведи код в порядок:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// ...
    InfoProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE,
        Process.th32ProcessID);
    if (!(OpenProcessToken(InfoProcess, TOKEN_QUERY, &hToken)))
    {
        ListBox3->Items->Add("OpenToken " + SysErrorMessage(GetLastError()));
    }
 
    pUserInfo = (PTOKEN_USER) GlobalAlloc(GPTR, dwSize);
    if (!(GetTokenInformation(hToken, TokenUser, pUserInfo, dwSize, &dwSize)))
    {
        ListBox3->Items->Add("GetTokenInfo " + SysErrorMessage(GetLastError()));
    }
 
    // Ошибка получения имени пользователя
    if (!(LookupAccountSidA(0, pUserInfo->User.Sid, name, &dwSize, domain,
        &dwSize, (PSID_NAME_USE) & iUse)))
    {
        ListBox3->Items->Add("Lookup " + SysErrorMessage(GetLastError()));
    }
// ...
А лучше было бы привести полный код получения процесса, чтобы не додумывать за тебя, как там у тебя написано все остальное, а посмотреть именно твой фрагмент в работе.
0
0 / 0 / 1
Регистрация: 11.11.2014
Сообщений: 17
11.01.2016, 15:40  [ТС]
Ошибка при попытке открыть процесс fontdrvhost.exe.
Но тут в коде я думаю тоже проблем хватает..
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
int __fastcall TForm1::ProcessList()
{
    ListView1->Clear();
    HANDLE InfoProcess=0;
    HANDLE hToken=0;
    DWORD PID;
    bool EnumProcess;
    bool EnumThread;
    bool EnumModule;
    wchar_t pathP[500];
    TOKEN_USER* pUserInfo;
    char name[256];
    char domain[256];
    char *result;
    DWORD dwSize = 256;
    int iUse;
    int ColP=0;
 
//Сником процессов
    HANDLE ProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
//Снимок модулей
    HANDLE ModuleSnap  = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,  0);
//Снимок потоков
//структура для вывода
    PROCESSENTRY32 Process;
    MODULEENTRY32  Module;
//установим ее размер, это необходимое действие
    Process.dwSize = sizeof(PROCESSENTRY32);
    Module.dwSize  = sizeof(MODULEENTRY32);
//Определение первого элемента
    EnumProcess = Process32First (ProcessSnap, &Process);
    EnumModule  = Module32First  (ModuleSnap,  &Module);
 
    while (EnumProcess)
    {
 
        PID=Process.th32ProcessID;
 
        if((PID==4)||(PID==0)||(PID==9172))
        {
         EnumProcess = Process32Next(ProcessSnap, &Process);
        }
        else
        {
        ListView1->Items->Add();
        Item = ListView1->Items->Item[ListView1->Items->Count-1];
//-------------------------------Сбор информации о процессах---------------------------------------
 
        InfoProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE,
        Process.th32ProcessID);
    if (!(OpenProcessToken(InfoProcess, TOKEN_QUERY, &hToken)))
    {
        ListBox3->Items->Add("OpenToken " + SysErrorMessage(GetLastError()));
    }
 
    pUserInfo = (PTOKEN_USER) GlobalAlloc(GPTR, dwSize);
    if (!(GetTokenInformation(hToken, TokenUser, pUserInfo, dwSize, &dwSize)))
    {
        ListBox3->Items->Add("GetTokenInfo " + SysErrorMessage(GetLastError()));
    }
 
    // Ошибка получения имени пользователя
    if (!(LookupAccountSidA(0, pUserInfo->User.Sid, name, &dwSize, domain,
        &dwSize, (PSID_NAME_USE) & iUse)))
    {
        ListBox3->Items->Add("Lookup " + SysErrorMessage(GetLastError()));
    }
 
        Item->Caption=PID;// Ид процесса
        Item->ImageIndex=0;//картинка
        Item->SubItems->Add(Process.szExeFile); // Имя процесса
 
        switch (GetPriorityClass(InfoProcess))
            {
              case 256: Item->SubItems->Add("Реальный"); break;
              case 128:  Item->SubItems->Add("Высокий"); break;
              case  32:  Item->SubItems->Add("Нормальный"); break;
              case  64:  Item->SubItems->Add("Низкий");  break;
              case  32768:  Item->SubItems->Add("Нормальный+"); break;
              case  16384:  Item->SubItems->Add("Низкий+");  break;
            }
 
        Item->SubItems->Add(name);//локальная группа процесса
        Item->SubItems->Add(Module.szModule); //Модуль процесса
        Item->SubItems->Add(Process.cntThreads); //кол-во потоков
 
        if(GetModuleFileNameEx(InfoProcess, NULL, pathP, MAX_PATH))  //путь процесса записывается в pBuf
             Item->SubItems->Add(pathP);
        else
            Item->SubItems->Add("Недоступно");
 
        EnumProcess = Process32Next(ProcessSnap, &Process);
        EnumModule  = Module32Next (ModuleSnap,  &Module);
 
        Label1->Caption=IntToStr(ColP++);
      }
    }
    CloseHandle(ProcessSnap);
    CloseHandle(ModuleSnap);
}
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
11.01.2016, 16:19
Не знаю, у меня никаких ошибок не выдает приведенный код. Да, в ListBox пишутся всякие "handle is invalid", "Parameter is incorrect", но ошибки при этом не вылетают. Локализуй место ошибки: какая конкретно функция вылетает?
0
0 / 0 / 1
Регистрация: 11.11.2014
Сообщений: 17
11.01.2016, 16:48  [ТС]
C++
1
2
    if (!(LookupAccountSidA(0, pUserInfo->User.Sid, name, &dwSize, domain,
        &dwSize, (PSID_NAME_USE) & iUse)))
Ошибка возникает когда я пытаюсь получить имя пользователя, процесса fontdrvhost.exe. Если его в системе нет то никаких проблем. В коде я пропускаю этот процесс по его номеру(PID)
C++
1
2
3
4
5
6
7
8
9
    while (EnumProcess)
    {
        PID=Process.th32ProcessID;
                if((PID==4)||(PID==0)||(PID==4456))// 4456 ид процесса fontdrvhost.exe
          {
         EnumProcess = Process32Next(ProcessSnap, &Process);
          }
        else
          {
Но PID процесса может изменится, и снова будет ошибка. Вопрос как его по другому пропустить? Как сделать если не получится считать имя от кого запущен процесс, оставить это поле пустым?
Через if, else тоже не выходит, сразу выдает ошибку
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.01.2016, 16:48
Помогаю со студенческими работами здесь

Ошибка доступа к памяти, ошибка компонентов .bpl
Использую в проекте библиотеку bass.dll. И при работе с ней у билдера часто возникают ошибки. Либо ошибка доступа к памяти, либо ошибка...

почему ошибка доступа (ошибка 3008)
Доброго дня! Вот такая у меня засада случилась. Простая, табличка, простой отчет. событие - двойное нажатие кнопки на данных второго...

Ошибка "Ошибка создания папки. Возможно недостаточно прав доступа для создания новой директории.Битрикс24 Коробочн
При создании раздела на главной выдает ошибку "Ошибка создания папки. Возможно недостаточно прав доступа для создания новой директории....

Ошибка доступа!!
Значит хочу у себя на сайте www.compshelp.kiev.ua убрать это-Template Design © Joomla Templates | GavickPro. All rights reserved. За это...

Ошибка доступа
System.UnauthorizedAccessException: Access to the path "/temp/executing/input.txt" is denied. Бывала ли такая ошибка у кого-то и как вы...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru