服务程序调用 CreateProcessAsUser 0xC0000005访问冲突问题

CreateProcessAsUser之创建进程时指定父进程与UAC(UAC原理) UAC UAC(user account control),这里科普下UAC的功能,其实UAC就是大家常见的安装软件或者启动程序的时候的出现的全屏变暗的一个提示框,正常的UAC级别下,会检测程序是否有数字签名(可识别程序),以及他的数字签名是否合法,这对于一部分低端的木马具有提醒作用,所以除非特殊情况,不要乱对UCA降权。 UAC运行原理: 在Windows Vista操作系统中。 用户账户主要... 阅读详情
        在使用CreateProcessAsUser时出现了 0xC0000005访问冲突问题,百思不得其解。终于在 子航的博客http://www.cnblogs.com/hezihang/p/3387283.html找到问题根源
 
错误代码:
#include <WtsApi32.h>
#pragma comment(lib, "WtsApi32.lib")

bool MyImpersonateLoggedOnUser()
{
	HANDLE hToken = NULL;
	DWORD dwConsoleSessionId = WTSGetActiveConsoleSessionId();
	if (WTSQueryUserToken(dwConsoleSessionId, &hToken))
	{
		if (ImpersonateLoggedOnUser(hToken))
		{
			// 保存Token
			WCHAR *szCmdLine = L"c:\\notepad.exe";  //错误在这里

			STARTUPINFO si;
			ZeroMemory(&si, sizeof(STARTUPINFO));
			si.cb = sizeof(STARTUPINFO);
			si.lpDesktop = L"winsta0\\default";

			PROCESS_INFORMATION pi;
			ZeroMemory(&pi, sizeof(pi));
			// hToken为当前登陆用户的令牌
			LPVOID lpEnvBlock = NULL;
			BOOL bEnv = false;// CreateEnvironmentBlock(&lpEnvBlock, hToken, FALSE);
			DWORD dwFlags = CREATE_NEW_CONSOLE;
			if (bEnv)
			{
				dwFlags |= CREATE_UNICODE_ENVIRONMENT;
			}
			// 环境变量创建失败仍然可以创建进程,但会影响到后面的进程获取环境变量内容
			bool bRet = CreateProcessAsUser(
				hToken,
				NULL,
				szCmdLine,
				NULL,
				NULL,
				FALSE,
				dwFlags,
				bEnv ? lpEnvBlock : NULL,
				NULL,
				&si,
				&pi);
			int a = GetLastError();
			// 使用完毕需要释放环境变量的空间
			if (bEnv)
			{
				DestroyEnvironmentBlock(lpEnvBlock);
			}
			WaitForSingleObject(pi.hProcess, INFINITE);
 			return true;
		}
	}
	return false;
} 

szCmdLine指针是保存在堆上,但字符串“c:\\notepad.exe”是一个常量,它是保存在常量区的,被写保护了,CreateProcessAsUser 访问堆上的地址出了问题
如果把“c:\\notepad.exe"定义到栈或者全局变量就不存在此问题了。
修改后的代码:
    
#include <WtsApi32.h>
#pragma comment(lib, "WtsApi32.lib")

bool MyImpersonateLoggedOnUser()
{
	HANDLE hToken = NULL;
	DWORD dwConsoleSessionId = WTSGetActiveConsoleSessionId();
	if (WTSQueryUserToken(dwConsoleSessionId, &hToken))
	{
		if (ImpersonateLoggedOnUser(hToken))
		{
			// 保存Token
			WCHAR szCmdLine[] = L"c:\\notepad.exe";   //改变了szCmdLine的地址空间

			STARTUPINFO si;
			ZeroMemory(&si, sizeof(STARTUPINFO));
			si.cb = sizeof(STARTUPINFO);
			si.lpDesktop = L"winsta0\\default";

			PROCESS_INFORMATION pi;
			ZeroMemory(&pi, sizeof(pi));
			// hToken为当前登陆用户的令牌
			LPVOID lpEnvBlock = NULL;
			BOOL bEnv = false;// CreateEnvironmentBlock(&lpEnvBlock, hToken, FALSE);
			DWORD dwFlags = CREATE_NEW_CONSOLE;
			if (bEnv)
			{
				dwFlags |= CREATE_UNICODE_ENVIRONMENT;
			}
			// 环境变量创建失败仍然可以创建进程,但会影响到后面的进程获取环境变量内容
			bool bRet = CreateProcessAsUser(
				hToken,
				NULL,
				szCmdLine,
				NULL,
				NULL,
				FALSE,
				dwFlags,
				bEnv ? lpEnvBlock : NULL,
				NULL,
				&si,
				&pi);
			int a = GetLastError();
			// 使用完毕需要释放环境变量的空间
			if (bEnv)
			{
				DestroyEnvironmentBlock(lpEnvBlock);
			}
                        WaitForSingleObject(pi.hProcess, INFINITE);
			return true;
		}
	}
	return false;
} 


