1. 程式人生 > 其它 >CreateProcessAsUser建立失敗,錯誤碼1314

CreateProcessAsUser建立失敗,錯誤碼1314

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

  

  但卻出現了問題,之前產品程式碼中會呼叫windows API - CreateProcessAsUser,來以另一個賬號的身份啟動另一個程序,另一個賬號是通過UI單獨提供的。

  之前會成功,但現在卻失敗,無法啟動新程序。

  錯誤碼(Error Code)是1314,通過查詢文件,這個Error Code的意思是:ERROR_PRIVILEGE_NOT_HELD,缺少許可權。

  

  通過查詢CreateProcessAsUser微軟的

官方文件可知,執行此API需要兩個許可權方可成功,如下:

  1.SE_INCREASE_QUOTA_NAME

  2.SE_ASSIGNPRIMARYTOKEN_NAME

  

  並且通過查詢另一個文件,可知問題的根本原因是:Local System Account預設具有這兩個許可權,而我們替換用的Domain Account卻不具有此許可權。

  

  因此必須要給Domain Account來增加許可權,方法是:在windows的Local Security Settings中找到User Rights Management,給相關使用者增加許可權。如下圖:

  

  其中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