在服務中用管理員許可權建立乙個可彈出UI的程序

2021-06-20 06:36:12 字數 3702 閱讀 4762



do//      if(!setprivilege(hthistoken,se_tcb_name,true))

//      

dword dwsessionid = wtsgetactiveconsolesessionid();  

if(!wtsqueryusertoken(dwsessionid,&htoken))  

startupinfo si;  

process_information pi;  

zeromemory(&si,sizeof(startupinfo));  

zeromemory(&pi,sizeof(process_information));  

si.cb = sizeof(startupinfo);  

si.lpdesktop = _t("winsta0\\default");  

si.wshowwindow = true;  

si.dwflags     = startf_useshowwindow;  

lpvoid penv = null;  

dword dwcreationflag = normal_priority_class | create_new_console;  

if(!createprocessasuser(htoken,null,pbuf,null,null,false,dwcreationflag,penv,null,&si,&pi))  

}while(0);  

do

// if(!setprivilege(hthistoken,se_tcb_name,true))

//

dword dwsessionid = wtsgetactiveconsolesessionid();

if(!wtsqueryusertoken(dwsessionid,&htoken))

startupinfo si;

process_information pi;

zeromemory(&si,sizeof(startupinfo));

zeromemory(&pi,sizeof(process_information));

si.cb = sizeof(startupinfo);

si.lpdesktop = _t("winsta0\\default");

si.wshowwindow = true;

si.dwflags = startf_useshowwindow;

lpvoid penv = null;

dword dwcreationflag = normal_priority_class | create_new_console;

if(!createprocessasuser(htoken,null,pbuf,null,null,false,dwcreationflag,penv,null,&si,&pi))

}while(0);

這種方法建立的程序不是管理員許可權的,因為是呼叫了使用者的令牌建立的程序。不過,確實能順利彈出ui。

[cpp]view plain

copy

print?

handle htoken = null;  

handle htokendup = null;  

do  

startupinfo si;  

process_information pi;  

zeromemory(&si,sizeof(startupinfo));  

zeromemory(&pi,sizeof(process_information));  

si.cb = sizeof(startupinfo);  

si.lpdesktop = _t("winsta0\\default");  

si.wshowwindow = sw_show;  

si.dwflags     =   startf_useshowwindow /*|startf_usestdhandles*/;  

lpvoid penv = null;  

dword dwcreationflag = normal_priority_class | create_new_console | create_unicode_environment;  

if(!createenvironmentblock(&penv,htokendup,false))  

if(!createprocessasuser(htokendup,null,pbuf,null,null,false,dwcreationflag,penv,null,&si,&pi))  

if(penv)  

}  else

}  else

}while(0);  

if(htokendup != null && htokendup != invalid_handle_value)  

closehandle(htokendup);  

if(htoken != null && htoken != invalid_handle_value)  

closehandle(htoken);  

handle htoken = null;

handle htokendup = null;

do startupinfo si;

process_information pi;

zeromemory(&si,sizeof(startupinfo));

zeromemory(&pi,sizeof(process_information));

si.cb = sizeof(startupinfo);

si.lpdesktop = _t("winsta0\\default");

si.wshowwindow = sw_show;

si.dwflags = startf_useshowwindow /*|startf_usestdhandles*/;

lpvoid penv = null;

dword dwcreationflag = normal_priority_class | create_new_console | create_unicode_environment;

if(!createenvironmentblock(&penv,htokendup,false))

if(!createprocessasuser(htokendup,null,pbuf,null,null,false,dwcreationflag,penv,null,&si,&pi))

if(penv)

}else

} else

}while(0);

if(htokendup != null && htokendup != invalid_handle_value)

closehandle(htokendup);

if(htoken != null && htoken != invalid_handle_value)

closehandle(htoken);

這裡就能用管理員許可權開啟乙個程序並,彈出ui了,注意dwcreationflag和si的引數設定,我是經過多次試驗得出的,錯了的話,可能就彈不出來了哦。這種方法是開啟使用者的令牌但是把服務的所有許可權都給這個令牌,所以使用者令牌就有足夠的許可權用管理員開啟程序了。

乙個程序是否以管理員許可權執行

任務管理器檢視 選擇列.勾選 uac 虛擬化 空 管理員許可權執行 啟用 允許uac虛擬化 停用 不允許uac虛擬化 builtin administrators為owner表示管理員許可權執行,為deny則不是管理員 sysinternalssuite accesschk.exe命令列工具 如 a...

乙個配置管理員的困惑

作配置管理快兩年了,最近遇到了件很鬱悶的事。前一段時間老總跟我說馬上製作乙個 專案當前成熟的版本給客戶去試用,然後就走掉了。每次當我出版本的時候都會遵循 提交 收集 系統構建 安裝 測試這樣的基本流程去做。但是當我們費了九牛二虎之力終於出了乙個系統軟體版本的時候。有些開發人員跑過來跟我說 在你出版本...

乙個方便版本管理員的git log shell指令碼

直接分享 old ifs ifs ifs arr 1 ifs old ifs filename date y m d date h m s touch filename.sql for s in do echo e 033 41 33m s 033 0m if 3 4 then git log af...