www.pudn.com > truecrypt.zip > APIDRVR.H


/* Copyright (C) 2004 TrueCrypt Team, truecrypt.org 
   This product uses components written by Paul Le Roux  */ 
 
/* DeviceIoControl values. 
 
*/ 
 
#ifndef CTL_CODE 
 
/* A macro from the NT DDK */ 
 
#define CTL_CODE( DeviceType, Function, Method, Access ) ( \ 
    ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \ 
) 
 
#endif 
 
/* More macros from the NT DDK */ 
 
#ifndef METHOD_BUFFERED 
#define METHOD_BUFFERED 0 
#endif 
 
#ifndef FILE_ANY_ACCESS 
#define FILE_ANY_ACCESS 0 
#endif 
 
#ifndef FILE_DEVICE_DISK 
#define FILE_DEVICE_DISK 0x00000007 
#endif 
 
#ifndef IOCTL_DISK_BASE 
#define IOCTL_DISK_BASE FILE_DEVICE_DISK 
#endif 
 
/* These values originate from the following NT DDK macro : 
 
#define ANYNAME CTL_CODE(IOCTL_DISK_BASE, 0x800, METHOD_BUFFERED, \ 
   FILE_ANY_ACCESS) 
 
#define ANYNAME2 CTL_CODE(IOCTL_DISK_BASE, 0x801, METHOD_BUFFERED, \ 
   FILE_ANY_ACCESS) 
 
etc... */ 
 
/* Public driver interface codes */ 
 
#define MOUNT			466944	/* Mount a volume or partition */ 
#define MOUNT_LIST		466948	/* Return list of mounted volumes */ 
#define OPEN_TEST		466952	/* Open a file at ring0 */ 
#define UNMOUNT			466956	/* Unmount a volume */ 
#define WIPE_CACHE		466960	/* Wipe the driver password cache */ 
#define HALT_SYSTEM		466964	/* Halt system; (only NT when compiled with debug) */ 
#define DRIVER_VERSION		466968	/* Current driver version */ 
#define RELEASE_TIME_SLICE	466972	/* Release time slice on apps behalf (only Win9x) */ 
#define MOUNT_LIST_N		466976	/* Get volume info from the device (only Win9x) */ 
#define DISKIO				466980	/* Read/Write at ring0 for win32 gui (only Win9x) */ 
#define ALLOW_FAST_SHUTDOWN 466984	/* Fast shutdown under win98 (only Win9x) */ 
#define CACHE_STATUS		466988	/* Get password cache status */ 
#define VOLUME_PROPERTIES	466992	/* Get mounted volume properties */ 
 
#define UNMOUNT_PENDING		475112	/* Flush the device with this api 
					   before sending UNMOUNT */ 
 
#define TC_FIRST_PRIVATE	MOUNT	/* First private control code */ 
#define TC_LAST_PRIVATE	UNMOUNT_PENDING	/* Last private control code */ 
 
/* Start of driver interface structures, the size of these structures may 
   change between versions; so make sure you first send DRIVER_VERSION to 
   check that it's the correct device driver */ 
 
#pragma pack (push) 
#pragma pack(1) 
 
typedef struct 
{ 
	int nReturnCode;	/* Return code back from driver */ 
	short wszVolume[TC_MAX_PATH];	/* Volume to be mounted */ 
	char szPassword[MAX_PASSWORD + 1];	/* User password or SHA1 hash */ 
	int nPasswordLen;	/* User password length */ 
	BOOL bCache;		/* Cache passwords in driver */ 
	int nDosDriveNo;	/* Drive number to mount */ 
	long time;		/* Time when this volume was mounted */ 
} MOUNT_STRUCT; 
 
typedef struct 
{ 
	int nReturnCode;	/* Return code back from driver */ 
	int nDosDriveNo;	/* Drive letter to unmount */ 
} UNMOUNT_STRUCT; 
 
typedef struct 
{ 
	unsigned long ulMountedDrives;	/* Bitfield of all mounted drive letters */ 
	short wszVolume[26][64];	/* Volume names of mounted volumes */ 
	unsigned __int64 diskLength[26]; 
	int cipher[26]; 
} MOUNT_LIST_STRUCT; 
 
typedef struct 
{ 
	int driveNo; 
	short wszVolume[64]; 
	unsigned __int64 diskLength; 
	int cipher; 
	int pkcs5; 
	int pkcs5Iterations; 
	unsigned __int64 volumeCreationTime; 
	unsigned __int64 headerCreationTime; 
	//int readOnly; 
} VOLUME_PROPERTIES_STRUCT; 
 
typedef struct 
{ 
	short wszFileName[TC_MAX_PATH];	/* Volume to be "open tested" */ 
	int nReturnCode;	/* Win9x only */ 
	unsigned long secstart;	/* Win9x only */ 
	unsigned long seclast;	/* Win9x only */ 
	unsigned long device;	/* Win9x only */ 
} OPEN_TEST_STRUCT; 
 
/* Win9x only */ 
typedef struct 
{ 
	int nReturnCode;	/* Return code back from driver */ 
	int nDosDriveNo;	/* Drive letter to get info on */ 
	short wszVolume[TC_MAX_PATH];	/* Volume names of mounted volumes */ 
	unsigned long mountfilehandle;	/* Device file handle or 0 */ 
} MOUNT_LIST_N_STRUCT; 
 
/* Win9x only */ 
typedef struct 
{ 
	unsigned int devicenum;	/* Ptr to dcb for device */ 
	unsigned int sectorstart;	/* Start sector */ 
	unsigned int sectorlen;	/* Number of sectors */ 
	char *bufferad;		/* Address of buffer */ 
	int mode;		/* Read=0 or Write=1 */ 
	int nReturnCode;	/* Return code back from driver */ 
} DISKIO_STRUCT; 
 
 
#pragma pack (pop) 
 
#ifdef NT4_DRIVER 
#define DRIVER_STR WIDE 
#else 
#define DRIVER_STR 
#endif 
 
/* NT only */ 
 
#define TC_UNIQUE_ID_PREFIX "TrueCrypt" 
#define TC_MOUNT_PREFIX L"\\Device\\TrueCryptVolume" 
 
#define NT_MOUNT_PREFIX DRIVER_STR("\\Device\\TrueCryptVolume") 
#define NT_ROOT_PREFIX DRIVER_STR("\\Device\\TrueCrypt") 
#define DOS_MOUNT_PREFIX DRIVER_STR("\\DosDevices\\") 
#define DOS_ROOT_PREFIX DRIVER_STR("\\DosDevices\\TrueCrypt") 
#define WIN32_ROOT_PREFIX DRIVER_STR("\\\\.\\TrueCrypt") 
 
/* Win9x only */ 
 
#define WIN9X_DRIVER_NAME "\\\\.\\TRUCRYPT"