好贷网好贷款

CreateProcess函数第二个命令行参数--(windows核心编程笔记)

发布时间:2016-12-3 12:45:16 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"CreateProcess函数第二个命令行参数--(windows核心编程笔记)",主要涉及到CreateProcess函数第二个命令行参数--(windows核心编程笔记)方面的内容,对于CreateProcess函数第二个命令行参数--(windows核心编程笔记)感兴趣的同学可以参考一下。

      《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; }    

上一篇:[cocos2d-x]用CCSpriteBatchNode进行文理贴图的优化
下一篇:Linux(ubuntu)使用dd从iso制作win7安装u盘(读卡器一样),以及备份分区

相关文章

相关评论