转: 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 时发生访问冲突. 上个版本数代码 ...
随机推荐
- 在vue中使用animate.css
animate.css是一款前端动画库,相似的有velocity-animate 用法: 首先 npm install animate.css --save 然后在vue文件的script中引入: i ...
- 《JavaScript 实战》:JavaScript 实现图片切割效果
很久之前就在一个网站的截取相片的功能中看到这个效果,也叫图片裁剪.图片剪切(设置一下也可以做出放大镜等类似的效果).当时觉得很神奇,碍于水平有限,没做出来.前些日子突然想做一个透镜效果,就突然想到了这 ...
- AutoESL与Xilinx那些人和事
大年三十,看到Xilinx收购AutoESL的新闻, 顿时觉得今年特别喜庆,于是,连春晚也懒得骂了. 本想立即写一篇博文八卦一番, 怎奈亲朋好友饭局不断,一直拖到今天才动笔. 与一年前Xilinx宣布 ...
- 【POJ】3233 Matrix Power Series
[算法]二分+矩阵快速幂 [题意]给定矩阵A和整数k,MOD,求A^0+A^1+A^2+...+A^k. [题解] 定义题目要求的答案为f(n),即: $$f_n=\sum_{i=0}^{n}A^i$ ...
- 2016-2017-2 20155117实验二《Java面向对象程序设计》实验报告
实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验要求 1.参考Intellj IDEA 简易教程 提交 ...
- 03.WebView演练-iOS开发Demo(示例程序)源代码
技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong //转载请注明出处--本文永久链接:h ...
- 【洛谷 P4437】 [HNOI/AHOI2018]排列(贪心,堆)
题目链接 如果\(j<=k,a_{p[j]}!=p[k]\)可以理解为如果\(a_{p[j]}=p[k]\),那么\(k\)一定要放在\(j\)前面,也就是\(a_j\)在\(j\)前面. 于是 ...
- bzoj 2741 可持久化trie
首先我们设si为前i个数的xor和,那么对于询问区间[i,j]的xor和,就相当于si-1^sj,那么对于这道题的询问我们可以处理处si,然后对于询问[l,r],可以表示为在区间[l-1,r]里找两个 ...
- VC进度条的使用
m_progress->GetPos(); //获取进度条的当前位置 m_progress->GetRange(int min,int max); //获取进度条控件的范围的下限和上限 m ...
- PHP非常好用的分页类
分页类: <?php /* * ********************************************* * @类名: page * @参数: $myde_total - 总记 ...