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

📄 cowdisk.h

📁 Virtual Disk Driver
💻 H
字号:
/*	cowdisk.h	Constants and structres for VMware 2.x/3.x Virtual Disk (COWdisk)	Copyright (C) 2003 Ken Kato	!!! CAUTION !!!	Some of the information in this file may not be quite accurate.	It is the result of my entirely personal research and absolutely no	official information is provided by VMware,Inc. or any other sources.*/#ifndef _COWDISK_H_#define _COWDISK_H_////	Number of blocks per secondary map//	-- doesn't seem to be stored in any header field//#define COWD_SECONDARY_MAP_SIZE		512#define COWD1_DEFAULT_GRANULARITY	32#define COWD3_DEFAULT_GRANULARITY	128#define COWD_PRIMARY_MAP_OFFSET		4////	VMware 2/3 virtual disk geometry values//#define COWD_SECTORS_IDE			63			// for IDE disks of any size#define COWD1_TRACKS_IDE			15			// for VMware 2 IDE virtual disks#define COWD3_TRACKS_IDE			16			// for VMware 3 IDE virtual disks#define COWD_SECTORS_SCSI_1023M		32			// for SCSI disks <= 1023MB#define COWD_TRACKS_SCSI_1023M		64			// for SCSI disks <= 1023MB#define COWD_SECTORS_SCSI_2046M		32			// for SCSI disks <= 2046MB#define COWD_TRACKS_SCSI_2046M		128			// for SCSI disks <= 2046MB#define COWD_SECTORS_SCSI_LARGE		63			// for SCSI disks > 2046MB#define COWD_TRACKS_SCSI_LARGE		255			// for SCSI disks > 2046MB////	Maximum extent size for VMware2 virutal disks//#define COWD1_MAX_EXTENT_IDE		(4436 * COWD1_TRACKS_IDE * COWD_SECTORS_IDE)#define COWD1_MAX_EXTENT_SCSI		(1023 * COWD_TRACKS_SCSI_2046M * COWD_SECTORS_SCSI_2046M)////	Maximum extent size for VMware 3 virutal disks//#define COWD3_MAX_EXTENT_SPARSE		(1024 * 1024 / 512 * 2047)////	Following are actually for plain disks and not for COWdisks//	but included here for convenience//#define COWD1_SECTORS_IDE_PLAIN		COWD_SECTORS_IDE#define COWD1_TRACKS_IDE_PLAIN		COWD3_TRACKS_IDE#define COWD1_MAX_EXTENT_PLAIN		(1024 * 1024 / 512 * 2046)///////////////////////////////////////////	Virtual Disk Header values//////	Virtual disk signature//#define COWD_SIGNATURE				0x44574f43	// 'COWD'////	VMware virtual file version//#define COWD_FILEVER_VMWARE2		1#define COWD_FILEVER_VMWARE3		3////	Virtual disk flags//#define COWD_FLAG_ROOT				0x00000001	// Indicates that the file does not have												// a parent disk.#define COWD_FLAG_CHECKED			0x00000002	// Indicates that the file was checked												// and was clean at the previous close.#define COWD_FLAG_MULTI				0x00000008	// Indicates that the vmdk file is												// part of a multi-file virtual disk.#define COWD_FLAG_HW_VER			0x00000010	// (v3) Indicates that Hardware version												// has been decided for this virtual disk#define COWD_VALID_FLAGS			0x0000001b#define COWD_IS_ROOT(f)				((f) & COWD_FLAG_ROOT)#define COWD_IS_CHECKED(f)			((f) & COWD_FLAG_CHECKED)#define COWD_IS_MULTI(f)			((f) & COWD_FLAG_MULTI)#define COWD_SET_HW_VER(f)			((f) & COWD_FLAG_HW_VER)////	Controller type values//#define COWD_CONTROLLER_IDE			0x00656469	// 'ide'#define COWD_CONTROLLER_SCSI		0x69736373	// 'scsi'////	VMware virtual hardware version//#define COWD_HARDWARE_VMWARE2		1#define COWD_HARDWARE_VMWARE3		2#define COWD_HARDWARE_VMWARE4		3////	VMware-Tools flag values//#define COWD_TOOL_INSTALLED			0x00000400	// VMware-Tools is installed#define COWD_TOOL_UP_TO_DATE		0x00000001	// VMware-Tools is up to date#define COWD_TOOL_IS_INSTALLED(f)	((f) & COWD_TOOL_INSTALLED)#define COWD_TOOL_IS_UP_TO_DATE(f)	((f) & COWD_TOOL_UP_TO_DATE)///////////////////////////////////////////	Virtual Disk Header structrues//#ifdef _MSC_VER#pragma pack(4)#endif////	header part 1 -- starting offset 0x0000//typedef struct _COWD_SECTOR_0 {		//	offset	ULONG Signature;				//	00000000									//		signature									//		"COWD"	VMware 2, 3	ULONG Version;					//	00000004									//		Virtual Disk version									//		1	VMware 2									//		3	VMware 3	ULONG Flags;					//	00000008									//		single file, root	0x00000013				   					//		single file, child	0x00000012		   							//		multi file, root  	0x0000001b		   							//		multi file, child	0x0000001a	ULONG Capacity;					//	0000000c									//		single-root:  total sectors per disk	   								//		single-child: total sectors per disk	   								//		multi-root:	  approx. total sectors per file	   								//					 -- cyl * head * sec	   								//		multi-child:  total sectors per disk	ULONG Granularity;				//	00000010									//		number of sectors per secondary block	ULONG PrimaryMapOffset;			//	00000014									//		primary map position (sector offset)	ULONG PrimaryMapSize;			//	00000018									//		number of secondary maps in the primary map	ULONG EndOfFile;				//	0000001c									//		actuall current file size in sectors	union _u {		struct _geometry {			//	CHS values of this single file			ULONG Cylinders;		//	00000020			ULONG Tracks;			//	00000024			ULONG Sectors;			//	00000028		} Geometry;					//		Only in root files.									//		Not accurate in multi-file virtual disks.		char ParentPath[260];		//	00000020									//		parent file path	} u;}#ifdef __GNUC____attribute__ ((aligned(4),packed))#endifCOWD_SECTOR_0, *PCOWD_SECTOR_0;////	header part 2 -- starting offset 0x0420//typedef struct _COWD_SECTOR_2 {	ULONG ParentTS;					//	00000420									//		Parent's timestamp	ULONG TimeStamp;				//	00000424									//		Last modification timestamp	char NodeFileName[60];			//	00000428									//		Unknown purpose									//		Probably for GSX Server?	char NodeDescription[1];		//	00000464									//		Unknown length and purpose									//		Probably for GSX Server?}#ifdef __GNUC____attribute__ ((aligned(4),packed))#endifCOWD_SECTOR_2, *PCOWD_SECTOR_2;////	header part 3 -- starting offset 0x0664//typedef struct _COWD_SECTOR_3 {	ULONG TimeStamp;				//	00000664									//		Saved modification timestamp	ULONG Controller;				//	00000668									//		'ide' or 'scsi'	ULONG unknown1;					//	0000066c									//		Probably to terminate controller value	ULONG FileOrdinal;				// 	00000670	(v3)									//		0 based sequcence number									//		for multi-part disk	ULONG FilesPerDisk;				// 	00000674	(v3)									//		total number of files									//		for multi-part disk	ULONG Cylinders;				// 	00000678	(v3)									//		cylinders per disk									//		present only in root files	ULONG Tracks;					// 	0000067c	(v3)									//		Tracks per cylinder									//		present only in root files	ULONG Sectors;					// 	00000680	(v3)									//		Sectors per track									//		present only in root files	ULONG DiskCapacity;				// 	00000684	(v3)									//		total sectors per disk									//		present only in root files	ULONG SequenceNumber;			//	00000688	(v3)									//		updates since create / last shrink	ULONG FileCapacity;				//	0000068c 	(v3)									//		Maximum sectors this file can hold									//		Equal to or larger than logical file									//		capacity (C*H*S).	ULONG HardwareVer;				//	00000690	(v3)									//		virtual hardware version									//		1	VMware 2									//		2	VMware 3	ULONG ToolsFlag;				//	00000694									//		0x0401	VMware-Tools is up to date									//		0x0400	VMware-Tools is outdated									//		0x0001	VMware-Tools is outdated (?)}#ifdef __GNUC____attribute__ ((aligned(4),packed))#endifCOWD_SECTOR_3, *PCOWD_SECTOR_3;////	structure to access all header information as a unit//	-- structure total size is 4 sectors = 2048 bytes//typedef struct _COWD_HEADER {	//	//	header part 1 at sector #0 and #1	//	COWD_SECTOR_0	sec0;	UCHAR			sec0_trail[0x400 - sizeof(COWD_SECTOR_0)];	//	//	header part 2 at sector #2	//	UCHAR			sec2_lead[0x20];	COWD_SECTOR_2	sec2;	UCHAR			sec2_trail[0x200 - sizeof(COWD_SECTOR_2) - 0x20];	//	//	header part 3 at sector #3	//	UCHAR			sec3_lead[0x64];	COWD_SECTOR_3	sec3;	UCHAR			sec3_trail[0x200 - sizeof(COWD_SECTOR_3) - 0x64];}#ifdef __GNUC____attribute__ ((aligned(4),packed))#endifCOWD_HEADER, *PCOWD_HEADER;#ifdef _MSC_VER#pragma pack()#endif#endif	// _COWDISK_H_

⌨️ 快捷键说明

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