【工做中学习】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日

相关文章
相关标签/搜索