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

📄 vdiskcb.cpp

📁 Virtual Disk Driver
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*	VDiskCB.cpp	VDiskInitialize() callback function (text mode)	Copyright (C) 2003 Ken Kato*/#include "vdkbase.h"#include "vdkutil.h"#include "vdkmsg.h"#include "cowdisk.h"#include "vmdisk.h"#include "VDiskUtil.h"ULONG VDiskCallback(ULONG reason, PVOID *params){	ULONG ret = 0;#ifdef _WIN32	//	Windows FormatMessage does not expand 64bit argument	//	correctly so convert to a string argument#define I64PRM(v)	_i64toa(*(PINT64)(v), i64buf, 10)	CHAR i64buf[24];#else#define I64PRM(v)	(*(PINT64)(v))#endif	// _WIN32	switch (reason) {	//	Cannot open specified file	//	params[0]:	PCHAR	path,	//	params[1]:	VDKSTAT	error	//	return:		TRUE	retry with new path stored into params[0]	//				FALSE	fail	case VDISK_CB_FILE_OPEN:		PrintMessage(MSG_CB_FILE_OPEN,			(PCHAR)params[0], VdkStatusStr((ULONG)params[1]));		if ((ULONG)params[1] == VDK_NOFILE ||			(ULONG)params[1] == VDK_NOPATH) {			//			//	file not found -- prompt user for a correct path			//			PrintMessage(MSG_PROMPT_PATH);			fflush(stdout);			if (fgets((PCHAR)params[0], MAX_PATH, stdin) &&				*(PCHAR)params[0] != '\n' &&				*(PCHAR)params[0] != '\0') {				PCHAR p = (PCHAR)params[0];				while (*p && *p != '\n') {					p++;				}				*p = '\0';				ret = TRUE;			}		}		break;	//	Confirms the user if the file is raw sector image file	//	params[0]	PCHAR	path	//	return		TRUE	the file is a raw sector image file	//				FALSE	abort	case VDISK_CB_FILE_TYPE:		PrintMessage(MSG_CB_FILE_TYPE, (PCHAR)params[0]);		ret = (InputChar(MSG_PROMPT_YESNO, "yn") == 'y');		break;	//	Confirmation for applying fixes to actual file	//	params[0]	PCHAR	path	//	return		TRUE	update the actual file	//				FALSE	do not update the actual file	case VDISK_CB_CONFIRM_FIX:		break;	//	Descriptor file does not contain any extent entry (FATAL)	//	params[0]	PCHAR	path	//	return		NONE	case VDISK_CB_EMPTY_IMAGE:		PrintMessage(MSG_CB_EMPTY_IMAGE, (PCHAR)params[0]);		break;	//	Extent file size is not proper multiple of sector size	//	params[0]:	PCHAR	path	//	params[1]:	PINT64	size	//	return:		TRUE	ignore / correct	//				FALSE	abort	case VDISK_CB_SIZE_BOUNDARY:		PrintMessage(MSG_CB_SIZE_BOUNDARY,			(PCHAR)params[0], I64PRM(params[1]),			(ULONG)*(PINT64)params[1] & VDK_SECTOR_ALIGNMENT_MASK);		ret = (InputChar(MSG_PROMPT_ABORTIGNORE, "ai") == 'i');		break;	//	Invalid signature	//	params[0]:	PCHAR	path	//	params[1]:	ULONG	bad signature	//	return:		TRUE	ignore / correct	//				FALSE	abort	case VDISK_CB_SIGNATURE:		PrintMessage(MSG_CB_SIGNATURE,			(PCHAR)params[0], (ULONG)params[1]);		ret = (InputChar(MSG_PROMPT_ABORTIGNORE, "ai") == 'i');		break;	//	Unknown controller type in virtual disk file	//	params[0]:	PCHAR	path	//	params[1]:	PCHAR	invalid entry	//	return:		correct value	//				0: abort	case VDISK_CB_CONTROLLER:		PrintMessage(MSG_CB_CONTROLLER,			(PCHAR)params[0], (PCHAR)params[1]);		switch (InputChar(MSG_PROMPT_CONTROLLER, "isc")) {		case 'i':			ret = VDISK_CONTROLLER_IDE;			break;		case 's':			ret = VDISK_CONTROLLER_SCSI;			break;		default:			ret = 0;			break;		}		break;	//	bad hardware version in virtual disk file	//	params[0]:	PCHAR	path	//	params[1]:	PCHAR	invalid entry	//	return:		correct value	//				0: abort	case VDISK_CB_HARDWAREVER:		PrintMessage(MSG_CB_HARDWAREVER,			(PCHAR)params[0], (PCHAR)params[1]);		/*		switch (InputChar("Input VMware version (2, 3, 4) or A) abort : ", "a234")) {		case '2':			ret = COWD_HARDWARE_VMWARE2;			break;		case '3':			ret = COWD_HARDWARE_VMWARE3;			break;		case '4':			ret = COWD_HARDWARE_VMWARE4;			break;		default:			ret = 0;			break;		}		*/		ret = (InputChar(MSG_PROMPT_ABORTIGNORE, "ai") == 'i')			? COWD_HARDWARE_VMWARE3 : 0;		break;	//	Unrecognizable entry in description file	//	params[0]:	PCHAR	path	//	params[1]:	PCHAR	invalid entry	//	return:		TRUE	ignore	//				FALSE	abort	case VDISK_CB_DESC_BADENTRY:		PrintMessage(MSG_CB_DESC_BADENTRY,			(PCHAR)params[0], (PCHAR)params[1]);		ret = (InputChar(MSG_PROMPT_ABORTIGNORE, "ai") == 'i');		break;	//	bad offset value in description file	//	params[0]:	PCHAR	path	//	params[1]:	PCHAR	invalid entry	//	return:		correct offset value	//				-1: abort	case VDISK_CB_DESC_OFFSET:		PrintMessage(MSG_CB_DESC_OFFSET,			(PCHAR)params[0], (PCHAR)params[1]);/*		ret = InputVal("Correct offset : ", (ULONG)-1);*/		ret = (ULONG)-1;		break;	//	bad capacity value in description file	//	params[0]:	PCHAR	path	//	params[1]:	PCHAR	invalid entry	//	return:		correct capacity value	//				0: abort	case VDISK_CB_DESC_CAPACITY:		PrintMessage(MSG_CB_DESC_CAPACITY,			(PCHAR)params[0], (PCHAR)params[1]);/*		ret = InputVal("Correct capacity : ", 0);*/		break;	//	invalid geometry values in description file	//	params[0]:	PCHAR	path	//	params[1]:	PCHAR	invalid entry	//	return:		correct value	//				0: abort	case VDISK_CB_DESC_GEOMETRY:		PrintMessage(MSG_CB_DESC_GEOMETRY,			(PCHAR)params[0], (PCHAR)params[1]);/*		ret = InputVal("Correct value : ", 0);*/		break;	//	Unknown extent type in virtual disk file	//	params[0]:	PCHAR	path	//	params[1]:	PCHAR	invalid entry	//	return:		VDK_FILETYPE value	case VDISK_CB_DESC_FILETYPE:		PrintMessage(MSG_CB_DESC_FILETYPE,			(PCHAR)params[0], (PCHAR)params[1]);/*		ret = (InputChar("S) Sparse (compact) or F) Flat (preallocate) ? ", "sf") == 's');*/		break;	//	bad timestamp value in virtual disk file	//	params[0]:	PCHAR	path	//	params[1]:	PCHAR	invalid entry	//	return:		correct value	//				0: abort	case VDISK_CB_DESC_TIMESTAMP:		PrintMessage(MSG_CB_DESC_TIMESTAMP,			(PCHAR)params[0], (PCHAR)params[1]);/*		ret = InputHexVal("Correct value : ", 0);*/		ret = (InputChar(MSG_PROMPT_ABORTIGNORE, "ai") == 'i');		break;	//	Unknown disk type in virtual disk file	//	params[0]:	PCHAR	path	//	params[1]:	PCHAR	invalid entry	//	return:		correct value	//				0: abort	case VDISK_CB_DESC_DISKTYPE:		PrintMessage(MSG_CB_DESC_DISKTYPE,			(PCHAR)params[0], (PCHAR)params[1]);/*		ret = InputChar(					"1) flat/split\n"					"2) flat/single\n"					"3) sparse/split\n"					"4) sparse/single\n"					"0) cancel\n"					"? ", "01234") - '0';*/		break;	//	described offset does not match actual offset	//	params[0]:	PCHAR	path	//	params[1]:	ULONG	described offset	//	params[2]:	ULONG	calculated offset	//	return		TRUE	use correct value	//				FALSE	abort	case VDISK_CB_EXT_OFFSET:		PrintMessage(MSG_CB_EXT_OFFSET,			(PCHAR)params[0], (ULONG)params[1], (ULONG)params[2]);		ret = (InputChar(MSG_PROMPT_YESNO, "yn") == 'y');		break;	//	described capacity does not match actual file size	//	params[0]:	PCHAR	path	//	params[1]:	ULONG	described size	//	params[2]:	ULONG	actual size	//	return:		correct capacity	//				0	abort	case VDISK_CB_EXT_FILESIZE:		PrintMessage(MSG_CB_EXT_FILESIZE,			(PCHAR)params[0], (ULONG)params[1], (ULONG)params[2]);		ret = ((InputChar(MSG_PROMPT_YESNO, "yn") == 'y') ? (ULONG)params[2] : 0);		break;	//	described disk capacity does not match the total of extents	//	params[0]:	PCHAR	path	//	params[1]:	ULONG	described capacity	//	params[2]:	ULONG	calculated capacity	//	return:		TRUE	corrected or ignore	//				FALSE	abort	case VDISK_CB_EXT_CAPACITY:		PrintMessage(MSG_CB_EXT_CAPACITY,			(PCHAR)params[0], (ULONG)params[1], (ULONG)params[2]);		break;	//	Ordinal stored in an extent file does not match the actual order	//	params[0]:	PCHAR	path	//	params[1]:	ULONG	ordinal in the header	//	params[2]:	ULONG	correct ordinal	//	return:		TRUE	corrected or ignore	//				FALSE	abort	case VDISK_CB_COWD_ORDINAL:		PrintMessage(MSG_CB_COWD_ORDINAL,			(PCHAR)params[0], (ULONG)params[1], (ULONG)params[2]);		ret = (InputChar(MSG_PROMPT_YESNO, "yn") == 'y');		break;	//	Parameter conflict between extents	//	params[0]:	PCHAR	path1	//	params[1]:			value1	//	params[1]:	PCHAR	path2	//	params[3]:			value2	//	return:		TRUE	corrected or ignore	//				FALSE	abort	case VDISK_CB_CONF_FILEVER:		PrintMessage(MSG_CB_CONF_FILEVER,			(PCHAR)params[0], (ULONG)params[1],			(PCHAR)params[2], (ULONG)params[3]);		break;	case VDISK_CB_CONF_FLAGS:		PrintMessage(MSG_CB_CONF_FLAGS,			(PCHAR)params[0], (ULONG)params[1],			(PCHAR)params[2], (ULONG)params[3]);		break;

⌨️ 快捷键说明

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