Memory Map File in Win32/XP SP3 + NTFS demo code

Memory Map File in Win32/XP SP3 + NTFS demo program
昨天用來跟網友討論大型記憶體操作的基本操作在 Windows XP + NTFS
#include "stdafx.h"

TCHAR szTempFileName[MAX_PATH+1];

static HANDLE MakeTempFile(LPTSTR tempFileBuff)
{
	TCHAR szPathBuff[MAX_PATH+1];
	const TCHAR szPrefile[] = _T("xTS");
	
	srand( (unsigned)time( NULL ) );
	
	GetTempPath(MAX_PATH, szPathBuff);
	GetTempFileName(szPathBuff, szPrefile, rand(), tempFileBuff);

	_tprintf(_T("Temp file : %srn"), tempFileBuff);
	
	return CreateFile( tempFileBuff, 
		GENERIC_READ | GENERIC_WRITE,
		0, 
		NULL,
		CREATE_ALWAYS, 
		FILE_ATTRIBUTE_TEMPORARY, 
		NULL);

}

int _tmain(int argc, _TCHAR* argv[])
{
	HANDLE hTempFile;
	HANDLE hMapFile;
	LPVOID pBuff;
	TCHAR szName[]=TEXT("MyFileMappingObject");
	UINT nRET = 0;
	
	hTempFile = MakeTempFile(szTempFileName);

	if (INVALID_HANDLE_VALUE == hTempFile)
	{
		_tprintf(_T("Failed: on Create Temporary Filern"));
		nRET = 1;
		return nRET;
	}

	hMapFile = CreateFileMapping(hTempFile, 
		NULL, 
		PAGE_READWRITE, 
		2, // 8G = 4G*2
		0, 
		szName );
	
	if (INVALID_HANDLE_VALUE == hMapFile || NULL == hMapFile)
	{
		_tprintf(_T("Failed: on Create File Mappingrn"));
		nRET = 2;
		goto ExitClean;
	}

	pBuff = MapViewOfFile(hMapFile,
		FILE_MAP_ALL_ACCESS,
		0,
		0,
		1*1024*1024*1024);

	if (pBuff != NULL)
	{
		memcpy(pBuff, "TEST", 4);
		UnmapViewOfFile(pBuff);
	}

	CloseHandle(hMapFile);

ExitClean:
	CloseHandle(hTempFile);
	DeleteFile(szTempFileName); // delete the temporary file
	return 0;
}
廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

%d 位部落客按了讚: