Может кто-нибудь объяснить 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
) функция включает или отключает привилегии в указанном токене доступа. но привилегия должна быть уже в токене