#include <windows.h>
#include <winbase.h>
BOOL SetSecurity(LPCSTR sPrivilege, BOOL bEnable) {
BOOL bResult = FALSE;
HANDLE hToken = NULL;
do {
BOOL bRet = OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken);
if (!bRet || hToken == NULL) {
break;
}
TOKEN_PRIVILEGES currtp = {};
bRet = LookupPrivilegeValue(NULL, sPrivilege, &currtp.Privileges[0].Luid);//修改进程权限
if (currtp.Privileges[0].Luid.HighPart == 0 && currtp.Privileges[0].Luid.LowPart == 0) {
break;
}
currtp.PrivilegeCount = 1;
TOKEN_PRIVILEGES Prevtp = {};
DWORD Required = 0;
//通知系统修改进程权限
bRet = AdjustTokenPrivileges(hToken, FALSE, &currtp, sizeof(currtp), &Prevtp, &Required);
if (!bRet) {
break;
}
Prevtp.PrivilegeCount = 1;
Prevtp.Privileges[ 0].Luid = currtp.Privileges [0].Luid;
DWORD Attributes = Prevtp.Privileges[ 0].Attributes;
Prevtp.Privileges[0].Attributes = bEnable ? (Attributes | SE_PRIVILEGE_ENABLED) : (Attributes & (~SE_PRIVILEGE_ENABLED));
bRet = AdjustTokenPrivileges(hToken, FALSE, &Prevtp, sizeof(Prevtp), &currtp, &Required);
if (bRet) {
break ;
}
bResult = TRUE ;
} while (false);
if (hToken != NULL) {
CloseHandle(hToken);
hToken = NULL;
}
return bResult;
}
打赏如果有帮助到您,打赏一下作者吧~
0 评论