Design-Expert 13汉化部署指南:科研级DOE工具本地化实践 Design-Expert是实验设计(DOE)领域的专业统计软件,其核心价值在于空间填充算法、深度模型诊断(如Lack of Fit检验、PRESS统计量)和高维参数优化能力。汉化并非简单界面翻译,而是涉及Unicode字符集兼容、Windows系统API调用、DLL侧加载机制及ALCOA+数据可追溯性要求的系统工程。真正的本地化需确保统计术语精准(如‘Aliasing’译为‘混杂’)、数学库稳定调用(Intel MKL)、UTF-8数据正确解析,并支持GMP/ICH合规报告输出。本指南面向制药工艺验证、材 阅读详情

相关推荐

使用CreateProcess崩溃:处未处理的异常: 0xC0000005: 写入位置 0x00415652 时发生访问冲突

如果CreateProcess的第二个参数字符串是常量或者是储存在堆中的就会被写保护,崩溃。如果字符串定义到栈或者全局变量就不存在此问题了。

m0_60352504的博客 1159

CreateProcessAsUser失败,错误码:1314

事情起因是这样,   产品的Windows服务(Service)之前一直是用Local System Account在运行的,但这个版本有需求要换成使用普通的Domain User来运行,如下图:      但却出现了问题,之前产品代码中会调用windows API - CreateProcessAsUser,来以另一个账号的身份启动另一个进程,另一个账号是通过UI单独提供的。   之前会成功,但现在却失败,无法启动新进程。   错误码(Error Code)是1314,通过查询文档,这个Erro

萧戈的专栏 5036

(目录)微气候模型ENVI-met模拟的基本使用教程

ENVI-met模拟操作系列(一) 介绍:

ysqzhatian的博客 2万+

CreateProcessAsUser 项目常见问题解决方案

CreateProcessAsUser 项目常见问题解决方案 项目基础介绍 CreateProcessAsUser 是一个开源项目,旨在通过使用 Win32 API 在不同的 Windows 会话中创建进程。该项目的主要目的是允许在不同的会话(如 Windows 服务)中启动具有图形用户界面的进程,以便用户能够看到。项目的主要编程语言是 C#,同时也包含一些 Batchfile 脚本。 新手使用注...

gitblog_00971的博客 1306

通达信波段交易公式实战:如何用副图指标精准捕捉买卖点(附完整源码)

本文深入解析通达信波段交易副图指标的构建与应用,提供完整源码实现,帮助投资者精准捕捉买卖点。通过趋势强度度量、超买超卖判断及信号过滤机制,结合K线图分析,有效提升波段交易的成功率。

weixin_29306317的博客 609

深入解析SPLL单相软件锁相环:从SOGI原理到PI系数调优实践

本文深入解析SPLL单相软件锁相环技术,从SOGI原理到PI系数调优实践,详细介绍了其在数字电源设计中的应用。通过数学推导和实际调试经验,帮助工程师快速掌握锁相环的核心参数计算和优化方法,提升电网相位追踪的精确度和响应速度。

weixin_30316097的博客 382

提升进程权限

 /////////////////////////////////提升进程权限///////////////// char* szPrivName = SE_DEBUG_NAME; HANDLE hToken; LUID sedebugnameValue; TOKEN_PRIVILEGES tkp; if(!OpenProcessToken(GetCurrentProcess(), TOKE

hnney的专栏 948

liquibase扩展支持达梦数据库

近期项目中需要支持国产数据库,需要liquibase底层支持达梦数据库,记录下操作的详细步骤以便分享。 1.liquibase支持的数据库很多如MySQL, PostgreSQL, Oracle, Sql Server, DB2。但是达梦数据库并不支持,所以需要新建DMDatabase类来适配达梦数据库。达梦语法和Oracle很像所以只需要复制liquibase-core下的Oracle Database做些修改就可了。以下为需要修改的地方 public class DMDatabase extends A

qq_43677719的博客 5472

转: CreateProcessAsUser 0xC0000005访问冲突问题

转:http://blog.youkuaiyun.com/glc22/article/details/77227367 在使用CreateProcessAsUser时出现了0xC0000005访问冲突问题,百思不得其解。终于在子航的博客http://www.cnblogs.com/hezihang/p/3387283.html找到问题根源 错误代码: #include&lt...

weixin_30551947的博客 463

软件可靠性设计

本文系统介绍了软件可靠性设计与建模的理论框架和实施方法。首先从可靠性定义、核心思想和与建模的关系等理论基础出发,重点阐述了模块化设计、冗余容错、异常处理等六类可靠性设计方法及其技术栈。文章详细分析了可靠性设计在软件生命周期各阶段的应用,并深入探讨了设计与建模的深度结合机制,包括参数影响、验证方法和量化指标。最后提出了覆盖设计、开发、测试和运行四个阶段的落地策略,形成完整的"设计-建模-运行"流程体系。全文强调通过预防性设计和量化建模相结合的方法提升软件系统的可靠性和稳定性。

moton2017的博客 896

OpenAI最强编程助手Codex:下载安装、使用指南(含使用方式、提示技巧、趋势)

OpenAI最近上线了最强编程Agent——Codex,一起来看看吧!

Code_流苏:在代码中寻诗意,在实践中觅真知 1万+

问题解决:C# VS2010 调试程序出现:xxx.exe 中的 xxx 处有未经处理的异常: 0xC0000005: 写入位置 0x00000014 时发生访问冲突

问题描述: 近期使用C#在VS2010对MapGIS 10 进行二次开发。进行项目调试时出现了下列问题: xxx.exe 中的 xxx 处有未经处理的异常: 0xC0000005: 写入位置 0x00000014 时发生访问冲突 尝试解决思路: 百度有人说时由于实例化的问题,但是所有对象已经完成实例化,所以排除这个问题。 解决思路: // 1 检查平台是否与开发提供的对应(x64/x86) // ...

做一名持续学习的GIS Coder 3211

SIMULINK开发项目实例 1000 例专栏之第907例--基于新能源与储能系统的场景实例:液流电池在微电网中的动态响应仿真

本文介绍了如何使用Simulink对液流电池在微电网中的动态响应进行建模与仿真。重点包括:1)构建液流电池模型及其特性参数设置;2)配置双向DC-DC变换器调节充放电过程;3)搭建包含分布式能源的微电网系统;4)设计基于SOC的控制器;5)通过仿真分析系统性能指标。该教程提供了完整的建模流程和MATLAB代码示例,帮助用户验证液流电池在微电网中的稳定性和适用性。

xiaoheshang_123的博客 184

解决 win10 64位系统下服务进程创建system32文件夹下可执行程序进程失败的问题

问题描述:操作系统是Win10 64位。自己写了一个窗口应用(32位),就叫它DemoWin.exe吧,把它放到 C:\Windows\System32 文件夹下。然后安装了一个服务(32位),在服务里调用CreateProcessAsUser创建 DemoWin.exe 进程。代码如下:dwSessionId = WTSGetActiveConsoleSessionId(); WTSQue...

ayang1986的专栏 7883

Codex入门10-Goal自主任务(进阶必学:设定目标就不管了,AI自己干活到完成)

/goal 是Codex CLI最强大的进阶功能——设定一个目标,AI就会制定计划、分步执行、自我测试、持续迭代,即使你关掉终端也会继续。本文详解/goal的工作原理、配置启用方法、常用命令(pause/resume/status/clear),以及如何写出高质量的目标描述让AI高效自主完成任务。

yueyeguzhuo的专栏 456

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

计算机的安全问题来自,来自服务的CreateProcessAsUser存在访问远程计算机的安全问题...

我试图使用本地(远程)数据库与服务器上的集中统一数据库(使用Sybase数据库)进行同步。同步必须在预定的时间发生,我正在使用“CreateProcessByUser”。要启动同步过程,我正在使用由sybase提供的dbremote.exe。来自服务的CreateProcessAsUser存在访问远程计算机的安全问题所构造的命令行参数是:COMMANDLINE =则Dbremote.exe -l ...

weixin_42570484的博客 309

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Windows Sandbox中CreateProcessAsUserW错误2的根因与修复

CreateProcessAsUserW是Windows中实现跨用户上下文进程创建的核心API,其返回错误代码2(ERROR_FILE_NOT_FOUND)常被误判为路径配置问题,实则反映令牌权限、完整性级别(IL)隔离与沙盒路径虚拟化机制的深层冲突。在基于Windows Sandbox构建的轻量级代码执行环境(如Codex类工具)中,该错误高频出现于教育自动化、CTF动态分析及企业开发测试场景。根本原因在于Low IL沙盒上下文无法解析Medium/High IL路径、用户配置文件虚拟化(UVP)导致DL

weixin_33824385的博客 204

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

0xC000005执行位置发生冲突……

2,lambda表达式中使用[&]涉及到子线程中的变量,需要谨慎。如果子线程执行完释放后,再使用[&]涉及到子线程的数据,就会存在找不到引用的问题,可能会给一个随机数。这种方式,正常情况不加multab,只能获取外部的数据,不能修改。加了multab则可以修改外部的数据。1,一般在多线程的情况下,注意对数据的访问时,比如读写的时候要注意加🔒,一定要加锁。有一个技巧lambda( , , , [=]()multab{

m0_60752380的博客 677

C# 此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug [问题

1.打开VS-〉调试-〉选项和配置。

8673

Windows via C/C++ 学习(8)CreateProcess 函数

CreateProcess 函数原型:BOOL CreateProcess( PCTSTR pszApplicationName, PTSTR pszCommandLine, PSECURITY_ATTRIBUTES psaProcess, PSECURITY_ATTRIBUTES psaThread, BOOL bInheritHandles, DWORD fdwCrea...

weixin_30809173的博客 336

CreateProcess使用注意事项

BOOL CreateProcessCreateProcessA(     __in_opt    LPCSTR lpApplicationName,     __inout_opt LPSTR lpCommandLine,     __in_opt    LPSECURITY_ATTRIBUTES lpProcessAttributes,     __in_opt   

Simon 3023
上一篇: 项目管理之功能接口与界面
下一篇: win32 窗体隐藏
宇文仲竹
博客等级 码龄16年 360粉丝 236原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值