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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

在CentOS 6.3下安装OpenPetra 的 Mono 3.0.6 部署包

这篇文章记录的是在CentOS 6.3下安装《OpenPetra 以及CentOS Mono 3.0 部署包》提到的 Mono 3.0.6 部署包。 首先下载r...

1868
来自专栏battcn

一起来学SpringBoot | 第十七篇:轻松搞定文件上传

文件上传和下载是 JAVA WEB中常见的一种操作,文件上传主要是 将文件通过IO流传输到服务器的某一个特定的文件夹下;刚开始工作那会一个上传文件常常花费小半天...

1022
来自专栏小狼的世界

PHP中的PathInfo

PHP中的全局变量$_SERVER['PATH_INFO']是一个很有用的参数,众多的CMS系统在美化自己的URL的时候,都用到了这个参数。

773
来自专栏LuckQI

容器Docker学习系列七~系统信息学习

前面了解的Docker学习的本地镜像管理还有镜像仓库的命令学习,怎么说呢其实这些命令已经够我们平常使用的了。但是如果随着发展我们在系统程序调优上可能就需要了解更...

811
来自专栏hbbliyong

常用工具整理

代码编辑 Cmd Markdown 免费在线Markdown编辑器,一直再用,很不错。 ? Cmd Markdown下载地址:X86 | X64 反编译...

40310
来自专栏前端儿

Fiddler使用AutoResponder进行本地文件和线上文件的映射

就捞起尘封已久的 Fiddler,既然线上的JQ加载不出来,那就做个本地文件的映射吧,使用本地的JQ库代替线上的

601
来自专栏程序你好

在c#中创建Windows服务

Windows服务通常在操作系统OS启动并在后台运行应用程序时启动。Windows服务在自己的会话中执行应用程序。它可以自动启动,也可以手动暂停、停止和重新启动...

432
来自专栏Ryan Miao

基于php5.5使用PHPMailer-5.2发送邮件

PHPMailer - A full-featured email creation and transfer class for PHP。

752
来自专栏张戈的专栏

【ES私房菜】收集 Linux 系统日志

ES环境已经就绪,我们需要先调通一类简单日志作为数据上报全链路的试运行。恰好Linux系统日志就是这样一个角色,随处可见,风险可控。这里,我们选择了2种Linu...

3651
来自专栏大魏分享(微信公众号:david-share)

讲真,Ansible 可以管理Windows?

前言: 本文是我和李尧老师一起实验。李尧是红帽高级培训讲师,目前负责红帽中国区员工内部技术培训与认证。 一、Ansible能对windows做什么操作? Ans...

4445

扫码关注云+社区