www.pudn.com > NetPaw.rar > FileMapping.cpp


#include "StdAfx.h" 
#include ".\filemapping.h" 
 
 
CFileMapping::CFileMapping(void) 
	: m_hFileMapping(NULL) 
	, m_lpData(NULL) 
	, m_nLength(0) 
{ 
} 
 
CFileMapping::~CFileMapping(void) 
{ 
	Destroy(); 
} 
 
BOOL CFileMapping::Create(LPCTSTR szMappingName, DWORD dwBytes) 
{ 
	// re-enter this function is protected here 
	Destroy(); 
 
	m_hFileMapping = ::CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, dwBytes, szMappingName); 
	m_nLength = dwBytes; 
 
	return (m_hFileMapping != NULL); 
} 
 
BOOL CFileMapping::IsMappingExist(LPCTSTR szMappingName) 
{ 
	if( m_hFileMapping ) 
	{ 
		return TRUE; // just return if open after created in the same process 
	} 
 
	m_hFileMapping = OpenFileMapping( FILE_MAP_WRITE, FALSE, szMappingName ); 
 
	return (m_hFileMapping != NULL); 
} 
 
LPVOID CFileMapping::Open(void) 
{ 
	m_lpData = NULL; 
	if( m_hFileMapping ) 
	{ 
		m_lpData = MapViewOfFile( m_hFileMapping, FILE_MAP_WRITE, 0, 0, m_nLength ); 
	} 
 
	return m_lpData; 
} 
 
void CFileMapping::Close(void) 
{ 
	if( m_lpData ) 
	{ 
		UnmapViewOfFile(m_lpData); 
		m_lpData = NULL; 
	} 
} 
 
void CFileMapping::Destroy(void) 
{ 
	Close(); 
 
	if( m_hFileMapping ) 
	{ 
		CloseHandle(m_hFileMapping); 
		m_hFileMapping = NULL; 
	} 
}