一段规范代码的书写

规范代码.png

#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 评论

发表评论