windows 服務程序中呼叫UI程序

2021-09-17 22:46:52 字數 1019 閱讀 8913

概述:

windows 服務程式的許可權一般只是system許可權,而ui程序則需要administrator許可權才能正常顯示,因此服務程序需要呼叫ui程序則需要進行提權處理.可使用createprocessasuser 方法建立指定許可權的應用程式。

提權則需要獲取對應許可權令牌,一般explorer.exe程序的許可權是administrator,因此我們可以通過 explorer.exe程序獲取administraror許可權。

具體實現方法如下:

//根據程序名稱獲取程序控制代碼

handle getprocesshandle(lpctstr szexename)

;handle hsnapshot = createtoolhelp32snapshot(th32cs_snapall, 0);

if (process32first(hsnapshot, &pc)) while (process32next(hsnapshot, &pc));

return null;

}//建立程序阻塞並返回程序控制代碼

bool shellexecutebyadmin( lpctstr strcommand,  handle* pprocesshandle)

;lstrcat(szparameter, strcommand.c_str());

if (createprocessasuser(htoken, null, szparameter, null,

null, false, create_no_window|create_new_console|create_default_error_mode, null, null, &si, &pi))   //以administrator使用者身份執行程式,create_no_window,create_new_console,create_default_error_mode

closehandle(pi.hprocess);

closehandle(pi.hthread);

}closehandle(htoken);

return 0;

Visual C 中呼叫Windows服務初探

這裡把執行緒的優先順序設到最低,這樣不會耗用過多的系統效能。這個執行緒物件使用threadfunc作為執行緒函式,因此將這個執行緒函式補充完整 public static void threadfunc 安裝完後能過系統的服務管理器你就可以看到你的服務了,只要點選啟動就可以把它啟動,把時間向前改乙個...

windows服務程式中建立使用者程序

最近碰到個問題,需要在服務中檢測使用者桌面的情況。但是服務程式都是system賬戶下執行,屬於session0,不能檢測到使用者桌面的情況。所以就需要另啟乙個使用者程序來獲取這些資訊,然後傳送給服務。所以就用到了 createprocessasuser來建立使用者程序。include include...

從windows服務中開啟視窗程序

ivr地方業務中有乙個dba bjldnw工具要在伺服器上執行著.一旦斷開業務即中止.需要寫乙個守護程式監視它,一旦發現關閉了即重新啟動.為了防止守護程式本身被使用者關閉,所以我打算做乙個windows服務在後台執行.每5分鐘列舉乙個當前系統程序,如果 沒有發現dba bjldnw.exe則重新啟動...