zoukankan      html  css  js  c++  java
  • 【工作中学习】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

      Thanks.

                                            - Kevin Song

                                            2016年1月5日

      

  • 相关阅读:
    LeetCode --- Climbing Stairs
    LeetCode --- Best Time to Buy and Sell Stock II
    LeedCode --- Best Time to Buy and Sell Stock
    git命令总结
    LeetCode --- Jump Game II
    Hdu 4497
    数据库lib7第4题创建存储过程
    Hdu 4496
    Hdu 4493
    快速排序
  • 原文地址:https://www.cnblogs.com/KevinSong/p/5102365.html
Copyright © 2011-2022 走看看