有人可以解释 RtlAdjustPrivilege
Can someone explain RtlAdjustPrivilege
我知道java和python,但是任何名字中包含C的语言都很难理解和学习。最近我尝试使用 NtRaiseHardError 在 windows 中创建 BSOD,并且在 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);
19 是 SE_SHUTDOWN_PRIVILEGE
- 在 wdm.h.
中声明
RtlAdjustPrivilege
打开当前进程(如果 IsThreadPrivilege := false )或当前线程(如果 IsThreadPrivilege := true )令牌,然后调用 ZwAdjustPrivilegeToken
(AdjustTokenPrivileges
在这个 api 上很薄 shell),最后关闭打开的令牌。
ZwAdjustPrivilegeToken
(AdjustTokenPrivileges
) 函数启用或禁用指定访问令牌中的权限。但权限必须已经在 token
中
我知道java和python,但是任何名字中包含C的语言都很难理解和学习。最近我尝试使用 NtRaiseHardError 在 windows 中创建 BSOD,并且在 c++ 中尝试了几次(不成功)后我转向了 c#。
使用
我看到这是某种权限更改,但是当程序是 运行 时,尽管我使用的是用户帐户,但我没有看到管理员密码提示,所以我相信它不会升级为管理员权限.如果有人知道这个函数到底是做什么的或者它是如何工作的,请解释一下。这是它的实现方式:
要导入它:
[DllImport("ntdll.dll")]
private static extern uint RtlAdjustPrivilege
(
int Privilege,
bool bEnablePrivilege,
bool IsThreadPrivilege,
out bool PreviousValue
);
稍后使用它:
RtlAdjustPrivilege(19, true, false, out bool previousValue);
19 是 SE_SHUTDOWN_PRIVILEGE
- 在 wdm.h.
RtlAdjustPrivilege
打开当前进程(如果 IsThreadPrivilege := false )或当前线程(如果 IsThreadPrivilege := true )令牌,然后调用 ZwAdjustPrivilegeToken
(AdjustTokenPrivileges
在这个 api 上很薄 shell),最后关闭打开的令牌。
ZwAdjustPrivilegeToken
(AdjustTokenPrivileges
) 函数启用或禁用指定访问令牌中的权限。但权限必须已经在 token