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

📄 memmapfile.cpp

📁 这个是集合几种关于硬盘的序列号的获取方式的DLL
💻 CPP
字号:
/////////////////////////////////////////////////////////////////////////////
// MemMapFile.cpp   内存映射的 - 文件操作 ( Memory Mapping File )          //
// CopyRight(C)   1996,2008   TCSY 公司                                    //
// Pentium Working Room   ShanChengKun   2003.10.28   更新                 //
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "MemMapFile.h"

//===========================================================================
// 执着地按指定大小映射文件,没有则创建,有则直接打开,覆盖只读文件会失败
//===========================================================================
void * CMemMapFile::CreateNewFile (LPCTSTR szFileName, DWORD dwMaxFileSize)
{
	this->UnMapFile () ;
	m_hFile = ::CreateFile (szFileName, GENERIC_READ | GENERIC_WRITE,
							FILE_SHARE_READ, NULL, CREATE_ALWAYS,
							FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL) ;
	if (m_hFile == INVALID_HANDLE_VALUE)
		return NULL ;

	m_hFileMap = ::CreateFileMapping (m_hFile, NULL, PAGE_READWRITE, 0, dwMaxFileSize, NULL) ;
	if (m_hFileMap == NULL)
	{
		::CloseHandle (m_hFile) ;
		m_hFile = INVALID_HANDLE_VALUE ;
		return NULL ;
	}

	m_pMapAddress = ::MapViewOfFile (m_hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, 0) ;
	if (m_pMapAddress == NULL)
		this->UnMapFile () ;
	return (void *)m_pMapAddress ;
}

//===========================================================================
// 执着地按指定大小映射文件,没有则创建,有则直接打开,覆盖只读文件会失败
//===========================================================================
void * CMemMapFile::OpenExistFile (LPCTSTR szFileName, DWORD dwMaxFileSize)
{
	this->UnMapFile () ;
	m_hFile = ::CreateFile (szFileName, GENERIC_READ | GENERIC_WRITE,
							FILE_SHARE_READ, NULL, OPEN_ALWAYS,
							FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL) ;
	if (m_hFile == INVALID_HANDLE_VALUE)
		return NULL ;

	m_hFileMap = ::CreateFileMapping (m_hFile, NULL, PAGE_READWRITE, 0, dwMaxFileSize, NULL) ;
	if (m_hFileMap == NULL)
	{
		::CloseHandle (m_hFile) ;
		m_hFile = INVALID_HANDLE_VALUE ;
		return NULL ;
	}

	m_pMapAddress = ::MapViewOfFile (m_hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, 0) ;
	if (m_pMapAddress == NULL)
		this->UnMapFile () ;
	return (void *)m_pMapAddress ;
}

//===========================================================================
// 只读方式打开并映射指定的已经存在的文件,并发的程序可以只读的方式访问
//===========================================================================
void * CMemMapFile::OpenReadFile (LPCTSTR szFileName)
{
	this->UnMapFile () ;
	m_hFile = ::CreateFile (szFileName, GENERIC_READ, FILE_SHARE_READ, NULL,
							OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL) ;
	if (m_hFile == INVALID_HANDLE_VALUE)
		return NULL ;

	m_hFileMap = ::CreateFileMapping (m_hFile, NULL, PAGE_READONLY, 0, 0, NULL) ;
	if (m_hFileMap == NULL)
	{
		::CloseHandle (m_hFile) ;
		m_hFile = INVALID_HANDLE_VALUE ;
		return NULL ;
	}

	m_pMapAddress = ::MapViewOfFile (m_hFileMap, FILE_MAP_READ, 0, 0, 0) ;
	if (m_pMapAddress == NULL)
		this->UnMapFile () ;
	return (void *)m_pMapAddress ;
}

/////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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