很多博客都有记载如何在session0下创建进程的办法,也就是使用CreateProcessAsUser。但是这个要求服务的进程有SE_INCREASE_QUOTA_NAME和SE_ASSIGNPRIMARYTOKEN_NAME权限如果设置的登录用户是LocalServer的话,是默认有以上两个权限。但是如果是自己创建的账户,那么是不具有SE_ASSIGNPRIMARYTOKEN_NAME的权限。

查看用户的权限可以通过gpedit.msc工具中,在“计算机配置”-- “Windows设置” -- “安全设置” -- “本地策略” -- “用户权限分配”中查看。或者通过secedit.exe导出本地策略。

手动可以通过以上的方法设置,但是通过程序,在登录账户下的进程是无法设置。但是可以使用secedit.exe进行导出导入进行设置。导出的信息包括以下一部分:

  1. 1 [Privilege Rights]
  2. 2 SeNetworkLogonRight = *S-1-1-0,*S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551,*S-1-5-32-581
  3. 3 SeBackupPrivilege = *S-1-5-32-544,*S-1-5-32-551
  4. 4 SeChangeNotifyPrivilege = *S-1-1-0,*S-1-5-19,*S-1-5-20,*S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551
  5. 5 SeSystemtimePrivilege = *S-1-5-19,*S-1-5-32-544
  6. 6 SeCreatePagefilePrivilege = *S-1-5-32-544
  7. 7 SeDebugPrivilege = *S-1-5-32-544
  8. 8 SeRemoteShutdownPrivilege = *S-1-5-32-544
  9. 9 SeAuditPrivilege = *S-1-5-19,*S-1-5-20
  10. 10 SeIncreaseQuotaPrivilege = *S-1-5-19,*S-1-5-20,*S-1-5-32-544
  11. 11 SeIncreaseBasePriorityPrivilege = *S-1-5-32-544
  12. 12 SeLoadDriverPrivilege = *S-1-5-32-544
  13. 13 SeBatchLogonRight = *S-1-5-32-544,*S-1-5-32-551,*S-1-5-32-559
  14. 14 SeServiceLogonRight = *S-1-5-20,*S-1-5-80-0,*S-1-5-83-0
  15. 15 SeInteractiveLogonRight = __vmware__,Guest,*S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551,*S-1-5-32-581
  16. 16 SeSecurityPrivilege = *S-1-5-32-544
  17. 17 SeSystemEnvironmentPrivilege = *S-1-5-32-544
  18. 18 SeProfileSingleProcessPrivilege = *S-1-5-32-544
  19. 19 SeSystemProfilePrivilege = *S-1-5-32-544,*S-1-5-80-3139157870-2983391045-3678747466-658725712-1809340420
  20. 20 SeAssignPrimaryTokenPrivilege = *S-1-5-19,*S-1-5-20
  21. 21 SeRestorePrivilege = *S-1-5-32-544,*S-1-5-32-551
  22. 22 SeShutdownPrivilege = *S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551
  23. 23 SeTakeOwnershipPrivilege = *S-1-5-32-544
  24. 24 SeDenyNetworkLogonRight = Guest
  25. 25 SeDenyInteractiveLogonRight = Guest
  26. 26 SeUndockPrivilege = *S-1-5-32-544,*S-1-5-32-545
  27. 27 SeManageVolumePrivilege = *S-1-5-32-544
  28. 28 SeRemoteInteractiveLogonRight = *S-1-5-32-544,*S-1-5-32-555
  29. 29 SeImpersonatePrivilege = *S-1-5-19,*S-1-5-20,*S-1-5-32-544,*S-1-5-6
  30. 30 SeCreateGlobalPrivilege = *S-1-5-19,*S-1-5-20,*S-1-5-32-544,*S-1-5-6
  31. 31 SeIncreaseWorkingSetPrivilege = *S-1-5-32-545
  32. 32 SeTimeZonePrivilege = *S-1-5-19,*S-1-5-32-544,*S-1-5-32-545
  33. 33 SeCreateSymbolicLinkPrivilege = *S-1-5-32-544,*S-1-5-83-0
  34. 34

使用账户的SID,更新到SeAssignPrimaryTokenPrivilege字段,该用户即可拥有了SE_ASSIGNPRIMARYTOKEN_NAME权限。获取SID可以通过LookupAccountName函数完整的用户的SID可通过注册表查看,路径为:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

整个过程总结一下:

第一步:使用LookupAccountName,通过服务登录账户名,获取该账户的SID;

第二步:secedit.exe导出本地策略,将第一步获取的SID更新到SeAssignPrimaryTokenPrivilege字段;

例如:secedit /export /cfg gp.inf

第三步:使用secedit.exe,将新的配置文件导入到系统;

例如:secedit /configure /db C:\\test.sdb /cfg gp.inf

第四步:重启计算机;

第五步:在服务进程中,使用CreateProcessAsUser进行子进程的创建。

示例代码地址:代码GetSIDByUserName.cpp和CreateProcessAsUser.cpp

Windows平台下的session0创建进程的问题与解决办法的更多相关文章

  1. mysql免安装版1067错误终极解决办法|在windows平台下MySql启动时的1067错误的解决方法及反思

    [windows事件查看] 我的电脑--此电脑--右键管理--计算机管理--系统工具--事件查看器--Windows日志--应用程序--找错误标志,如下图 [提示] 按部就班,可能并不能解决你的问题, ...

  2. windows平台下cocos2d-x-3.0beta2创建新项目

    我目前使用的版本是cocos2d-x-3.0beta2 前提: 已安装了python2.7.3 已安装了VS2012 打开我的cocos2d-x-3.0beta2所在文件夹F:\Framework\c ...

  3. 利用zabbix监控ogg进程(Windows平台下)

    本文给大家介绍如何监控windows平台下的ogg程序.(注:所有操作都在administrator用户下面进行操作) 监控linux平台下的ogg程序请看:https://www.cnblogs.c ...

  4. 在Windows平台下Qt的exe报错问题排查步骤

    在Windows平台下Qt的exe报错问题排查步骤 工具介绍: 1. Dependency Worker Dependency Worker是一个免费的用具用来扫描任何的32bit 或者64bit 的 ...

  5. [转]Windows平台下Makefile学习笔记

    Windows平台下Makefile学习笔记(一) 作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译 ...

  6. Windows平台下Git服务器搭建

    第一步:下载Java,下载地址:http://www.java.com/zh_CN/ 第二步:安装Java.安装步骤不再详述. 第三步:配置Java环境变量. 右键”计算机” => ”属性” = ...

  7. Windows 平台下Git 服务器搭建

    由于项目中一直在使用git作为版本管理,自己对git的理解.使用都还不是怎么的熟悉,所以准备深入了解一下git及一些常用命令的使用,于是干脆把服务端架上,通过自己的PC作为服务端同时作为客户端的角色进 ...

  8. 【转】Windows平台下Git服务器搭建

    Windows平台下Git服务器搭建 Posted on 2015-05-18 21:29 阿祥当码农 阅读(7637) 评论(0) 编辑 收藏 该文章转自:http://www.codeceo.co ...

  9. Windows平台下的node.js安装

    Windows平台下的node.js安装 直接去nodejs的官网http://nodejs.org/上下载nodejs安装程序,双击安装就可以了 测试安装是否成功: 在命令行输入 node –v 应 ...

随机推荐

  1. BroadcastReceiver

    BroadcastReceiver 广播接受者 Android中, Broadcast是一种数据传递的方式/通信方式. Brodadcast 是Android 系统组件之一 广播的特性 1. 由一个发 ...

  2. GridView - javascript 触发后台 OnSelectedIndexChanged

    1.ASPX <asp:GridView ID="gdvDealers" runat="server" AutoGenerateColumns=" ...

  3. SpecFlow教程--快速入门

    原文http://www.specflow.org/getting-started/ 一.安装 为了能正确安装SpecFlow所需要的东西,你必须安装集成IDE的插件以及设置你的项目使用SpecFlo ...

  4. Android源代码编译——编译

    环境准备好了,代码下载完了,据说make一下就可以. 当然也可以配置一下环境变量: 编译初始化,在终端中执行: source build/envsetup.sh 选择编译目标,在终端中执行下面的命令: ...

  5. linux内核编译,内核参数修改

    核心(kernel):/boot/vmlinuz-version version 带发行包版本,本地版本内核模块(kernel object): /lib/modules/version/ 内核设计: ...

  6. (转载)SQLServer存储过程返回值总结

    1. 存储过程没有返回值的情况(即存储过程语句中没有return之类的语句) 用方法 int count = ExecuteNonQuery(..)执行存储过程其返回值只有两种情况 (1)假如通过查询 ...

  7. what is WLAN ? when and why we need use it ?

    无线局域网络(Wireless Local Area Networks: WLAN)是相当便利的数据传输系统,它利用射频(Radio Frequency: RF)的技术,取代旧式碍手碍脚的双绞铜线(C ...

  8. Java中Map的用法详解

    Map简介 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.此接口取代 Dictionary 类,后者完全是一个抽象类,而不是一个接口. Map 接口提供三种collecti ...

  9. 详解Google-ProtoBuf中结构化数据的编码

    本文的主要内容是google protobuf中序列化数据时用到的编码规则,但是,介绍具体的编码规则之前,我觉得有必要先简单介绍一下google protobuf.因此,本文首先会介绍一些google ...

  10. fineui框架

    http://fineui.com/demo/#/demo/layout/fit.aspx 虽然比较丑陋,但功能实用 此框架比较简单, 框架的作用你懂的,重点是要有帮助文档, 进阶型的容易上手的帮助文 ...