我知道java和python,但是任何以C命名的语言都很难理解和学习。最近,我试图在windows中使用NtRaiseHardError创建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);
最佳答案
19在wdm.h中声明。SE_SHUTDOWN_PRIVILEGE
打开当前进程(如果IsThreadPrivilege:=false)或当前线程(如果IsThreadPrivilege:=true)标记,然后调用RtlAdjustPrivilege
(ZwAdjustPrivilegeToken
是此api上的瘦外壳)并最终关闭打开标记。AdjustTokenPrivileges
(ZwAdjustPrivilegeToken
)函数启用或禁用指定访问令牌中的权限。但特权必须已经存在