Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
75 / 9 / 1
Регистрация: 07.06.2016
Сообщений: 132

Как получить хэндлы системного процесса?

12.06.2016, 23:18. Показов 3546. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Пытаюсь получить handle какого-нибудь системного процесса. Нашел в инете пример, который выставляет своему процессу привилегию SE_DEBUG_NAME. Ошибок при установке этой привилегии не пишет. Однако хэндл системного процесса получить не дает - ошибка доступа при OpenProcess. В чем может быть дело? PID ввожу вручную. Пишу под 10-й виндой в VS.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DWORD pID = 788;
    
    HANDLE  pHandle, hProc = GetCurrentProcess(), tHand = NULL;
    BOOL fEnable = 0;
    
    
    
    if (!OpenProcessToken(hProc, TOKEN_ADJUST_PRIVILEGES, &tHand)) cout << "Error OpenToken:" << GetLastError() << endl;
    TOKEN_PRIVILEGES tp;
    tp.PrivilegeCount = 1;
    if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid)) cout << "Error LookUp:" << GetLastError() << endl;
    tp.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0;
    if (!AdjustTokenPrivileges(tHand, FALSE, &tp, sizeof(tp), NULL, NULL)) cout << "Error Adjust: " << GetLastError() << endl;
    CloseHandle(tHand);
 
    pHandle = OpenProcess(PROCESS_QUERY_INFORMATION, TRUE, pID);
    if (pHandle == 0) cout << pHandle << endl << "Error OpenProcess: " << GetLastError() << endl;
    else cout << "HANDLE: " << pHandle << endl;
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.06.2016, 23:18
Ответы с готовыми решениями:

Как получить имя каждого процесса?
Как мне получить имя каждого процесса, протекающего в ОС?

Как получить контекст чужого процесса ?
Пробую получить контекст чужого процесса на х64 системе. ...

Как получить все дочерние окна процесса?
Получаю все процессы, нахожу нужный, но мне еще нужны вложенные окна типа Ebit и им подобным, полный список, как их можно получить? Через...

16
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
13.06.2016, 10:37
Лучший ответ Сообщение было отмечено _lunar_ как решение

Решение

Начиная с Windows Vista и выше, некоторые процессы могут быть "защищенными", т.е.
их не удастся открыть с некоторыми правами ни под администратором, ни под системой, и
даже SE_DEBUG_NAME здесь не поможет. В Windows 8.1 этот механизм был еще больше
усилен - "Protected Processes Light" (информация есть в блоге A. Ionescu).

И я советую на Vista и выше использовать PROCESS_QUERY_LIMITED_INFORMATION -
больше шансов, что этот флаг не фильтруется защитой для некоторых процессов.
2
75 / 9 / 1
Регистрация: 07.06.2016
Сообщений: 132
13.06.2016, 16:51  [ТС]
Я врубил в цикле попытки открыть все непользовательские процессы, перебирая по очереди права. Так вот у меня из около 50 процессов только 2 вернули дескриптор с правом SINHRONIZE. Все остальное - ошибка доступа. Получается, что тут не некоторые процессы защищены, а все и почти от всего. Если можно открыть процесс с правом SINHRONIZE, можно ли теоретически сделать deadlock с участием этого процесса?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
13.06.2016, 18:48
Цитата Сообщение от NatiF Посмотреть сообщение
Я врубил в цикле попытки открыть все непользовательские процессы, перебирая по очереди права. Так вот у меня из около 50 процессов только 2 вернули дескриптор с правом SINHRONIZE. Все остальное - ошибка доступа.
А ты уверен, что у тебя включается привилегия SE_DEBUG_NAME?
Можно Process Explorer-ом посмотреть, например. Дело в том, что TRUE на
AdjustTokenPrivileges еще ничего не означает, надо GetLastError еще звать и
проверять, что он ERROR_SUCCESS (см. AdjustTokenPrivileges в MSDN -
там это есть).
2
75 / 9 / 1
Регистрация: 07.06.2016
Сообщений: 132
13.06.2016, 19:46  [ТС]
Точняк, не устанавливается. 1300 возвращает, а это fail. Получается нет доступа к структуре TOKEN PRIVILEGES. А его нет, потому что в маркере к ней нет доступа. Тут гостевая учетка. В каком же направлении тут копать дальше?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
13.06.2016, 19:51
Под гостевой учеткой ты никак не откроешь системные процессы.
Если они только сами не разрешат.
0
75 / 9 / 1
Регистрация: 07.06.2016
Сообщений: 132
13.06.2016, 20:22  [ТС]
Самое интересное, что и из группы "Администраторы" не удается получить SE_DEBUG
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
13.06.2016, 21:09
Цитата Сообщение от NatiF Посмотреть сообщение
Самое интересное, что и из группы "Администраторы"
А как ты определяешь, что у процесса есть права администратора?
0
75 / 9 / 1
Регистрация: 07.06.2016
Сообщений: 132
13.06.2016, 21:13  [ТС]
Никак. Предположение, что он в маркере наследует информацию от группы. А процесс запущен из группы "Администраторы"
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
13.06.2016, 21:14
Кстати,
C++
1
BOOL fEnable = 0;
Здесь fEnable должно быть 1, т.е. включить привилегию, а не выключить.
И процесс запускать от имени администратора (правой кнопкой мыши клик
на exe файле, далее в контекстном меню выбрать "Запуск от имени
Администратора").
1
75 / 9 / 1
Регистрация: 07.06.2016
Сообщений: 132
14.06.2016, 16:57  [ТС]
Заработало) Спасибо. Теперь открывает кучу хэндлов на процессы с правами. И AdjustToken возвращает нуль в качестве кода ошибки. Надо еще реализовать в коде запуск от админа, ну... чтоб не мышкой)

