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


/*
	vdkioctl.h

	VDK WinNT kernel-mode driver interface header
	Copyright (C) 2003 Ken Kato
*/

#ifndef _VDK_IOCTL_H_
#define _VDK_IOCTL_H_

//
// VDK device basename
//

#ifdef _NTDDK_
#define VDK_DEVICE_BASENAME			L"VirtualDK"
#define VDK_REG_DISKNUM_VALUE		L"NumberOfDisks"
#else
#define VDK_DEVICE_BASENAME			"VirtualDK"
#define VDK_REG_DISKNUM_VALUE		"NumberOfDisks"
#endif

//
// Disk Device Number
//
#define VDK_MAXIMUM_DISK_NUM		22
#define VDK_DEFAULT_DISK_NUM		4

//
// Device IO control values
//

// Get VDK driver version

#define IOCTL_VDK_GET_VERSION		CTL_CODE(				\
										IOCTL_DISK_BASE,	\
										0x810,				\
										METHOD_BUFFERED,	\
										FILE_ANY_ACCESS)

// Mount existing image file or create a new image file of specified size

#define IOCTL_VDK_OPEN_FILE			CTL_CODE(				\
										IOCTL_DISK_BASE,	\
										0x811,				\
										METHOD_BUFFERED,	\
										FILE_READ_ACCESS | FILE_WRITE_ACCESS)

// Update device configuration according to current image
// Must be called after IOCTL_VDK_OPEN_FILE for the driver to
// recognize the partitions

#define IOCTL_VDK_UPDATE_DEVICE		CTL_CODE(				\
										IOCTL_DISK_BASE,	\
										0x812,				\
										METHOD_NEITHER,		\
										FILE_READ_ACCESS | FILE_WRITE_ACCESS)

// Unmount currently mounted image file

#define IOCTL_VDK_CLOSE_FILE		CTL_CODE(				\
										IOCTL_DISK_BASE,	\
										0x813,				\
										METHOD_BUFFERED,	\
										FILE_READ_ACCESS | FILE_WRITE_ACCESS)

// Get total size of image file information

#define IOCTL_VDK_QUERY_FILE_SIZE	CTL_CODE(				\
										IOCTL_DISK_BASE,	\
										0x814,				\
										METHOD_BUFFERED,	\
										FILE_ANY_ACCESS)

// Get currently mounted image file information

#define IOCTL_VDK_QUERY_FILE		CTL_CODE(				\
										IOCTL_DISK_BASE,	\
										0x815,				\
										METHOD_BUFFERED,	\
										FILE_ANY_ACCESS)

// Get number of partition devices attached to a disk device

#define IOCTL_VDK_NUMBER_OF_PARTS	CTL_CODE(				\
										IOCTL_DISK_BASE,	\
										0x816,				\
										METHOD_BUFFERED,	\
										FILE_ANY_ACCESS)

// Create new virtual disk device

#define IOCTL_VDK_CREATE_DISK		CTL_CODE(				\
										IOCTL_DISK_BASE,	\
										0x817,				\
										METHOD_NEITHER,		\
										FILE_ANY_ACCESS)

// Remove the last virtual disk device

#define IOCTL_VDK_DELETE_DISK		CTL_CODE(				\
										IOCTL_DISK_BASE,	\
										0x818,				\
										METHOD_NEITHER,		\
										FILE_ANY_ACCESS)

// Notify that the device is dismounted

#define IOCTL_VDK_NOTIFY_DISMOUNT	CTL_CODE(				\
										IOCTL_DISK_BASE,	\
										0x819,				\
										METHOD_NEITHER,		\
										FILE_ANY_ACCESS)


// Get VDK driver information

#define IOCTL_VDK_DRIVER_INFO		CTL_CODE(				\
										IOCTL_DISK_BASE,	\
										0x81d,				\
										METHOD_BUFFERED,	\
										FILE_ANY_ACCESS)

// Get VDK device information

#define IOCTL_VDK_DEVICE_INFO		CTL_CODE(				\
										IOCTL_DISK_BASE,	\
										0x81e,				\
										METHOD_BUFFERED,	\
										FILE_ANY_ACCESS)

// Set driver trace flags

#define IOCTL_VDK_DEBUG_TRACE		CTL_CODE(				\
										IOCTL_DISK_BASE,	\
										0x81f,				\
										METHOD_BUFFERED,	\
										FILE_ANY_ACCESS)

//
//	VDK_DRIVER_INFO structure
//
typedef struct _VDK_DRIVER_INFO
{
	ULONG	DiskDevices;		// Number of disk devices
	ULONG	AttachedParts;		// Number of attached partition devices
	ULONG	OrphanedParts;		// Number of orphaned partition devices
	ULONG	TotalReference;		// Total Number of reference
}
VDK_DRIVER_INFO, *PVDK_DRIVER_INFO;

//
//	VDK_DEVICE_INFO structure
//
#define MAX_DEVNAME_LEN		36

// 	DeviceType values
#define VDK_DEVICE_DISK		1
#define VDK_DEVICE_PART 	2

typedef struct _VDK_DEVICE_INFO
{
	ULONG	DeviceType;
	ULONG	Zombie;
	CHAR	DeviceName[MAX_DEVNAME_LEN];
	CHAR	SymbolicLink[MAX_DEVNAME_LEN];
	ULONG	ReferenceCount;
}
VDK_DEVICE_INFO, *PVDK_DEVICE_INFO;


#endif	// _VDK_IOCTL_H_