有人可以解释RtlAdjustPrivilege

时间:2018-06-22 22:52:05

标签: c# c function bsod ntdll

我具有Java和python的知识,但是任何以C命名的语言都很难理解和学习。最近,我试图使用NtRaiseHardError在Windows中创建BSOD,在c ++中尝试了几次(不成功)之后,我转向了c#。

使用here中的代码,我能够编写一个程序并导致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 个答案:

答案 0 :(得分:2)

19是SE_SHUTDOWN_PRIVILEGE-在 wdm.h 中声明。

RtlAdjustPrivilege打开当前进程(如果 IsThreadPrivilege:= false )或当前线程(如果 IsThreadPrivilege:= true )令牌,然后调用{{1} }(ZwAdjustPrivilegeToken是该API的薄壳),最后关闭打开的令牌。

AdjustTokenPrivilegesZwAdjustPrivilegeToken)函数启用或禁用指定访问令牌中的特权。但是特权必须已经在令牌中