获取进程权限令牌句柄
OpenProcessToken(ProcessHandle:THandle(进程句柄),TOKEN_ALL_ACCESS,hToken: THandle(获得的进程令牌句柄))
获取各种权限对应的ID
LookupPrivilegeValue(nil, 'SeDebugPrivilege'(权限的名字), Luid(获取的权限ID));
修改进程权限
AdjustTokenPrivileges(hToken:THandle(进程令牌句柄), false(是否关闭所有权限), tp: TTokenPrivileges(要修改的权限列表), SizeOf(tp), nil, rl:Cardinal(一般为0));
TTokenPrivileges结构详解
TTokenPrivileges(PrivilegeCount:DWORD(要修改的权限的个数),LUID_AND_ATTRIBUTES Privileges[](LUID_AND_ATTRIBUTES结构的数组))
LUID_AND_ATTRIBUTES 结构详解
LUID_AND_ATTRIBUTES(LUID Luid(权限ID), DWORD Attributes(一般设为SE_PRIVILEGE_ENABLED) )
程序范例
VerInfo.dwOSVersionInfoSize:=SizeOf(VerInfo);
GetVersionEx(VerInfo);
if VerInfo.dwPlatformId=VER_PLATFORM_WIN32_NT then
Begin
OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken);
LookupPrivilegeValue(nil,'SeShutdownPrivilege',tkp.Privileges[0].Luid);
tkp.PrivilegeCount:= 1;
tkp.Privileges[0].Attributes:= SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, tkp, 0,nil, Nothing);
End;
各权限名字的含义:
• 从远程系统强制关机
请在事件具体信息中查找用户权限为 SeRemoteShutdownPrivilege 的事件。
• 提高日程安排优先级
请在事件具体信息中查找用户权限为 SeIncreaseBasePriorityPrivilege 的事件。具有此权限的用户可以修改进程优先级。
• 加载和卸载设备驱动程序
请在事件具体信息中查找用户权限为 SeLoadDriverPrivilege 的事件。具有此用户权限的用户可以加载特洛伊木马版本的设备驱动程序。
• 治理审核和安全日志
请在事件具体信息中查找用户权限为 SeSecurityPrivilege 的事件。具有此用户权限的用户可以查看和清除安全日志。
• 替换进程级令牌
请在事件具体信息中查找用户权限为 SeAssignPrimaryTokenPrivilege 的事件。具有此用户权限的用户可以更改与一个已启动子进程相关联的默认令牌。
• 还原文件和目录
请在事件具体信息中查找用户权限为 SeRestorePrivilege 的事件。
• 关闭系统
请在事件具体信息中查找用户权限为 SeShutdownPrivilege 的事件。具有此用户权限的用户可以关闭系统以开始新设备驱动程序的安装。
• 获取文件或其他对象的所有权
请在事件具体信息中查找用户权限为 SeTakeOwnershipPrivilege 的事件。具有此用户权限的用户可以通过获取 NTFS 文件系统磁盘上的对象或文件的所有权,来访问这些对象或文件。