www.pudn.com > vdksrc.zip > VDiskUtil.h
/*
VDiskUtil.h
VDisk utility function header
Copyright (C) 2003 Ken Kato
*/
#ifndef _VDISKUTIL_H_
#define _VDISKUTIL_H_
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
//
// Virtual disk flags
//
#define VDISK_FLAG_SINGLE 0x00000001
#define VDISK_FLAG_SPARSE 0x00000002
#define VDISK_FLAG_CHILD 0x00000004
#define VDISK_FLAG_ABSPATH 0x00000008
#define VDISK_FLAG_DIRTY 0x80000000
//
// Extent creation flags
//
#define VDISK_CREATE_SPARSE 0x00000001
#define VDISK_CREATE_FORCE 0x00000002
#define VDISK_CREATE_SINGLE 0x00000004
//
// Controller type
//
enum {
VDISK_CONTROLLER_NONE = 0,
VDISK_CONTROLLER_IDE,
VDISK_CONTROLLER_SCSI
};
//
// Virtual Disk callback reasons
//
enum {
// Cannot open specified file
// params[0]: PCHAR path,
// params[1]: VDKSTAT error
// return: TRUE retry with new path stored into params[0]
// FALSE fail
VDISK_CB_FILE_OPEN,
// 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
VDISK_CB_FILE_TYPE,
// Confirmation for applying fixes to actual file
// params[0] PCHAR path
// return TRUE update the actual file
// FALSE do not update the actual file
VDISK_CB_CONFIRM_FIX,
// Descriptor file does not contain any extent entry (FATAL)
// params[0] PCHAR path
// return NONE
VDISK_CB_EMPTY_IMAGE,
// Extent file size is not proper multiple of sector size
// params[0]: PCHAR path
// params[1]: PINT64 size
// return: TRUE ignore / correct
// FALSE abort
VDISK_CB_SIZE_BOUNDARY,
// Invalid signature
// params[0]: PCHAR path
// params[1]: ULONG bad signature
// return: TRUE ignore / correct
// FALSE abort
VDISK_CB_SIGNATURE,
// Unknown controller type in virtual disk file
// params[0]: PCHAR path
// params[1]: PCHAR invalid entry
// return: correct value
// 0: abort
VDISK_CB_CONTROLLER,
// bad hardware version in virtual disk file
// params[0]: PCHAR path
// params[1]: PCHAR invalid entry
// return: correct value
// 0: abort
VDISK_CB_HARDWAREVER,
// Unrecognizable entry in description file
// params[0]: PCHAR path
// params[1]: PCHAR invalid entry
// return: TRUE ignore
// FALSE abort
VDISK_CB_DESC_BADENTRY,
// bad offset value in description file
// params[0]: PCHAR path
// params[1]: PCHAR invalid entry
// return: correct offset value
// -1: abort
VDISK_CB_DESC_OFFSET,
// bad capacity value in description file
// params[0]: PCHAR path
// params[1]: PCHAR invalid entry
// return: correct capacity value
// 0: abort
VDISK_CB_DESC_CAPACITY,
// invalid geometry values in description file
// params[0]: PCHAR path
// params[1]: PCHAR invalid entry
// return: correct value
// 0: abort
VDISK_CB_DESC_GEOMETRY,
// Unknown extent type in virtual disk file
// params[0]: PCHAR path
// params[1]: PCHAR invalid entry
// return: VDK_FILETYPE value
VDISK_CB_DESC_FILETYPE,
// bad timestamp value in virtual disk file
// params[0]: PCHAR path
// params[1]: PCHAR invalid entry
// return: correct value
// 0: abort
VDISK_CB_DESC_TIMESTAMP,
// Unknown disk type in virtual disk file
// params[0]: PCHAR path
// params[1]: PCHAR invalid entry
// return: correct value
// 0: abort
VDISK_CB_DESC_DISKTYPE,
// 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
VDISK_CB_EXT_OFFSET,
// described capacity does not match actual file size
// params[0]: PCHAR path
// params[1]: ULONG described size
// params[2]: ULONG calculated size
// return: correct capacity
// 0 abort
VDISK_CB_EXT_FILESIZE,
// 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
VDISK_CB_EXT_CAPACITY,
// 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
VDISK_CB_COWD_ORDINAL,
// 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
VDISK_CB_CONF_FILEVER,
VDISK_CB_CONF_FLAGS,
VDISK_CB_CONF_PARENTTS,
VDISK_CB_CONF_TIMESTAMP,
VDISK_CB_CONF_CONTROLLER,
VDISK_CB_CONF_EXTENTS,
VDISK_CB_CONF_CYLINDERS,
VDISK_CB_CONF_TRACKS,
VDISK_CB_CONF_SECTORS,
VDISK_CB_CONF_CAPACITY,
VDISK_CB_CONF_HARDWARE,
VDISK_CB_CONF_TOOLSFLAG,
VDISK_CB_CONF_SEQNUM,
VDISK_CB_CONF_PARENTPATH,
// prompts to ignore non-fatal conflicts
// return: TRUE yes
// FALSE no
VDISK_CB_CONFLICT_IGNORE,
// disk capacity stored in the header does not match the total of extents
// params[0]: PCHAR path
// params[1]: ULONG stored capacity
// params[2]: ULONG total capacity
// return: TRUE corrected or ignore
// FALSE abort
VDISK_CB_COWD_CAPACITY,
// Invalid cowd version
// params[0]: PCHAR path
// params[1]: ULONG bad version
// return: correct version
VDISK_CB_COWD_FILEVER,
// File geometry values inconsistent or capacity = 0
// params[0]: PCHAR path
// params[1]: PCOWD_SECTOR_0 sec0
// return: NONE
VDIDK_CB_COWD_FILEGEOM,
// Disk geometry values inconsistent or capacity = 0
// params[0]: PCHAR path
// params[1]: PCOWD_SECTOR_3 sec3
// return: NONE
VDISK_CB_COWD_DISKGEOM,
// parent path length
// params[0]: PCHAR path
// params[1]: PCHAR parent_path
// return: NONE
VDISK_CB_COWD_PARENT,
// Mapsize values in COWD header is inconsistent with capacity
// params[0]: PCHAR path
// params[2]: ULONG wrong value
// params[1]: ULONG correct value
// return: corrected map size
VDISK_CB_COWD_MAPSIZE,
// EndOfFile value does not match actual file size
// params[0]: PCHAR path
// params[2]: ULONG wrong value
// params[1]: ULONG correct value
// return: TRUE ignore
// FALSE fail
VDISK_CB_COWD_ENDOFFILE,
// cowd_sec2->TimeStamp != cowd_sec3->TimeStamp
// params[0]: PCHAR path
// params[1]: ULONG timestamp1
// params[2]: ULONG timestamp2
// return: TRUE ignore
// FALSE fail
VDISK_CB_COWD_TIMESTAMP,
// VMDK descriptor is not found in the file
// params[0]: PCHAR path
// return: NONE
VDISK_CB_VMDK_NODESC,
// Invalid vmdk version
// params[0]: PCHAR path
// params[1]: ULONG bad version
// return: correct version
VDISK_CB_VMDK_FILEVER,
// Invalid vmdk capacity
// params[0]: PCHAR path
// params[1]: PINT64 bad value
// return: TRUE ignore / corrected
// FALSE abort
VDISK_CB_VMDK_FILECAP,
// Invalid vmdk granularity
// params[0]: PCHAR path
// params[1]: PINT64 bad value
// return: TRUE ignore / corrected
// FALSE abort
VDISK_CB_VMDK_GRANULARITY,
// Invalid vmdk descriptor offset
// params[0]: PCHAR path
// params[1]: PINT64 bad value
// return: TRUE ignore / corrected
// FALSE abort
VDISK_CB_VMDK_DESCOFFSET,
// Invalid vmdk descriptor size
// params[0]: PCHAR path
// params[1]: PINT64 bad value
// return: TRUE ignore / corrected
// FALSE abort
VDISK_CB_VMDK_DESCSIZE,
// Invalid vmdk GTEsPerGT value
// params[0]: PCHAR path
// params[1]: ULONG bad value
// return: TRUE ignore / corrected
// FALSE abort
VDISK_CB_VMDK_GTESPERGT,
// Invalid vmdk grain dictionary offset
// params[0]: PCHAR path
// params[1]: PINT64 bad value
// return: TRUE ignore / corrected
// FALSE abort
VDISK_CB_VMDK_GDOFFSET,
// Invalid vmdk grain offset
// params[0]: PCHAR path
// params[1]: PINT64 bad value
// return: TRUE ignore / corrected
// FALSE abort
VDISK_CB_VMDK_GRAINOFFSET,
// Invalid vmdk check bytes
// params[0]: PCHAR path
// return: TRUE ignore / corrected
// FALSE abort
VDISK_CB_VMDK_CHECKBYTES,
// VMDK capacity in the header and descriptor mismatch
// params[0]: PCHAR path
// params[1]: ULONG size in the header
// params[2]: ULONG size in the descriptor
// return: TRUE ignore / corrected
// FALSE abort
VDISK_CB_VMDK_SIZEMISMATCH,
// Capacity of the child and the parent do not match
// params[0]: PCHAR child path
// params[1]: ULONG child capacity
// params[2]: PCHAR parent path
// params[3]: ULONG parent capacity
// return: NONE this is fatal
VDISK_CB_PARENT_CAPACITY,
// Controller type of the child and the parent do not match
// params[0]: PCHAR child path
// params[1]: ULONG child controller
// params[2]: PCHAR parent path
// params[3]: ULONG parent controller
// return: TRUE ignore / corrected
// FALSE abort
VDISK_CB_PARENT_CONTROLLER,
// Child's ParentTS and Parent's Timestamp do not match
// params[0]: PCHAR child path
// params[1]: ULONG child ParentTS
// params[2]: PCHAR parent path
// params[3]: ULONG parent Timestamp
// return: TRUE ignore / corrected
// FALSE abort
VDISK_CB_PARENT_TIMESTAMP,
};
//
// Create and Initialize a new VDisk instance from existing files
//
VDKSTAT VDiskLoadFile(PVOID *ppDisk, PCHAR pPath, PCHAR pBasePath);
//
// Create all ancestors of a virtual disk
//
VDKSTAT VDiskCreateTree(PVOID pDisk);
//
// Create a REDO log for a virtual disk
//
VDKSTAT VDiskCreateRedo(PVOID *ppDisk);
//
// Delete VDisk Tree
//
VOID VDiskDelete(PVOID pDisk);
//
// Search specified file
//
VDKSTAT VDiskSearchFile(HANDLE *pFile, PCHAR pPath, PCHAR pBase);
//
// build VDK_OPEN_FILE_INFO structure
//
VDKSTAT VDiskMapToOpenInfo(
PVOID pDisk,
PVOID *ppInfo,
PULONG pInfoLen);
PCHAR VDiskGetDiskName(PVOID pDisk);
//
// Virtual disk check callback function
//
typedef ULONG(*VDISK_CALLBACK)(ULONG reason, PVOID *params);
extern VDISK_CALLBACK VDiskCallBack;
void VDiskSetCallBack(VDISK_CALLBACK cb);
ULONG VDiskCallback(ULONG reason, PVOID *params);
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // _VDISKUTIL_H_