
06.10.2025, 11:16
|
|
Новичок
Регистрация: 26.07.2025
Сообщений: 0
С нами:
423479
Репутация:
0
|
|
SaurusK, привет!
Вот что говорит Google AI
Функция AdjustTokenPrivileges не даёт (не назначает) привилегию пользователю. Она включает (активирует) уже имеющуюся у пользователя привилегию для конкретного запущенного процесса.
Можно представить это так:
- Назначение права ("Получение ключа"): Это делает администратор компьютера через "Локальную политику безопасности". Он добавляет вашего пользователя в список тех, кому разрешено "Блокировать страницы в памяти" (SeLockMemoryPrivilege). Теперь у вас на связке появился этот ключ.
- Активация привилегии ("Использование ключа"): Когда "Бастион" запускается, он вызывает AdjustTokenPrivileges. Это равносильно тому, что программа берет этот ключ с вашей связки и вставляет его в замок, чтобы получить доступ к нужной возможности (блокировке памяти).
Вывод:
- Если администратор заранее не дал вашему пользователю это право, то вызов AdjustTokenPrivileges ничего не сделает (программа просто продолжит работать без этой возможности, как и описано в обновлении).
- А если право уже было вам дано, то AdjustTokenPrivileges — это как раз тот самый прямой способ, которым программа его для себя "включает".
По умолчанию у обычных пользователей этого права нет, но у администраторов (если программа запущена от их имени) оно обычно есть.
Более подробное объяснение (для вашего понимания)
Ваш пользователь нащупал фундаментальное различие между User Rights (Правами пользователя) и Privileges (Привилегиями) в терминологии Windows.
- User Right (Право пользователя): Это политика, которая назначается учетной записи пользователя или группе. Это делается администратором через оснастки secpol.msc (Локальная политика безопасности) или gpedit.msc (Редактор групповой политики). Право "Блокировка страниц в памяти" (Lock pages in memory) — это как раз User Right. Оно определяет, может ли пользователь в принципе выполнять это действие.
- Privilege (Привилегия): Это "переключатель" в маркере доступа (access token) запущенного процесса. Когда вы входите в систему, Windows создает для вас маркер доступа, в котором перечислены все привилегии, соответствующие вашим User Rights. Изначально большинство из них находятся в "выключенном" состоянии (disabled).
Что делает AdjustTokenPrivileges?
Эта функция не может добавить новую привилегию в маркер доступа. Она может только взять уже существующую, но "выключенную" привилегию и перевести ее в состояние "включено" (enabled) для этого конкретного процесса.
Процесс в вашем коде:
- OpenProcessToken — получает доступ к маркеру вашего процесса "Бастион".
- LookupPrivilegeValue — находит уникальный идентификатор (LUID) для привилегии SeLockMemoryPrivilege.
- AdjustTokenPrivileges — отправляет системе команду: "Для этого процесса, пожалуйста, переведи привилегию с этим LUID в состояние 'включено'".
Если право SeLockMemoryPrivilege было назначено пользователю, система выполнит команду. Если нет, система проигнорирует эту часть запроса (функция может даже вернуть "успех", но GetLastError покажет ERROR_NOT_ALL_ASSIGNED, что ваш код справедливо не проверяет, так как это не критично).
|
|
|