⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mappedfile.cpp

📁 一本在讲述USB驱动程式的书 及其范例原码
💻 CPP
字号:
// MappedFile.cpp -- Definition of CMappedFile class
// Copyright (C) 2000 by Walter Oney
// All rights reserved

#include "stdafx.h"
#include "MappedFile.h"

///////////////////////////////////////////////////////////////////////////////
// @mfunc <c CMappedFile> Constructor
// @parm Name of file to be accessed

CMappedFile::CMappedFile(LPCTSTR filename)
	{							// CMappedFile::CMappedFile
	m_filename = _tcsdup(filename);
	m_hFile = INVALID_HANDLE_VALUE;
	m_hMapping = NULL;
	}							// CMappedFile::CMappedFile

// @mfunc <c CMappedFile> Destructor

CMappedFile::~CMappedFile()
	{							// CMappedFile::~CMappedFile
	if (m_filename)
		free((LPVOID) m_filename);
	Close();
	}							// CMappedFile::~CMappedFile

///////////////////////////////////////////////////////////////////////////////
// @mfunc Close the file

void CMappedFile::Close()
	{							// CMappedFile::Close
	if (m_data)
		UnmapViewOfFile(m_data);
	m_data = NULL;

	if (m_hMapping)
		CloseHandle(m_hMapping);
	m_hMapping = NULL;

	if (m_hFile != INVALID_HANDLE_VALUE)
		CloseHandle(m_hFile);
	m_hFile = INVALID_HANDLE_VALUE;
	}							// CMappedFile::Close

///////////////////////////////////////////////////////////////////////////////
// @mfunc Get data location
// @rdesc Starting address of mapped data file

LPCVOID CMappedFile::GetData() const
	{							// CMappedFile::GetData
	return m_data;
	}							// CMappedFile::GetData

///////////////////////////////////////////////////////////////////////////////
// @mfunc Get ending location of data in file
// @rdesc Ending address of data

LPCVOID CMappedFile::GetDataEnd() const
	{							// CMappedFile::GetDataEnd
	return m_end;
	}							// CMappedFile::GetDataEnd

///////////////////////////////////////////////////////////////////////////////
// @mfunc Get name of underlying file
// @rdesc Name of the file

LPCTSTR CMappedFile::GetName() const
	{							// CMappedFile::GetName
	return m_filename;
	}							// CMappedFile::GetName

///////////////////////////////////////////////////////////////////////////////
// @mfunc Convert offset to pointer
// @parm Offset value
// @rdesc Address of given location in mapped file, or NULL if out of bounds

LPVOID CMappedFile::OffsetPointer(DWORD offset)
	{							// CMappedFile::OffsetPointer
	if (offset >= m_size)
		return NULL;
	return (LPVOID) ((PUCHAR) m_data + offset);
	}							// CMappedFile::OffsetPointer

///////////////////////////////////////////////////////////////////////////////
// @mfunc Open a mapped file
// @rdesc TRUE if mapping established okay, FALSE otherwise

BOOL CMappedFile::Open()
	{							// CMappedFile::Open
	m_hFile = CreateFile(m_filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,
		FILE_FLAG_SEQUENTIAL_SCAN, NULL);
	if (m_hFile == INVALID_HANDLE_VALUE)
		return FALSE;
	m_hMapping = CreateFileMapping(m_hFile, NULL, PAGE_READONLY, 0, 0, NULL);
	if (!m_hMapping)
		return FALSE;
	m_data = MapViewOfFile(m_hMapping, FILE_MAP_READ, 0, 0, 0);
	if (!m_data)
		return FALSE;

	m_size = GetFileSize(m_hFile, NULL);
	m_end = (LPCVOID) ((LPBYTE) m_data + m_size);

	return TRUE;
	}							// CMappedFile::Open

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -