Может кто-нибудь объяснить RtlAdjustPrivilege

У меня есть знания по java и python, но любой язык, содержащий C в своем названии, настолько сложен для понимания и изучения. Недавно я пытался создать BSOD в Windows, используя NtRaiseHardError, и после нескольких (неудачных) попыток в C++ я обратился к C#.

Используя код отсюда я смог сделать программу и вызвать BSOD. Позже я попытался полностью понять код, но не могу понять, что делает RtlAdjustPrivilege.

Я вижу, что это какое-то изменение привилегий, но во время работы программы я не вижу никаких запросов на ввод пароля администратора, несмотря на то, что я использую учетную запись пользователя, поэтому я считаю, что она не переходит в привилегии администратора. Если кто-то знает, что именно делает эта функция или как она работает, объясните это. Вот как это реализовано:

Чтобы импортировать это:

[DllImport("ntdll.dll")]
private static extern uint RtlAdjustPrivilege
(
    int Privilege,
    bool bEnablePrivilege,
    bool IsThreadPrivilege,
    out bool PreviousValue
);

И позже используйте это:

RtlAdjustPrivilege(19, true, false, out bool previousValue);

1 ответ

Решение

19 это SE_SHUTDOWN_PRIVILEGE - объявлено в wdm.h.

RtlAdjustPrivilege открыть токен текущего процесса (если IsThreadPrivilege: = false) или токена текущего потока (если IsThreadPrivilege: = true), затем вызвать ZwAdjustPrivilegeToken (AdjustTokenPrivileges Тонкая оболочка над этим API) и, наконец, закройте открытый токен.

ZwAdjustPrivilegeToken (AdjustTokenPrivileges) функция включает или отключает привилегии в указанном токене доступа. но привилегия должна быть уже в токене

Другие вопросы по тегам