www.pudn.com > vdksrc.zip > vdkutil.h


/*
	vdkutil.h

	header for platform dependent utility functions
	Copyright (C) 2003 Ken Kato
*/

#ifndef _VDK_UTIL_H_
#define _VDK_UTIL_H_

#ifdef __cplusplus
extern "C" {
#endif

//*******************************************************************
//	common utility functions
//*******************************************************************

//
//	Get full path of a file
//
VDKSTAT VdkFullPath(
	PCHAR	FullPath,
	ULONG	BufSize,
	PCHAR	FileName);

//
//	open an existing file
//
VDKSTAT	VdkOpenFile(
	HANDLE	*FileHandle,
	PCHAR	FileName,
	ULONG	NameLen,
	ULONG	ReadOnly);

//
//	create a new file
//
VDKSTAT	VdkCreateFile(
	HANDLE	*FileHandle,
	PCHAR	FileName,
	BOOL	Force);

//
//	check file attributes
//
VDKSTAT	VdkCheckAttribute(
	HANDLE	FileHandle);

//
//	get file size in number of sectors
//
VDKSTAT	VdkGetFileSize(
	HANDLE	FileHandle,
	PINT64	FileSize);

//
//	set file size in number of sectors
//
VDKSTAT VdkSetFileSize(
	HANDLE	FileHandle,
	INT64	FileSize);

//
//	seek by byte offset
//
VDKSTAT VdkSeekFile(
	HANDLE	FileHandle,
	INT64	Offset);

//
//	write to file at specified byte offset
//
VDKSTAT	VdkWriteFileAt(
	HANDLE	FileHandle,
	INT64	Offset,
	PVOID	Buffer,
	ULONG	Length,
	PULONG	Result);

//
//	read from file at specified byte offset
//
VDKSTAT VdkReadFileAt(
	HANDLE	FileHandle,
	INT64	Offset,
	PVOID	Buffer,
	ULONG	Length,
	PULONG	Result);


//*******************************************************************
//	other utility macro / functions
//*******************************************************************

#ifdef VDK_KERNEL_DRIVER

#define VdkCloseFile(a)				ZwClose(a)
#define VdkAllocMem(a)				ExAllocatePool(NonPagedPool,a)
#define VdkFreeMem(a)				ExFreePool(a)
#define VdkZeroMem(a,b)				RtlZeroMemory(a,b)
#define VdkCopyMem(a,b,c)			RtlCopyMemory(a,b,c)

#elif defined(_WIN32)

#define VdkCloseFile(a)				CloseHandle(a)
#define VdkGetAttribute(a)			GetFileAttributes(a)

#define VdkAllocMem(a)				malloc(a)
#define VdkFreeMem(a)				free(a)
#define VdkZeroMem(a,b)				ZeroMemory(a,b)
#define VdkCopyMem(a,b,c)			CopyMemory(a,b,c)

#define VdkCmpNoCaseN(a,b,c)		_strnicmp(a,b,c)
#define VdkCmpNoCase(a,b)			_stricmp(a,b)

#define VdkLastError()				GetLastError()

const char *VdkStatusStr(VDKSTAT Status);
void PrintMessage(DWORD msg,...);
int InputChar(DWORD prompt, const char *accept);

#elif defined(__linux__)

#define VdkCloseFile(a)				close(a)
#define VdkGetAttribute(a)			(0)

#define VdkAllocMem(a)				malloc(a)
#define VdkFreeMem(a)				free(a)
#define VdkZeroMem(a,b)				memset(a,0,b)
#define VdkCopyMem(a,b,c)			memcpy(a,b,c)

#define VdkCmpNoCaseN(a,b,c)		strncasecmp(a,b,c)
#define VdkCmpNoCase(a,b)			strcasecmp(a,b)

#define VdkLastError()				errno
#define VdkStatusStr(a)				strerror(a)

#define PrintMessage				printf
int InputChar(const char *prompt, const char *accept);

#define UNREFERENCED_PARAMETER(x)
#define FIELD_OFFSET(type, field)	((long)&(((type *)0)->field))
#define MAX_PATH 					PATH_MAX

#endif


//*******************************************************************
//	debug utility
//*******************************************************************

#ifdef VDK_DEBUG

extern unsigned long	TraceFlags;
extern const char		*TraceFile;
extern unsigned long	TraceLine;

#define VDKTRACE(LEVEL,STRING)					\
	if ((TraceFlags & (LEVEL)) == (LEVEL)) {	\
		TraceFile = __FILE__;					\
		TraceLine = __LINE__;					\
		VdkTrace STRING;						\
	}

#ifdef VDK_KERNEL_DRIVER
PCSTR	VdkStatusStr(NTSTATUS status);
#define VdkTrace			DbgPrint
#else	// VDK_KERNEL_DRIVER
void	VdkTrace(const char *,...);
#endif	// VDK_KERNEL_DRIVER

#else	// VDK_DEBUG

#define VDKTRACE(LEVEL,STRING)

#endif	// VDK_DEBUG

#ifdef __cplusplus
}
#endif
#endif	// _VDK_UTIL_H_