【工做中學習】CreateProcessAsUser失敗,錯誤碼:1314

  事情原由是這樣,windows

  產品的Windows服務(Service)以前一直是用Local System Account在運行的,但這個版本有需求要換成使用普通的Domain User來運行,以下圖:spa

  

  但卻出現了問題,以前產品代碼中會調用windows API - CreateProcessAsUser,來以另外一個帳號的身份啓動另外一個進程,另外一個帳號是經過UI單獨提供的。blog

  以前會成功,但如今卻失敗,沒法啓動新進程。token

  錯誤碼(Error Code)是1314,經過查詢文檔,這個Error Code的意思是:ERROR_PRIVILEGE_NOT_HELD,缺乏權限。進程

  

  經過查詢CreateProcessAsUser微軟的官方文檔可知,執行此API須要兩個權限方可成功,以下:文檔

  1. SE_INCREASE_QUOTA_NAMEget

  2. SE_ASSIGNPRIMARYTOKEN_NAME產品

  

  而且經過查詢另外一個文檔,可知問題的根本緣由是:Local System Account默認具備這兩個權限,而咱們替換用的Domain Account卻不具備此權限。it

  

  所以必需要給Domain Account來增長權限,方法是:在windows的Local Security Settings中找到User Rights Management,給相關用戶增長權限。以下圖:io

  

  其中SE_INCREASE_QUOTA_NAME對應的權限是Adjust memory quotas for a process,SE_ASSIGNPRIMARYTOKEN_NAME對應的權限是Replace a process-level token。

  增長權限後,再執行,可成功,問題解決。

  

  參考資料:

  1. CreateProcessAsUser function

    https://msdn.microsoft.com/en-us/library/windows/desktop/ms682429(v=vs.85).aspx

  2. Privilege Constants

    https://msdn.microsoft.com/en-us/library/windows/desktop/bb530716(v=vs.85).aspx

  3. LocalSystem Account

    https://msdn.microsoft.com/en-us/library/windows/desktop/ms684190(v=vs.85).aspx

 

  Thanks.

 

                                        - Kevin Song

                                        2016年1月5日

相關文章
相關標籤/搜索