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

📄 mappedfile.cpp

📁 Programming the Microsoft Windows driver model.2nd 随书光盘。内有很多作者送的实用工具和随书源码。WDM编程
💻 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 + -