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

📄 vdkbase.h

📁 Virtual Disk Driver
💻 H
字号:
/*	vdkbase.h	VDK base stuff	Copyright (C) 2003 Ken Kato*/#ifndef _VDKBASE_H_#define _VDKBASE_H_#if (DBG || defined(_DEBUG) || defined (DEBUG))#define VDK_DEBUG#else#undef	VDK_DEBUG#endif//*******************************************************************//	system headers//*******************************************************************#if defined(VDK_KERNEL_DRIVER)//	NT kernel mode driver#pragma warning(disable: 4115 4201 4214 4514)//	4115:type defined in parameter list//	4201:anonymous structure//	4214:non-integer bit field//	4514:unreferenced inline function#include <ntddk.h>#include <ntverp.h>#elif defined(_WIN32)//	Win32 user application#define WIN32_LEAN_AND_MEAN#define _CRTDBG_MAP_ALLOC#include <windows.h>#include <stdio.h>#include <stdlib.h>#include <crtdbg.h>#elif defined(__linux__)//	Linux application#include <ctype.h>#include <errno.h>#include <limits.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#else#error	Target not supported#endif//*******************************************************************//	custom data types//*******************************************************************#ifdef _WIN32typedef	LONGLONG					INT64, *PINT64;typedef	ULONGLONG					UINT64, *PUINT64;#else	// __linux__typedef void						VOID, *PVOID;typedef char						CHAR, *PCHAR;typedef unsigned char				UCHAR, *PUCHAR;typedef short						SHORT, *PSHORT;typedef unsigned short				USHORT, *PUSHORT;typedef long						LONG, *PLONG;typedef unsigned long				ULONG, *PULONG;typedef long long					INT64, *PINT64;typedef unsigned long long			UINT64, *PUINT64;typedef int							HANDLE;#endif	// __linux__#ifndef BOOL#define BOOL						int#endif#ifndef TRUE#define TRUE						1#endif#ifndef FALSE#define FALSE						0#endif//*******************************************************************//	status type and values//*******************************************************************#ifdef VDK_KERNEL_DRIVERtypedef NTSTATUS					VDKSTAT;#define VDKSUCCESS(s)				NT_SUCCESS(s)#define VDK_OK						STATUS_SUCCESS#define VDK_NOMEMORY				STATUS_INSUFFICIENT_RESOURCES#define	VDK_INTERNAL				STATUS_DRIVER_INTERNAL_ERROR#define VDK_PARAM					STATUS_INVALID_PARAMETER#define VDK_BUFFER					STATUS_BUFFER_TOO_SMALL#define VDK_DATA					STATUS_DATA_ERROR#elif defined(_WIN32)typedef DWORD						VDKSTAT;#define VDKSUCCESS(s)				((s) == VDK_OK)#define VDK_OK						ERROR_SUCCESS#define VDK_FUNCTION				ERROR_INVALID_FUNCTION#define VDK_NOFILE					ERROR_FILE_NOT_FOUND#define VDK_NOPATH					ERROR_PATH_NOT_FOUND#define VDK_ACCESS					ERROR_ACCESS_DENIED#define VDK_DATA					ERROR_INVALID_DATA#define	VDK_INTERNAL				ERROR_INVALID_DATA#define VDK_NOMEMORY				ERROR_OUTOFMEMORY#define VDK_EOF						ERROR_HANDLE_EOF#define VDK_PARAM					ERROR_INVALID_PARAMETER#define VDK_BUFFER					ERROR_INSUFFICIENT_BUFFER#define VDK_CANCEL					ERROR_CANCELLED#define VDK_NG						0xffffffffUL#elsetypedef int							VDKSTAT;#define VDKSUCCESS(s)				((s) == 0)#define VDK_OK						0#define VDK_NOMEMORY				ENOMEM#define	VDK_INTERNAL				EIO#define VDK_PARAM					EINVAL#define VDK_BUFFER					EINVAL#define VDK_DATA					EINVAL#define VDK_FUNCTION				EINVAL#define VDK_NOFILE					ENOENT#define VDK_NOPATH					ENOENT#define VDK_ACCESS					EACCES#define VDK_CANCEL					ECANCELED#define VDK_EOF						EBADF#define VDK_NG						-1/*	   E2BIG  		Arg list too long	   EACCES 		Permission denied	   EAGAIN 		Resource temporarily unavailable	   EBADF  		Bad file descriptor	   EBADMSG		Bad message	   EBUSY  		Resource busy	   ECANCELED	Operation canceled	   ECHILD 		No child processes	   EDEADLK		Resource deadlock avoided	   EDOM   		Domain error	   EEXIST 		File exists	   EFAULT 		Bad address	   EFBIG  		File too large	   EINPROGRESS	Operation in progress	   EINTR  		Interrupted function call	   EINVAL 		Invalid argument	   EIO	  		Input/output error	   EISDIR 		Is a directory	   EMFILE 		Too many open files	   EMLINK 		Too many links	   EMSGSIZE 	Inappropriate message buffer length	   ENAMETOOLONG	Filename too long	   ENFILE 		Too many open files in system	   ENODEV 		No such device	   ENOENT 		No such file or directory	   ENOEXEC		Exec format error	   ENOLCK 		No locks available	   ENOMEM 		Not enough space	   ENOSPC 		No space left on device	   ENOSYS 		Function not implemented	   ENOTDIR		Not a directory	   ENOTEMPTY 	Directory not empty	   ENOTSUP		Not supported	   ENOTTY 		Inappropriate I/O control operation	   ENXIO  		No such device or address	   EPERM  		Operation not permitted	   EPIPE  		Broken pipe	   ERANGE 		Result too large	   EROFS  		Read-only file system	   ESPIPE 		Invalid seek	   ESRCH  		No such process	   ETIMEDOUT	Operation timed out	   EXDEV  		Improper link*/#endif//*******************************************************************//	constant symbols//*******************************************************************#ifndef INVALID_HANDLE_VALUE#define INVALID_HANDLE_VALUE		(-1)#endif#ifndef INVALID_FILE_ATTRIBUTES#define INVALID_FILE_ATTRIBUTES		(-1)#endif#ifndef INVALID_SET_FILE_POINTER#define	INVALID_SET_FILE_POINTER	(-1)#endif////	information trace level//#define VDKWARN						0x00000001#define VDKINFO						0x00000003////	information trace scope//#define VDKOPEN						0x00000010#define VDKCLOSE					0x00000020#define VDKREAD						0x00000040#define VDKWRITE					0x00000080#define VDKDISPATCH					0x00000100#define VDKIOCTL					0x00000200#define VDKUPDATE					0x00000400#define VDKCREATE					0x00000800#define VDKDELETE					0x00001000#define VDKFORMAT					0x00002000#define VDKSERVER					0x00010000#define VDKCLIENT					0x00020000//// Disk type value for VDK_OPEN_DISK structure//#define VDK_DISKTYPE_NONE			0#define VDK_DISKTYPE_READONLY		1#define VDK_DISKTYPE_WRITABLE		2#define VDK_DISKTYPE_WRITEBLOCK		3//// File type value for VDK_OPEN_FILE structrure//#define VDK_FILETYPE_NONE			0#define VDK_FILETYPE_FLAT			1#define VDK_FILETYPE_COWD			2#define VDK_FILETYPE_VMDK			3//// default geometry values//#define VDK_BYTES_PER_SECTOR		512#define VDK_SECTORS_PER_TRACK		32#define VDK_TRACKS_PER_CYLINDER		64//// How many bits to shift to get sector offset from byte offset//#define VDK_BYTE_SHIFT_TO_SECTOR	9//// Used to check if a value is multiple of sector size//#define VDK_SECTOR_ALIGNMENT_MASK	(VDK_BYTES_PER_SECTOR - 1)////	Path separator and printf format string//#if defined(_WIN32)#define PATH_SEPARATOR_CHAR			'\\'#define PATH_SEPARATOR_STR			"\\"#define ALT_SEPARATOR_CHAR			'/'#define ALT_SEPARATOR_STR			"/"#define INT64_PRINT_FORMAT			"I64"#define VDK_INVALID_ATTRIBUTES		\	(FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_COMPRESSED | FILE_ATTRIBUTE_ENCRYPTED)#else	// _WIN32#define PATH_SEPARATOR_CHAR			'/'#define PATH_SEPARATOR_STR			"/"#define ALT_SEPARATOR_CHAR			'\\'#define ALT_SEPARATOR_STR			"\\"#define INT64_PRINT_FORMAT			"ll"#define VDK_INVALID_ATTRIBUTES		0#endif	// _WIN32#endif	// _VDKBASE_H_

⌨️ 快捷键说明

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