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

📄 vdiskextraw.cpp

📁 Virtual Disk Driver
💻 CPP
字号:
/*	VDiskExtRaw.cpp	Raw image file class	Copyright (c) 2003 Ken Kato*/#include "vdkbase.h"#include "vdkutil.h"#ifdef USE_SPARSE_FILE#include "SparseFile.h"#endif#include "VDisk.h"#include "VDiskExtRaw.h"#include "VDiskUtil.h"////	Constructor//VDiskExtRaw::VDiskExtRaw(){	m_nStartOffset	= 0;	m_nBackOffset	= 0;}////	Destructor//VDiskExtRaw::~VDiskExtRaw(){}////	Load and obtain parameters from extent file//VDKSTAT VDiskExtRaw::Load(HANDLE hFile){	VDKSTAT stat = VDK_OK;	m_nFileAttr = VdkGetAttribute(m_pFullPath);	if (m_nFileAttr == (ULONG)INVALID_FILE_ATTRIBUTES) {		m_nFileAttr = 0;		return VdkLastError();	}	stat = VdkGetFileSize(hFile, &m_nFileSize);	if (stat != VDK_OK) {		return stat;	}	m_nCapacity = (ULONG)(m_nFileSize >> VDK_BYTE_SHIFT_TO_SECTOR);	return VDK_OK;}////	Check parameter consistency//VDKSTAT VDiskExtRaw::Check(){	PVOID cbparams[3];	cbparams[0] = m_pFullPath;	//	//	check file size boundary	//	if (m_nFileSize & VDK_SECTOR_ALIGNMENT_MASK) {		cbparams[1] = &m_nFileSize;		if (!VDiskCallBack(VDISK_CB_SIZE_BOUNDARY, cbparams)) {			return VDK_CANCEL;		}		SetModify();	}	//	//	check file size against logical capacity	//	if ((ULONG)(m_nFileSize >> VDK_BYTE_SHIFT_TO_SECTOR) !=		m_nCapacity + m_nBackOffset) {		ULONG reply;		cbparams[1] = (PVOID)(m_nCapacity + m_nBackOffset);		cbparams[2] = (PVOID)(m_nFileSize >> VDK_BYTE_SHIFT_TO_SECTOR);		reply = VDiskCallBack(VDISK_CB_EXT_FILESIZE, cbparams);		if (reply <= m_nBackOffset) {			return VDK_CANCEL;		}		m_nCapacity = reply - m_nBackOffset;		SetModify();	}	return VDK_OK;}////	Update extent file//VDKSTAT VDiskExtRaw::Update(){	HANDLE	hFile;	INT64	logical_size;	VDKSTAT	ret;	if (!IsModified()) {		return VDK_OK;	}	//	//	logical size is differenct from actual size?	//	logical_size =		(INT64)(m_nCapacity + m_nBackOffset) <<		VDK_BYTE_SHIFT_TO_SECTOR;	if (logical_size == m_nFileSize) {		ClrModify();		return VDK_OK;	}	//	//	adjust actual size	//	ret = VdkOpenFile(		&hFile, m_pFullPath, strlen(m_pFullPath), FALSE);	if (ret != VDK_OK) {		return ret;	}	ret = VdkSetFileSize(hFile, logical_size);	VdkCloseFile(hFile);	if (ret == VDK_OK) {		m_nFileSize = logical_size;	}	//	clear modified flag	ClrModify();	return ret;}////	Create actural extent file//VDKSTAT VDiskExtRaw::Create(ULONG flags){	VDKSTAT ret;	INT64	size;	size = (INT64)(m_nCapacity + m_nBackOffset) <<		VDK_BYTE_SHIFT_TO_SECTOR;	if (!size || !m_pFullPath) {		return VDK_FUNCTION;	}#ifdef USE_SPARSE_FILE	if (flags & VDISK_CREATE_SPARSE) {		ret = ::CreateSparse(			m_pFullPath, size, flags & VDISK_CREATE_FORCE);	}	else#endif	{		HANDLE hFile;		//		//	Create file		//		ret = VdkCreateFile(			&hFile, m_pFullPath, (flags & VDISK_CREATE_FORCE));		if (ret != VDK_OK) {			return ret;		}		ret = VdkSetFileSize(hFile, size);		VdkCloseFile(hFile);	}	if (ret == VDK_OK) {		m_nFileSize = size;	}	return ret;}

⌨️ 快捷键说明

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