VeraCrypt
aboutsummaryrefslogtreecommitdiff
AgeCommit message (Expand)AuthorFilesLines
2018-08-16Windows: Fix regression that caused the system encryption wizard to crash whe...Mounir IDRASSI2-5/+10
2018-08-15Windows: Add various checks and replace STL code after Coverity reportMounir IDRASSI3-24/+18
2018-08-15WIndows driver: add check for failed memory allocationMounir IDRASSI1-8/+11
2018-08-13Windows: code enhancements for language selection mechanism in the installer.Mounir IDRASSI3-263/+126
2018-08-12Added line breaks between copyright holders (#318)Marius Kjærstad2-21/+21
2018-08-12Windows: update EFI SecureBoot PowerShell script and its associated certifica...Mounir IDRASSI141-18/+94
2018-08-12Windows: Update EFI bootloader files for 1.23-BETA3 releaseMounir IDRASSI6-0/+0
2018-08-12XML Language files: update Chinese translationMounir IDRASSI1-5/+5
2018-08-12Increment version to 1.23-BETA3 and update release notes.Mounir IDRASSI52-72/+82
2018-08-12Windows: add language selection dialog to the portable installerMounir IDRASSI1-0/+41
2018-08-12Windows Installer: implement language selection mechanism at the start of the...Mounir IDRASSI47-6/+469
2018-08-10Linux: Remove limitation of hidden volume protection on disk with sector size...Mounir IDRASSI1-11/+0
2018-08-10Linux/MacOSX/FreeBSD: Implement benchmarking for Hash and PKCS-5 PRF algorithms.Mounir IDRASSI5-122/+725
2018-08-10Linux/MacOSX/FreeBSD: When performing backup of volume header, automatically ...Mounir IDRASSI2-2/+70
2018-08-10Linux/MacOSX/FreeBSD: In TrueCrypt mode, reject Streebog as KDF since it is n...mounir1-2/+2
2018-08-08Linux/MacOSX/FreeBSD: Add CheckBox in mount option dialog to force the use of...Mounir IDRASSI4-258/+351
2018-08-07Windows: Display a balloon tip warning or error message when the value pasted...Mounir IDRASSI45-12/+225
2018-08-06XML Languages files: Add some translations from TransifexMounir IDRASSI2-28/+28
2018-08-06Windows: fix warning in debug buildMounir IDRASSI1-0/+3
2018-08-06Windows: avoid timeout of Secure Desktop display by waiting for the user to b...Mounir IDRASSI1-3/+16
2018-08-06crypto: cleaner code for Streebog carry bit handling and add comment about mi...Mounir IDRASSI1-5/+24
2018-08-06Windows: Fix hidden OS boot after upgrade to version 1.23 by explicitly speci...Mounir IDRASSI1-3/+2
2018-08-06Linux/MacOSX/FreeBSD: add reference to --pim and --new-pim switches in the ve...Mounir IDRASSI1-0/+8
2018-08-06FAQ: fix wrong donation URLMounir IDRASSI1-1/+1
2018-07-05Docummentation: update Release Notes for 1.23-BETA2Mounir IDRASSI2-2/+3
2018-07-05Increment version to 1.23-BETA2Mounir IDRASSI49-68/+68
2018-07-05Windows: Update EFI bootloader binaries that implement workaround for first s...Mounir IDRASSI6-0/+0
2018-07-05Update translations from TransifexMounir IDRASSI9-183/+183
2018-06-24Documentation: Update donation page with IDRIX bank details for receiving don...Mounir IDRASSI5-1/+78
2018-06-24Windows: in DEBUG mode, disable verification to Authenticode signature of bin...Mounir IDRASSI2-3/+5
2018-06-14Linux/MacOSX/FreeBSD: better handling for mounting systen encrypted disks who...Mounir IDRASSI1-16/+16
2018-06-11Linux/MacOSX/FreeBSD: Support mounting partially encrypted system partitions/...Mounir IDRASSI3-3/+42
2018-05-03Increment version to 1.23-BETA1Mounir IDRASSI51-70/+71
2018-05-03Documentation: update link for current language packMounir IDRASSI1-2/+2
2018-05-03Windows: Support machines without "EFI\Boot" folder for EFI system encryption...Mounir IDRASSI5-72/+137
2018-05-01Update Language.de.xml (#317)Ettore Atalan1-3/+3
2018-04-29Docummentation: update Release Notes with changes done in MacOSX and LinuxMounir IDRASSI2-0/+10
2018-04-29MacOSX: support pasting values to password fields using keyboard (CMD+V and C...Mounir IDRASSI8-0/+107
2018-04-28Linux: Fix crash if user is able to close the waiting dialog before the opera...Mounir IDRASSI1-3/+15
2018-04-23Docummentation: update Release Notes for 1.23-BETA0Mounir IDRASSI2-0/+15
2018-04-23Increment version to 1.23-BETA0 (1.23.0)Mounir IDRASSI49-71/+71
2018-04-23XML Languages files: Add translation entries for newly added strings.Mounir IDRASSI39-0/+78
2018-04-23Windows: Don't start EFI system encryption process if SecureBoot is enabled a...Mounir IDRASSI12-50/+341
2018-04-23Windows: Update EFI bootloader binaries that implement the new workaround for...Mounir IDRASSI8-0/+0
2018-04-23Windows: Fix system encryption issues on machines that always force booting o...Mounir IDRASSI5-9/+135
2018-04-23Windows: enhance ReflectDrivers mechanism by persisting it across major Windo...Mounir IDRASSI3-4/+42
2018-04-23Windows: code refactoringMounir IDRASSI1-15/+10
2018-04-23Windows: remove ending backslash from installation path written to SetupConfi...Mounir IDRASSI1-0/+7
2018-04-23Windows: fix driver inf fileMounir IDRASSI5-16/+21
2018-04-23Windows: implement compatibility for Windows 10 major updates using ReflectDr...Mounir IDRASSI18-77/+326
ight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
/*
 Legal Notice: Some portions of the source code contained in this file were
 derived from the source code of TrueCrypt 7.1a, which is
 Copyright (c) 2003-2012 TrueCrypt Developers Association and which is
 governed by the TrueCrypt License 3.0, also from the source code of
 Encryption for the Masses 2.02a, which is Copyright (c) 1998-2000 Paul Le Roux
 and which is governed by the 'License Agreement for Encryption for the Masses'
 Modifications and additions to the original source code (contained in this file)
 and all other portions of this file are Copyright (c) 2013-2017 IDRIX
 and are governed by the Apache License 2.0 the full text of which is
 contained in the file License.txt included in VeraCrypt binary and source
 code distribution packages. */

#pragma once

#include "Tcdefs.h"
#include "Boot/Windows/BootDefs.h"
#include "Common.h"
#include "Crypto.h"
#include "Volumes.h"
#include "Wipe.h"

#ifdef _WIN32

/* WARNING: Modifying the following values or their meanings can introduce incompatibility with previous versions. */

#define TC_IOCTL(CODE) (CTL_CODE (FILE_DEVICE_UNKNOWN, 0x800 + (CODE), METHOD_BUFFERED, FILE_ANY_ACCESS))

// IOCTL interface to \\device\veracrypt

// Gets version of driver
// OUT struct - LONG
#define TC_IOCTL_GET_DRIVER_VERSION						TC_IOCTL (1)

// Gets boot loader version
// OUT struct - int16
#define TC_IOCTL_GET_BOOT_LOADER_VERSION				TC_IOCTL (2)

// Mount volume to \\Device\VeraCryptVolume"X"
// IN OUT - MOUNT_STRUCT
#define TC_IOCTL_MOUNT_VOLUME							TC_IOCTL (3)

// Dismount volume
// IN OUT - UNMOUNT_STRUCT
#define TC_IOCTL_DISMOUNT_VOLUME						TC_IOCTL (4)

// Dismount all volumes
// IN OUT - UNMOUNT_STRUCT
#define TC_IOCTL_DISMOUNT_ALL_VOLUMES					TC_IOCTL (5)

// Get list of all mounted volumes
// IN OUT - MOUNT_LIST_STRUCT (only 26 volumes possible)
#define TC_IOCTL_GET_MOUNTED_VOLUMES					TC_IOCTL (6)

// Get properties of the volume selected by driveNo
// In OUT - VOLUME_PROPERTIES_STRUCT
#define TC_IOCTL_GET_VOLUME_PROPERTIES					TC_IOCTL (7)

// Get reference count to main device object
// OUT - int
#define TC_IOCTL_GET_DEVICE_REFCOUNT					TC_IOCTL (8)

// Is it possible to unload driver 
// It check file system cache of mounted drives via unmount IOCTL.
// OUT - int
#define TC_IOCTL_IS_DRIVER_UNLOAD_DISABLED				TC_IOCTL (9)

// Is there any mounted device
// OUT - int
#define TC_IOCTL_IS_ANY_VOLUME_MOUNTED					TC_IOCTL (10)

// Check password cache
// Result in IOCTL result TRUE if there is chached passwords
#define TC_IOCTL_GET_PASSWORD_CACHE_STATUS				TC_IOCTL (11)

// Clean password cache
#define TC_IOCTL_WIPE_PASSWORD_CACHE					TC_IOCTL (12)

// Check file/drive container
// IN OUT - OPEN_TEST_STRUCT
#define TC_IOCTL_OPEN_TEST								TC_IOCTL (13)

// result of IOCTL_DISK_GET_PARTITION_INFO
// IN OUT - DISK_PARTITION_INFO_STRUCT
// TODO: need IOCTL_DISK_GET_PARTITION_INFO_EX to support GPT
#define TC_IOCTL_GET_DRIVE_PARTITION_INFO				TC_IOCTL (14)

// result IOCTL_DISK_GET_DRIVE_GEOMETRY
// IN OUT - DISK_GEOMETRY_STRUCT
#define TC_IOCTL_GET_DRIVE_GEOMETRY						TC_IOCTL (15)

// result IOCTL_DISK_GET_LENGTH_INFO
// IN OUT - ProbeRealDriveSizeRequest
#define TC_IOCTL_PROBE_REAL_DRIVE_SIZE					TC_IOCTL (16)

// result of ZwQuerySymbolicLinkObject
// IN OUT RESOLVE_SYMLINK_STRUCT
#define TC_IOCTL_GET_RESOLVED_SYMLINK					TC_IOCTL (17)

#define TC_IOCTL_GET_BOOT_ENCRYPTION_STATUS				TC_IOCTL (18)
#define TC_IOCTL_BOOT_ENCRYPTION_SETUP					TC_IOCTL (19)
#define TC_IOCTL_ABORT_BOOT_ENCRYPTION_SETUP			TC_IOCTL (20)
#define TC_IOCTL_GET_BOOT_ENCRYPTION_SETUP_RESULT		TC_IOCTL (21)
#define TC_IOCTL_GET_BOOT_DRIVE_VOLUME_PROPERTIES		TC_IOCTL (22)
#define TC_IOCTL_REOPEN_BOOT_VOLUME_HEADER				TC_IOCTL (23)
#define TC_IOCTL_GET_BOOT_ENCRYPTION_ALGORITHM_NAME		TC_IOCTL (24)
#define TC_IOCTL_GET_PORTABLE_MODE_STATUS				TC_IOCTL (25)
#define TC_IOCTL_SET_PORTABLE_MODE_STATUS				TC_IOCTL (26)
#define TC_IOCTL_IS_HIDDEN_SYSTEM_RUNNING				TC_IOCTL (27)
#define TC_IOCTL_GET_SYSTEM_DRIVE_CONFIG				TC_IOCTL (28)
#define TC_IOCTL_DISK_IS_WRITABLE						TC_IOCTL (29)
#define TC_IOCTL_START_DECOY_SYSTEM_WIPE				TC_IOCTL (30)
#define TC_IOCTL_ABORT_DECOY_SYSTEM_WIPE				TC_IOCTL (31)
#define TC_IOCTL_GET_DECOY_SYSTEM_WIPE_STATUS			TC_IOCTL (32)
#define TC_IOCTL_GET_DECOY_SYSTEM_WIPE_RESULT			TC_IOCTL (33)
#define TC_IOCTL_WRITE_BOOT_DRIVE_SECTOR				TC_IOCTL (34)
#define TC_IOCTL_GET_WARNING_FLAGS						TC_IOCTL (35)
#define TC_IOCTL_SET_SYSTEM_FAVORITE_VOLUME_DIRTY		TC_IOCTL (36)
#define TC_IOCTL_REREAD_DRIVER_CONFIG					TC_IOCTL (37)
#define TC_IOCTL_GET_SYSTEM_DRIVE_DUMP_CONFIG			TC_IOCTL (38)
#define VC_IOCTL_GET_BOOT_LOADER_FINGERPRINT			TC_IOCTL (39)
// result IOCTL_DISK_GET_DRIVE_GEOMETRY_EX
// IN OUT - DISK_GEOMETRY_EX_STRUCT
#define VC_IOCTL_GET_DRIVE_GEOMETRY_EX					TC_IOCTL (40)

// Legacy IOCTLs used before version 5.0
#define TC_IOCTL_LEGACY_GET_DRIVER_VERSION		466968
#define TC_IOCTL_LEGACY_GET_MOUNTED_VOLUMES		466948

// Undocumented IOCTL sent by Windows 10 when handling EFS data on volumes
#define IOCTL_UNKNOWN_WINDOWS10_EFS_ACCESS				0x455610D8

/* 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 */
	BOOL FilesystemDirty;
	BOOL VolumeMountedReadOnlyAfterAccessDenied;
	BOOL VolumeMountedReadOnlyAfterDeviceWriteProtected;

	wchar_t wszVolume[TC_MAX_PATH];		/* Volume to be mounted */
	Password VolumePassword;			/* User password */
	BOOL bCache;						/* Cache passwords in driver */
	int nDosDriveNo;					/* Drive number to mount */
	uint32 BytesPerSector;
	BOOL bMountReadOnly;				/* Mount volume in read-only mode */
	BOOL bMountRemovable;				/* Mount volume as removable media */
	BOOL bExclusiveAccess;				/* Open host file/device in exclusive access mode */
	BOOL bMountManager;					/* Announce volume to mount manager */
	BOOL bPreserveTimestamp;			/* Preserve file container timestamp */
	BOOL bPartitionInInactiveSysEncScope;		/* If TRUE, we are to attempt to mount a partition located on an encrypted system drive without pre-boot authentication. */
	int nPartitionInInactiveSysEncScopeDriveNo;	/* If bPartitionInInactiveSysEncScope is TRUE, this contains the drive number of the system drive on which the partition is located. */
	BOOL SystemFavorite;
	// Hidden volume protection
	BOOL bProtectHiddenVolume;			/* TRUE if the user wants the hidden volume within this volume to be protected against being overwritten (damaged) */
	Password ProtectedHidVolPassword;	/* Password to the hidden volume to be protected against overwriting */
	BOOL UseBackupHeader;
	BOOL RecoveryMode;
	int pkcs5_prf;
	int ProtectedHidVolPkcs5Prf;
	BOOL bTrueCryptMode;
	uint32 BytesPerPhysicalSector;
	int VolumePim;
	int ProtectedHidVolPim;
	wchar_t wszLabel[33]; // maximum label length is 32 for NTFS and 11 for FAT32
	BOOL bIsNTFS; // output only
	BOOL bDriverSetLabel;
	BOOL bCachePim;
	ULONG MaximumTransferLength;
	ULONG MaximumPhysicalPages;
	ULONG AlignmentMask;
} MOUNT_STRUCT;

typedef struct
{
	int nDosDriveNo;	/* Drive letter to unmount */
	BOOL ignoreOpenFiles;
	BOOL HiddenVolumeProtectionTriggered;
	int nReturnCode;	/* Return code back from driver */
} UNMOUNT_STRUCT;

typedef struct
{
	unsigned __int32 ulMountedDrives;	/* Bitfield of all mounted drive letters */
	wchar_t wszVolume[26][TC_MAX_PATH];	/* Volume names of mounted volumes */
	wchar_t wszLabel[26][33];	/* Labels of mounted volumes */
	wchar_t volumeID[26][VOLUME_ID_SIZE];	/* IDs of mounted volumes */
	unsigned __int64 diskLength[26];
	int ea[26];
	int volumeType[26];	/* Volume type (e.g. PROP_VOL_TYPE_OUTER, PROP_VOL_TYPE_OUTER_VOL_WRITE_PREVENTED, etc.) */
	BOOL truecryptMode[26];
} MOUNT_LIST_STRUCT;

typedef struct
{
	int driveNo;
	int uniqueId;
	wchar_t wszVolume[TC_MAX_PATH];
	unsigned __int64 diskLength;
	int ea;
	int mode;
	int pkcs5;
	int pkcs5Iterations;
	BOOL hiddenVolume;
	BOOL readOnly;
	BOOL removable;
	BOOL partitionInInactiveSysEncScope;
	uint32 volumeHeaderFlags;
	unsigned __int64 totalBytesRead;
	unsigned __int64 totalBytesWritten;
	int hiddenVolProtection;	/* Hidden volume protection status (e.g. HIDVOL_PROT_STATUS_NONE, HIDVOL_PROT_STATUS_ACTIVE, etc.) */
	int volFormatVersion;
	int volumePim;
	wchar_t wszLabel[33];
	BOOL bDriverSetLabel;
	unsigned char volumeID[VOLUME_ID_SIZE];
} VOLUME_PROPERTIES_STRUCT;

typedef struct
{
	WCHAR symLinkName[TC_MAX_PATH];
	WCHAR targetName[TC_MAX_PATH];
} RESOLVE_SYMLINK_STRUCT;

typedef struct
{
	WCHAR deviceName[TC_MAX_PATH];
	PARTITION_INFORMATION partInfo;
	BOOL IsGPT;
	BOOL IsDynamic;
}
DISK_PARTITION_INFO_STRUCT;

typedef struct
{
	WCHAR deviceName[TC_MAX_PATH];
	DISK_GEOMETRY diskGeometry;
}
DISK_GEOMETRY_STRUCT;

typedef struct
{
	WCHAR deviceName[TC_MAX_PATH];
	DISK_GEOMETRY diskGeometry;
	LARGE_INTEGER DiskSize;
}
DISK_GEOMETRY_EX_STRUCT;

typedef struct
{
	WCHAR DeviceName[TC_MAX_PATH];
	LARGE_INTEGER RealDriveSize;
	BOOL TimeOut;
} ProbeRealDriveSizeRequest;

typedef struct
{
	wchar_t wszFileName[TC_MAX_PATH];		// Volume to be "open tested"
	BOOL bDetectTCBootLoader;			// Whether the driver is to determine if the first sector contains a portion of the TrueCrypt Boot Loader
	BOOL TCBootLoaderDetected;
	BOOL DetectFilesystem;
	BOOL FilesystemDetected;
	BOOL bComputeVolumeIDs;
	unsigned char volumeIDs[TC_VOLUME_TYPE_COUNT][VOLUME_ID_SIZE];
	BOOL VolumeIDComputed[TC_VOLUME_TYPE_COUNT];
} OPEN_TEST_STRUCT;


typedef enum
{
	SetupNone = 0,
	SetupEncryption,
	SetupDecryption
} BootEncryptionSetupMode;


typedef struct
{
	// New fields must be added at the end of the structure to maintain compatibility with previous versions
	BOOL DeviceFilterActive;

	uint16 BootLoaderVersion;

	BOOL DriveMounted;
	BOOL VolumeHeaderPresent;
	BOOL DriveEncrypted;

	LARGE_INTEGER BootDriveLength;

	int64 ConfiguredEncryptedAreaStart;
	int64 ConfiguredEncryptedAreaEnd;
	int64 EncryptedAreaStart;
	int64 EncryptedAreaEnd;

	uint32 VolumeHeaderSaltCrc32;

	BOOL SetupInProgress;
	BootEncryptionSetupMode SetupMode;
	BOOL TransformWaitingForIdle;

	uint32 HibernationPreventionCount;

	BOOL HiddenSystem;
	int64 HiddenSystemPartitionStart;

	// Number of times the filter driver answered that an unencrypted volume
	// is read-only (or mounted an outer/normal TrueCrypt volume as read only)
	uint32 HiddenSysLeakProtectionCount;

} BootEncryptionStatus;


typedef struct
{
	BootEncryptionSetupMode SetupMode;
	WipeAlgorithmId WipeAlgorithm;
	BOOL ZeroUnreadableSectors;
	BOOL DiscardUnreadableEncryptedSectors;
} BootEncryptionSetupRequest;


typedef struct
{
	Password VolumePassword;
	int pkcs5_prf;
	int pim;
} ReopenBootVolumeHeaderRequest;


typedef struct
{
	char BootEncryptionAlgorithmName[256];
	char BootPrfAlgorithmName[256];
} GetBootEncryptionAlgorithmNameRequest;

typedef struct
{
	byte Fingerprint[WHIRLPOOL_DIGESTSIZE + SHA512_DIGESTSIZE];
} BootLoaderFingerprintRequest;

typedef struct
{
	wchar_t DevicePath[TC_MAX_PATH];
	byte Configuration;
	BOOL DriveIsDynamic;
	uint16 BootLoaderVersion;
	byte UserConfiguration;
	char CustomUserMessage[TC_BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH + 1];
} GetSystemDriveConfigurationRequest;

typedef struct
{
	WipeAlgorithmId WipeAlgorithm;
	CRYPTOPP_ALIGN_DATA(16) byte WipeKey[MASTER_KEYDATA_SIZE];
} WipeDecoySystemRequest;

typedef struct
{
	BOOL WipeInProgress;
	WipeAlgorithmId WipeAlgorithm;
	int64 WipedAreaEnd;
} DecoySystemWipeStatus;

typedef struct
{
	LARGE_INTEGER Offset;
	byte Data[TC_SECTOR_SIZE_BIOS];
} WriteBootDriveSectorRequest;

typedef struct
{
	BOOL PagingFileCreationPrevented;
	BOOL SystemFavoriteVolumeDirty;
} GetWarningFlagsRequest;

typedef struct
{
	struct _DriveFilterExtension *BootDriveFilterExtension;
	BOOL HwEncryptionEnabled;
} GetSystemDriveDumpConfigRequest;

#pragma pack (pop)

#define DRIVER_STR WIDE

#define TC_UNIQUE_ID_PREFIX "VeraCryptVolume"
#define TC_MOUNT_PREFIX L"\\Device\\VeraCryptVolume"

#define NT_MOUNT_PREFIX DRIVER_STR("\\Device\\VeraCryptVolume")
#define NT_ROOT_PREFIX DRIVER_STR("\\Device\\VeraCrypt")
#define DOS_MOUNT_PREFIX_DEFAULT DRIVER_STR("\\DosDevices\\")
#define DOS_MOUNT_PREFIX_GLOBAL DRIVER_STR("\\GLOBAL??\\") // Use Global MS-DOS device names for sanity checks on drive letters
#define DOS_ROOT_PREFIX DRIVER_STR("\\DosDevices\\VeraCrypt")
#define WIN32_ROOT_PREFIX DRIVER_STR("\\\\.\\VeraCrypt")

#define TC_DRIVER_CONFIG_REG_VALUE_NAME DRIVER_STR("VeraCryptConfig")
#define TC_ENCRYPTION_FREE_CPU_COUNT_REG_VALUE_NAME DRIVER_STR("VeraCryptEncryptionFreeCpuCount")

// WARNING: Modifying the following values can introduce incompatibility with previous versions.
#define TC_DRIVER_CONFIG_CACHE_BOOT_PASSWORD						0x1
#define TC_DRIVER_CONFIG_CACHE_BOOT_PASSWORD_FOR_SYS_FAVORITES		0x2
#define TC_DRIVER_CONFIG_DISABLE_NONADMIN_SYS_FAVORITES_ACCESS		0x4
#define TC_DRIVER_CONFIG_DISABLE_HARDWARE_ENCRYPTION				0x8
#define TC_DRIVER_CONFIG_ENABLE_EXTENDED_IOCTL						0x10
#define TC_DRIVER_CONFIG_DISABLE_EVIL_MAID_ATTACK_DETECTION			0x20
#define TC_DRIVER_CONFIG_CACHE_BOOT_PIM								0x40
#define VC_DRIVER_CONFIG_ALLOW_NONSYS_TRIM							0x80
#define VC_DRIVER_CONFIG_BLOCK_SYS_TRIM								0x100

#endif		/* _WIN32 */