Leaked source code of windows server 2003
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

/*****************************************************************************
*
* (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