我具有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);
答案 0 :(得分:2)
19是SE_SHUTDOWN_PRIVILEGE
-在 wdm.h 中声明。
RtlAdjustPrivilege
打开当前进程(如果 IsThreadPrivilege:= false )或当前线程(如果 IsThreadPrivilege:= true )令牌,然后调用{{1} }(ZwAdjustPrivilegeToken
是该API的薄壳),最后关闭打开的令牌。
AdjustTokenPrivileges
(ZwAdjustPrivilegeToken
)函数启用或禁用指定访问令牌中的特权。但是特权必须已经在令牌中