首页
社区
课程
招聘
[旧帖] [求助]CreateFile运行后第一个参数怎么变了 0.00雪花
发表于: 2012-11-15 21:22 1444

[旧帖] [求助]CreateFile运行后第一个参数怎么变了 0.00雪花

2012-11-15 21:22
1444
///////////////////////////////////载入文本文件到编辑框
BOOL LoadTextFileToEdit(HWND hEdit,LPCTSTR lpFileName)
{
	HANDLE hFile;
	hFile=CreateFile(lpFileName,
		GENERIC_READ,
		FILE_SHARE_READ,
		NULL,
		OPEN_EXISTING,
		0,NULL);
	if(hFile==INVALID_HANDLE_VALUE)
	{
		PrintError(_T("CreateFile"));
		return FALSE;
	}
	LARGE_INTEGER liFileSize;
	if(!GetFileSizeEx(hFile,&liFileSize))
	{
		PrintError(_T("GetFileSizeEx"));
		CloseHandle(hFile);
		return FALSE;
	}
	HANDLE hHeap=HeapCreate(HEAP_NO_SERIALIZE,0,0);
	if (hEdit==NULL)
	{
		PrintError(_T("HeapCreate"));
		CloseHandle(hFile);
		return FALSE;
	}
	LPTSTR szBuf;
	szBuf=(LPTSTR)HeapAlloc(hHeap,HEAP_NO_SERIALIZE|HEAP_ZERO_MEMORY,liFileSize.LowPart+1);
	if (szBuf==NULL)
	{
		CloseHandle(hFile);
		return FALSE;
	}
	DWORD dwRead;
	if(ReadFile(hFile,szBuf,liFileSize.LowPart,&dwRead,NULL))
	{
		szBuf[liFileSize.LowPart]=0;//结尾加0
		if (!SetWindowText(hEdit,szBuf))
		{
			CloseHandle(hFile);
			return FALSE;
		}
	}
	HeapFree(hHeap,HEAP_NO_SERIALIZE,szBuf);
	HeapDestroy(hHeap);
	CloseHandle(hFile);
	return TRUE;
}

运行时程序就停止工作,调试时发现CreateFile的第一个参数lpFileName变了

怎么加图片啊,在附件中,图片显示进入该函数后,我的各种不解
刚学希望各位不要笑话,指出错误之处。谢谢!

[课程]FART 脱壳王!加量不加价!FART作者讲授!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
2012-11-15 22:02
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
CreateFile内部  会修改原来的lpFileName内容
最好重新分配一块内存  用来放文件路径
2012-11-16 09:10
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这样返回的文件句柄应该没问题啊,事实上这个函数执行结果是不正确的,我把分配内存的函数换成,GlobalAlloc
这一类,能正常使用了,但显示的结果还是错误的,不知道错误处在哪,程序用的是unicode编码,打开汉字显示也是乱码。
BOOL LoadTextFileToEdit(HWND hEdit,LPCTSTR lpFileName)
{
	HANDLE hFile;
	hFile=CreateFile(lpFileName,GENERIC_READ,FILE_SHARE_READ,
		NULL,OPEN_EXISTING,0,NULL);
	if (hFile!=INVALID_HANDLE_VALUE)
	{
		DWORD dwFileSize;
		dwFileSize=GetFileSize(hFile,NULL);
		if (dwFileSize!=INVALID_FILE_SIZE)
		{
			LPTSTR lpszFileText;
			lpszFileText=(LPTSTR)GlobalAlloc(GPTR,dwFileSize+1);
			if (lpszFileText!=NULL)
			{
				DWORD dwRead;
				if (ReadFile(hFile,lpszFileText,
					dwFileSize,&dwRead,NULL))
				{
					lpszFileText[dwFileSize]=0;//字符串末尾置零
					if (SetWindowText(hEdit,lpszFileText))
					{
						GlobalFree(lpszFileText);
						CloseHandle(hFile);
						MessageBox(NULL,_T("Open may be successful"),_T("Hello"),MB_OK);
						return TRUE;
					}
				}
			}
		}
	}
	return FALSE;
}
2012-11-16 13:15
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
用MultiByteToWideChar 这类函数  手工转下码
2012-11-16 16:42
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
果然可以,现在读入输出都正常了。
1.现在还不明白就是为什么执行CreateFile后会跳到HeapFree。
2.顺便问下,执行CreateRemoteThrea()注入dll后,是不是不能用WaitForSignalObject()
啊。用上之后,目标会无响应,不用就正常了。不知道是怎么回事。
2012-11-16 18:42
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7

看书靠自己吧
2012-11-18 20:24
0
游客
登录 | 注册 方可回帖
返回
//