事情起因是这样,

  产品的Windows服务(Service)之前一直是用Local System Account在运行的,但这个版本有需求要换成使用普通的Domain User来运行,如下图:

  

  但却出现了问题,之前产品代码中会调用windows API - CreateProcessAsUser,来以另一个账号的身份启动另一个进程,另一个账号是通过UI单独提供的。

  之前会成功,但现在却失败,无法启动新进程。

  错误码(Error Code)是,通过查询文档,这个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日

  

【工作中学习】CreateProcessAsUser失败,错误码:1314的更多相关文章

  1. socket学习及各类错误码(部分转)

    如果本地有多个网卡(即多个ip),要指定本地发送网卡,则在建立的socket上bind所指定的网卡进行connect和send操作.例子程序如下: #include <stdio.h>#i ...

  2. 【工作中学习1】两个设计模式:Singleton(单例)和 Adapter(适配器)

    好久没有写自己的学习小博客,罪过罪过..最近本菜鸟在项目中接触到经常用到的设计模式,首先是Singleton(单例),这个相信大家都会用到很多,所以自己用代码实现一下,有助于自己学习理解,如有不对,请 ...

  3. CUBRID学习笔记 5 错误码

    服务器错误码 AS Error Code Number CAS Error Code Error Message Note -1000 CAS_ER_DBMS "CUBRID DBMS Er ...

  4. 动软数据库文档生成器 失败错误码HRESULT:0x80010105 解决办法

    是否在关闭office文档模板时提示拼写错误语法检查太多而导致失败?如果是提示这个错误的话,可以将拼写检查和语法检查关掉即可.下附相关链接:http://support.microsoft.com/k ...

  5. vim 的各种用法,很实用哦,都是本人是在工作中学习和总结的

    (一)初级个性化配置你的vim 1.vim是什么? vim是Vi IMproved,是编辑器Vi的一个加强版,一个极其强大并符合IT工程师(程序员.运维)习惯的编辑器.如果你是一名职业的SE,那么一定 ...

  6. 阿里百川SDK初始化失败 错误码是203

    由idea换到Androidstudio 了,结果报这个错,之前好好的啊!!! 设置问题:

  7. MySQL远程连接失败(错误码:2003)

    一 环境信息 服务器系统:Ubuntu 18.04 服务器MySQL版本:14.14 Distrib 5.7.25 本地系统:Kali Linux 本地客户端:python3交互模式 本地开发环境:p ...

  8. 【转】vim 的各种用法,很实用哦,都是本人是在工作中学习和总结的

    原文地址https://www.cnblogs.com/lxwphp/p/7738356.html (一)初级个性化配置你的vim 1.vim是什么? vim是Vi IMproved,是编辑器Vi的一 ...

  9. 【工作中学习2】Map的使用及排序(第三个参数)

    项目进行中,使用到Map(std::map),Map要点整理如下: 1. Map,也叫关联数组,提供key/value(键/值对),key用来索引,value是被存储和检索的数据. 2. key值唯一 ...

随机推荐

  1. stl仿函数和适配器

    所谓的适配器就是底层利用仿函数,然后修改仿函数的接口,达到自己的目的: 例如:template<class operation> class binder1st的适配器,其本质是一个类,它 ...

  2. C++的一种业务分发方案(另类的工厂模式)

    在C++中,传统的业务分发.总要写一大串的switch-case,并且每次添加新业务时.都要在原有的switch-case里加一个分支,这就违反了设计模式中的开放封闭原则. 下面这样的方案,就全然去除 ...

  3. Property 'XXX' not found on type java.lang.String解决方案

    一,标签指令错误. 原指令标签: <%@ taglib prefix="c" uri="http://j ava.sun.com/jstl/core" % ...

  4. 类关系/self/特殊成员

    1.依赖关系 在方法中引入另一个类的对象 2.关联关系.聚合关系.组合关系 #废话少说 直接上代码===>选课系统 # coding:utf-8 class Student(object): d ...

  5. aspectj 与 spring 自定义注解

    ** * ErrorCode: * * @author yangzhenlong * @since 2016/7/21 */ @Target({ElementType.METHOD}) @Retent ...

  6. PV并发UV

    netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'返回结果:SYN_RECV 2 (SYN连接请求收到2个 等待确 ...

  7. /var 目录下文件系统

    /var    :日志文件/var/log:各种系统日志存放地*/var/log/message :系统信息默认日志文件 (非常重要)按周自动轮循/var/log/secure  :记录登入系统信息文 ...

  8. Linux7.3 glib-2.49安装记录

    由于 Linux系统较新,所在glib选择了较新的glib-2.49,安装过程遇到颇多错误,这里只记录正确的成功的安装记录. # rpm -q ncurses readline lua libffi ...

  9. java课后思考问题(二)

    1.编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数. import java.math.BigInteger; public class Suijishu public stati ...

  10. python 合并重叠数据