概述:
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則重新啟動...