CreateProcess函数第二个命令行参数--(windows核心编程笔记)
来源:互联网 发布:手机淘宝对话框打不开 编辑:程序博客网 时间:2024/05/17 07:01
《windows核心编程》86中提到,Createprocess的第二个参数pszCommandLine是一个非“常量字符串”的地址,这是很重要的,因为如果命令行字符串包含在文件映象的只读部分,就会引起访问违规。例如以下代码,在WIN7实际测试中,就会导致访问违规,因为Microsoft的C/C++编译器把notepad 字符串放在只读内存中。
#include "stdafx.h"#include "iostream"#include "windows.h"using namespace std;int _tmain(int argc, _TCHAR* argv[]){STARTUPINFO si ={sizeof(si)};PROCESS_INFORMATION pi;CreateProcess(NULL,TEXT("notepad"),NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);system("pause");return 0;}
而CreateProcess 实际上会修改我们传给它的命令行字符串,但是CreateProcess在返回之前,会将这个字符串还原为原来的形似。这样一来由于编译器会将常量字符串放在一个只读的内存中,CreateProcess内部在修改这个字符串的时候就出现访问违规。
解决这个问题的最佳方式是在调用CreateProcess函数之前,把常量字符串复制到一个临时缓冲区中,代码如下
#include "stdafx.h"#include "iostream"#include "windows.h"using namespace std;int _tmain(int argc, _TCHAR* argv[]){STARTUPINFO si ={sizeof(si)};PROCESS_INFORMATION pi;TCHAR szCmdLine[]=TEXT("notepad");CreateProcess(NULL,szCmdLine,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);system("pause");return 0;}
- CreateProcess函数第二个命令行参数--(windows核心编程笔记)
- 创建进程CreateProcess函数---------《windows核心编程》读书笔记(3)
- 创建进程CreateProcess函数----windows 核心编程
- 重读Windows核心编程--CreateProcess
- windows核心编程-CreateProcess详解
- Windows 核心编程学习笔记-第二章
- Windows核心编程第二章笔记
- windows核心编程-CreateProcess创建进程
- windows核心编程-获得命令行参数的两种方式
- Windows核心编程 进程--CreateProcess函数 终止进程和子进程 进程的权限
- CreateProcess的命令行参数
- Windows核心编程学习笔记----第二章 UNICODE
- Windows核心编程(笔记13) 第十六章--第二十六章
- Windows核心编程笔记
- windows核心编程笔记
- Windows核心编程笔记
- windows核心编程笔记
- tcp 套接字编程 listen 函数第二个参数理解
- 游戏开发-SurfaceView类使用详解
- 练成Linux系统高手教程
- Aspose.Cells v7.5.3 支持读写HTML文件格式的页面设置选项
- java多线程返回函数结果
- [cocos2d-x]用CCSpriteBatchNode进行文理贴图的优化
- CreateProcess函数第二个命令行参数--(windows核心编程笔记)
- GDI+编程基础
- 掌控——构建Linux系统Nagios监控服务器
- Struts1.2.9 HelloWorld
- TCP/IP、UDP、Socket
- 进程间的通信
- Android下如何理解onMeasure,onLayout的过程
- Linux网络安全技术与实现
- Java多态(利用向上向下转型和反射机理)