1. 程式人生 > 實用技巧 >【動態UAC許可權】 無盾和有盾 (win32&cmd)

【動態UAC許可權】 無盾和有盾 (win32&cmd)


可以看到兩種不同的提權方式,注意是動態,用程式碼提權,而不是用清單檔案提前處理。

函式都寫好了,這裡不多做解釋。


win32程式:

首先需要這倆標頭檔案,第二個我忘了啥函式要用了,總之出問題加上就對了:(補:獲取程式路徑的函式)

#include <windows.h>
#include <Shlobj.h>

檢測是否以UAC啟動:

//返回1為管理員許可權,0位普通 
BOOL IsUserAdmin(void){
    BOOL b;
    SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
    PSID AdministratorsGroup; 
    AllocateAndInitializeSid(
        
&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &AdministratorsGroup); CheckTokenMembership(NULL,AdministratorsGroup,&b); FreeSid(AdministratorsGroup); return(b); }

主要部分,此處應注意返回值,程式中應在開頭這樣編寫:

  if(IsUserAdmin()){
        
//is UAC //什麼都不做 } else{ //not UAC char path[100]; GetModuleFileName(NULL,path,100); SHELLEXECUTEINFO execinfo; memset(&execinfo,0,sizeof(execinfo)); execinfo.lpFile =path; execinfo.cbSize =sizeof(execinfo); execinfo.lpVerb
="runas"; execinfo.fMask =SEE_MASK_NO_CONSOLE; execinfo.nShow =SW_SHOWDEFAULT; //execinfo.lpParameters =NULL; ShellExecuteEx(&execinfo); CloseHandle(execinfo.hProcess); exit(0); }

此處的else內就是UAC提權的過程,通過ShellExecuteEx 函式以UAC許可權啟動,啟動完成後當前程式退出。

我懶得講解,不明白的可以查微軟文件。


控制檯程式:

看到沒我這麼貼心,快來感謝我。

標頭檔案不用多說:

#include <stdio.h>
#include <windows.h>

還是讓我多說了,唉,我真是太好了

控制檯的引數可以直接獲得程式路徑,就不用其它函數了,通常不這麼做:

int main(int argc,char const *argv[])

好,下一步直接把這一坨往開頭一方,完事:

if(IsUserAdmin()){
        //is UAC
        //什麼都不做 
    }
    else{
        //not UAC
        char path[100];
        GetModuleFileName(NULL,path,100);
    
        SHELLEXECUTEINFO execinfo;  
        memset(&execinfo,0,sizeof(execinfo));  
        execinfo.lpFile         =path;  
        execinfo.cbSize         =sizeof(execinfo);  
        execinfo.lpVerb         ="runas";  
        execinfo.fMask          =SEE_MASK_NO_CONSOLE;  
        execinfo.nShow          =SW_SHOWDEFAULT;  
        //execinfo.lpParameters   =NULL;  
  
        ShellExecuteEx(&execinfo);
        CloseHandle(execinfo.hProcess);
        
        exit(0);
    }


事了拂衣去,深藏功與名~

【歡迎加入我的qq群:789209269