Windows下应用程序如果需要做一些系统管理或进程管理之类的工作,经常需要将本进程提权(获取权限令牌);
而通常windows下提权方法有两种,主要的方法是:
1)win32API——AdjustTokenPrivileges;
2)ntdll.dll——RtlAdjustPrivilege;
前者是已公开的win32系统API,后者是非公开的导出函数(藏在ntdll.dll里);
两者的用法也有些差别;
先看第一种方式:
1)win32API——AdjustTokenPrivileges
//Win32Api:
void AdjustPrivilege()
{
HANDLE hToken;
if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
{
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if (LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid))
{
AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);
}