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


/*
	vdkctl.h

	Virtual Disk driver control routines header
	Copyright (C) 2003 Ken Kato
*/

#ifndef _VDKCTL_H_
#define _VDKCTL_H_

#ifdef __cplusplus
extern "C" {
#endif	// __cplusplus

//
//	custom SERVICE STATE value
//
#define VDK_NOT_INSTALLED		0xffffffff

///////////////////////////////////////
//
//	Driver configuration routines
//

//	Get current driver config information

DWORD VdkGetDriverConfig(
	LPTSTR		driver_path,
	LPDWORD		start_type,
	PULONG		device_num);

//	Get current driver state

DWORD VdkGetDriverState(
	LPDWORD		current_state);

//	Install the driver

DWORD VdkInstall(
	LPCTSTR		driver_path,
	BOOL		auto_start);

//	Uninstall the driver

DWORD VdkRemove();

//	Start the driver

DWORD VdkStart(
	DWORD		*state);

//	Stop the driver

DWORD VdkStop(
	DWORD		*state);

//	Set initial number of devices

DWORD VdkSetDeviceNum(
	ULONG		device_num);

//	Check driver file version

DWORD VdkCheckFileVersion(
	LPCTSTR		driver_path,
	PULONG		version);

///////////////////////////////////////
//
//	Device control routines
//

//	Open a Virtual Disk device

HANDLE VdkOpenDevice(
	ULONG		disk_number,
	ULONG		part_number);

//	Check running driver version

DWORD VdkCheckVersion(
	HANDLE		hDevice,
	PULONG		version);

//	Get running driver information

DWORD VdkGetDriverInfo(
	HANDLE		hDevice,
	PULONG		disk_device,
	PULONG		attached_part,
	PULONG		orphaned_part,
	PULONG		reference_count);

//	Create a new disk device

DWORD VdkCreateDisk(
	HANDLE		hDevice);

//	Delete the last disk device

DWORD VdkDeleteDisk(
	HANDLE		hDevice);

//	Check if the device is active/writable

DWORD VdkCheckDeviceState(
	HANDLE		hDevice,
	ULONG		disk_number,
	ULONG		part_number);

//	Get device information

DWORD VdkGetDeviceList(
	PULONG		device_num,
	PVDK_DEVICE_INFO	*device_info);

#ifdef VDK_DEBUG

//	Set/get trace flags

ULONG VdkTraceFlags(
	PULONG		flags);

#endif
///////////////////////////////////////
//
//	Image file routines
//

//	Open image files

DWORD VdkOpen(
	HANDLE		hDevice,
	ULONG		disk_number,
	PVOID		pDisk,
	ULONG		AccessType);

//	Close image files

DWORD VdkClose(
	HANDLE		hDevice,
	ULONG		disk_number,
	ULONG		graceful);

//	Get current image file information
typedef struct _VDK_OPEN_FILE_INFO *PVDK_OPEN_FILE_INFO;

DWORD VdkGetFileInfo(
	HANDLE		hDevice,
	ULONG		disk_number,
	PVDK_OPEN_FILE_INFO		*file_info);

//	Dismount a virtual disk partition

DWORD VdkDismount(
	HANDLE		hDevice,
	ULONG		disk_number,
	ULONG		part_number,
	ULONG		unlock);

DWORD VdkDismountAll(BOOL zombie_only);

///////////////////////////////////////
//
//	Drive letter handling routines
//

//	Get VDK device name in the kernel namespace

DWORD VdkGetDeviceName(
	ULONG		disk_number,
	ULONG		part_number,
	LPTSTR		buf);

//	Get current drive letter

DWORD VdkGetDriveLetter(
	ULONG		disk_number,
	ULONG		part_number,
	TCHAR		*drive_letter);

//	Assign a drive letter

DWORD VdkSetDriveLetter(
	ULONG		disk_number,
	ULONG		part_number,
	TCHAR		drive_letter);

//	Remove a drive letter

DWORD VdkDelDriveLetter(
	TCHAR		drive_letter);

//	Choose first available drive letter

char ChooseDriveLetter();

//
//	Close current image
//

typedef DWORD (*VDK_CALLBACK)(PVOID param, DWORD err);

DWORD VdkCloseDrive(
	ULONG			disk_number,
	VDK_CALLBACK	retrycb,
	VDK_CALLBACK	contcb,
	PVOID			param);

#ifdef __cplusplus
}
#endif	//	__cplusplus

#endif	//	_VDKCTL_H_

//	End Of File