Добавлено через 19 часов 26 минут
Пытаюсь вот такой манифест подключить к проекту. Сохранил его в UTF-8, добавил в проекте в Resourse Files. В опциях линкера отключил Generate Manifest и поставил там highestAvailable. Не работает, файл запускается в обычном режиме. Пробовал в код вставить 1 24 "C:\\addon.xml", тоже без реакции. Что может быть не так?

XML
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
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 
<assembly
  xmlns="urn:schemas-microsoft-com:asm.v1"
  manifestVersion="1.0">
 
  <assemblyIdentity
    type="win32"
    name="CyberDYNE"
    version="1.0.0.0"
    processorArchitecture="*">
  </assemblyIdentity>
 
  <description>File managment improved control</description>
 
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="highestAvailable"
          uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
 
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
 
      <!-- Windows 10 -->
      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"></supportedOS>
 
         </application>
  </compatibility>
 
  <application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
      <dpiAware
          xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True/PM</dpiAware>
    </windowsSettings>
  </application>
 
</assembly>
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
14.06.2016, 17:43
Exe в студию!
0
75 / 9 / 1
Регистрация: 07.06.2016
Сообщений: 132
14.06.2016, 17:54  [ТС]
Вот.
Вложения
Тип файла: rar inject.rar (11.5 Кб, 11 просмотров)
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
14.06.2016, 19:10
В этом exe вообще нет манифеста.
0
75 / 9 / 1
Регистрация: 07.06.2016
Сообщений: 132
16.06.2016, 13:25  [ТС]
А в этом?
Вложения
Тип файла: rar rights.rar (11.9 Кб, 8 просмотров)
0
75 / 9 / 1
Регистрация: 07.06.2016
Сообщений: 132
17.06.2016, 13:46  [ТС]
Убежденный, в ресурсах вроде появился файл rights.xml, и в окошке появился rights.rc в двоичном виде. Может его еще где-то указать надо?
0
75 / 9 / 1
Регистрация: 07.06.2016
Сообщений: 132
22.06.2016, 15:05  [ТС]
Разобрался! Нужно было включить Generate Manifest:yes в опциях линкера. Теперь при запуске выводится окошко UAC.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.06.2016, 15:05
Помогаю со студенческими работами здесь

Как получить HWND окна/процесса/консоли
Как получить HWND окна/процесса/консоли? мне надо для Shellexecute. Реализация в Dll #include &quot;hooklib\MinHook.h&quot; #include...

Различные хэндлы
Как известно все хэндлы, которые используются в win api есть не что иное как указатели на void. Почему же несмотря на это иногда...

Хэндлы hProcess и hThread
Объясните, пожалуйста, для чего в программе используются хэндлы процесса и потока (hProcess, hThread) ?Для чистки буфера? #include...

Получить id процесса родителя, если исходный id процесса дочерний
Добрый день. У меня есть вот такой код на C#, который должен позволить получить id процесса родителя, если исходный id процесса дочерний: ...

Как получить имя процесса?
Начал писать диспетчер задач. Получаю список процессов. deque&lt;PROCESSENTRY32&gt; deq; if (deq.size() != 0) ...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru