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