转: CreateProcessAsUser 0xC0000005访问冲突问题
- #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;
- }
如果把“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;
- }
转: CreateProcessAsUser 0xC0000005访问冲突问题的更多相关文章
- C++中一个0xC0000005访问冲突问题
在冯.诺依曼结构CPU(如i386,ARM A8,A9)的保护模式或者哈佛结构(如8051, ARM M0,.. M3)的CPU下,C++编译器将放置常量的内存设置为只读模式或者放入只读内存中,如果出 ...
- [精品]CAD批量处理工具
需要此工具请Q:3567 618 336 CAD批量处理工具是基于AutoCAD二次开发的批处理插件.将程序加载到CAD中,使用自定义的Lisp代码就可对多个文档进行批量操作. 1.文件说明 CAD ...
- __stdcall __cdecl 引起的程序崩溃
崩溃弹出的截图如下 看到0xC0000005, 访问冲突的问题, 九成九是内存访问违规, 比如访问了已经释放的指针, 又或者是离开函数时栈被破坏之类. 找了一下午一直没有头绪, 好在有一份可以执行的源 ...
- 问题解决——使用CriticalSection后 0xXXXXXXXX处最可能的异常: 0xC0000005: 写入位置 0x00000014 时发生访问冲突
================声明===================== 本文原创,转载请保持文章的完整性(含本声明),并显要的著名作者和出处. 本文链接:http://blog.csdn.ne ...
- 启动MFC程序的时候报错:0xC0000005: 读取位置 0x00000000 时发生访问冲突
此程序的结构是 MouseCap.h #pragma once #include <afxwin.h> class MouseCapApp : public CWinApp { publi ...
- 0xC0000005: 读取位置 0x00000000 时发生访问冲突
遇见这种问题一般都是空指针,即:指针里没有赋值~ 如果你对null 进行操作就会产生空指针异常 Object obj = new Object(); 你要知道 obj是一个Object指针变量,指向O ...
- xx.exe 中的 0x014180bd 处有未经处理的异常: 0xC0000005: 读取位置 0xfeeefeee 时发生访问冲突(当指针访问异常时,应考虑是不是对象未创建)。
xx.exe 中的 0x014180bd 处有未经处理的异常: 0xC0000005: 读取位置 0xfeeefeee 时发生访问冲突
- vc++,MFC,组合框控件设置时0xC0000005: 读取位置 0x00000020 时发生访问冲突
511.exe 中的 0x78bb5dec (mfc90ud.dll) 处未处理的异常: 0xC0000005: 读取位置 0x00000020 时发生访问冲突 _AFXWIN_INLINE int ...
- 调试器地址出现大小端紊乱,引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突。
今天在编写一系列新增需求代码后,开始调试代码 发现上个版本正常可运行的代码出现了:引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突. 上个版本数代码 ...
随机推荐
- 一元回归_R相关系数_多重检验
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...
- 前端PHP入门-035-Session的实例
登陆例子:(请注意一定要自己敲一遍,不要CV大法) 首先上一下成果图,激起同学们写的欲望,登录页如下: 点击登陆之后如下: 说明哦了,么问题.接下来自己实现一下. 首先数据库信息: 新建一个名为 ...
- libc、glibc与gcc
转http://blog.163.com/dragon_sjl@126/blog/static/100473339201107101517380/ 1.gcc(gnu collect compiler ...
- SSM框架使用-wrong
mybatis手册 1. mybatis 绑定错误 如果出现: org.apache.ibatis.binding.BindingException: Invalid bound statement ...
- Tool1—安装配置Windows Live Writer
详细步骤请看:http://home.cnblogs.com/group/topic/8550.html . Windows Live Writer手工配置步骤(在博客园配置时输入用户名与密码会自动完 ...
- 用sqoop将mysql的数据导入到hive表中
1:先将mysql一张表的数据用sqoop导入到hdfs中 准备一张表 需求 将 bbs_product 表中的前100条数据导 导出来 只要id brand_id和 name 这3个字段 数据存 ...
- CSS实现箭头效果
有时候网页中使用箭头以增强效果,一般的做法是使用图片,今天我们使用CSSCSS来实现“箭头效果”,使用CSS我们必须兼容所有浏览器(IE6.7.8.9.10.+),Chrome,Firefox,Ope ...
- Struts访问servletAPI方式
1.原理
- SPOJ JZPLIT
Problem SPOJ Solution 考虑任意一个作为矩阵四个角的位置 \(r_i \oplus c_j\oplus a_{i,j}\oplus x_{i,j}=0\) \(r_i \oplus ...
- 关于一些对location认识的误区
1. location 的匹配顺序是“先匹配正则,再匹配普通”. 矫正: location 的匹配顺序其实是“先匹配普通,再匹配正则”.我这么说,大家一定会反驳我,因为按“先匹配普通,再匹配正则”解释 ...