You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
185 lines
4.3 KiB
185 lines
4.3 KiB
/*****************************************************************************
|
|
*
|
|
* (C) COPYRIGHT MICROSOFT CORPORATION, 1999 - 2000
|
|
*
|
|
* TITLE: mpdview.h
|
|
*
|
|
* VERSION: 1.0
|
|
*
|
|
* AUTHOR: OrenR
|
|
*
|
|
* DATE: 2000/10/27
|
|
*
|
|
* DESCRIPTION: Implements CMappedView
|
|
*
|
|
*****************************************************************************/
|
|
#ifndef _MPDVIEW_H_
|
|
#define _MPDVIEW_H_
|
|
|
|
class CMappedView
|
|
{
|
|
public:
|
|
|
|
///////////////////////////////
|
|
// Constructor
|
|
//
|
|
|
|
CMappedView(LPCTSTR pszFile,
|
|
LONG lSize,
|
|
DWORD dwOpen) :
|
|
m_pBits(NULL),
|
|
m_hFile(INVALID_HANDLE_VALUE),
|
|
m_hMap(NULL),
|
|
m_lSize(lSize)
|
|
{
|
|
m_hFile = CreateFile(pszFile,
|
|
GENERIC_READ | GENERIC_WRITE,
|
|
FILE_SHARE_WRITE | FILE_SHARE_READ,
|
|
NULL,
|
|
dwOpen,
|
|
FILE_ATTRIBUTE_NORMAL,
|
|
NULL);
|
|
|
|
if (m_hFile == INVALID_HANDLE_VALUE)
|
|
{
|
|
DBG_ERR(("CreateFile failed with LastError = %d",GetLastError()));
|
|
}
|
|
|
|
DoCreateFileMapping();
|
|
}
|
|
|
|
///////////////////////////////
|
|
// Constructor
|
|
//
|
|
|
|
CMappedView( HANDLE hFile, LONG lSize ) :
|
|
m_pBits(NULL),
|
|
m_hFile(hFile),
|
|
m_hMap(INVALID_HANDLE_VALUE),
|
|
m_lSize(lSize)
|
|
{
|
|
DoCreateFileMapping();
|
|
}
|
|
|
|
///////////////////////////////
|
|
// Destructor
|
|
//
|
|
|
|
~CMappedView()
|
|
{
|
|
DBG_FN(("~CMappedView"));
|
|
CloseAndRelease();
|
|
}
|
|
|
|
|
|
///////////////////////////////
|
|
// DoCreateFileMapping
|
|
//
|
|
void DoCreateFileMapping()
|
|
{
|
|
if (m_hFile != INVALID_HANDLE_VALUE)
|
|
{
|
|
m_hMap = CreateFileMapping(m_hFile,
|
|
NULL,
|
|
PAGE_READWRITE,
|
|
0,
|
|
m_lSize,
|
|
NULL);
|
|
|
|
if (m_hMap)
|
|
{
|
|
m_pBits = (PBYTE)MapViewOfFileEx(
|
|
m_hMap,
|
|
FILE_MAP_READ | FILE_MAP_WRITE,
|
|
0,
|
|
0,
|
|
0,
|
|
NULL);
|
|
}
|
|
else
|
|
{
|
|
DBG_ERR(("CreateFileMapping failed with LastError = %d",
|
|
GetLastError()));
|
|
}
|
|
}
|
|
}
|
|
|
|
///////////////////////////////
|
|
// FileSize
|
|
//
|
|
LARGE_INTEGER FileSize()
|
|
{
|
|
LARGE_INTEGER li;
|
|
|
|
li.QuadPart = 0;
|
|
|
|
#ifdef WINNT
|
|
GetFileSizeEx(m_hFile, &li);
|
|
#else
|
|
DWORD LowPart = 0;
|
|
|
|
|
|
LowPart = GetFileSize(m_hFile, (DWORD *)&li.HighPart);
|
|
|
|
if (LowPart != -1)
|
|
{
|
|
li.LowPart = LowPart;
|
|
}
|
|
#endif
|
|
|
|
return li;
|
|
}
|
|
|
|
///////////////////////////////
|
|
// CloseAndRelease
|
|
//
|
|
void CloseAndRelease()
|
|
{
|
|
if (m_pBits)
|
|
{
|
|
if (!UnmapViewOfFile( m_pBits ))
|
|
{
|
|
DBG_ERR(("UnmapViewOfFile failed with LastError = %d",
|
|
GetLastError()));
|
|
}
|
|
m_pBits = NULL;
|
|
}
|
|
|
|
if (m_hMap)
|
|
{
|
|
if (!CloseHandle( m_hMap ))
|
|
{
|
|
DBG_ERR(("CloseHandle( m_hMap ) failed with LastError = %s",
|
|
GetLastError()));
|
|
}
|
|
m_hMap = NULL;
|
|
}
|
|
|
|
if (m_hFile != INVALID_HANDLE_VALUE)
|
|
{
|
|
if (!CloseHandle( m_hFile ))
|
|
{
|
|
DBG_ERR(("CloseHandle( m_hFile ) failed with LastError = %s",
|
|
GetLastError()));
|
|
}
|
|
m_hFile = INVALID_HANDLE_VALUE;
|
|
}
|
|
}
|
|
|
|
|
|
///////////////////////////////
|
|
// Bits
|
|
//
|
|
PBYTE Bits()
|
|
{
|
|
return m_pBits;
|
|
}
|
|
|
|
private:
|
|
BYTE *m_pBits;
|
|
HANDLE m_hFile;
|
|
HANDLE m_hMap;
|
|
LONG m_lSize;
|
|
};
|
|
|
|
#endif
|