Annotation of truecrypt/common/apidrvr.h, revision 1.1.1.22

1.1.1.10  root        1: /*
1.1.1.12  root        2:  Legal Notice: Some portions of the source code contained in this file were
                      3:  derived from the source code of Encryption for the Masses 2.02a, which is
                      4:  Copyright (c) 1998-2000 Paul Le Roux and which is governed by the 'License
                      5:  Agreement for Encryption for the Masses'. Modifications and additions to
1.1.1.20  root        6:  the original source code (contained in this file) and all other portions
1.1.1.21  root        7:  of this file are Copyright (c) 2003-2010 TrueCrypt Developers Association
                      8:  and are governed by the TrueCrypt License 3.0 the full text of which is
1.1.1.20  root        9:  contained in the file License.txt included in TrueCrypt binary and source
                     10:  code distribution packages. */
1.1       root       11: 
1.1.1.6   root       12: #pragma once
                     13: 
                     14: #include "Tcdefs.h"
1.1.1.15  root       15: #include "Boot/Windows/BootDefs.h"
1.1.1.6   root       16: #include "Common.h"
                     17: #include "Crypto.h"
1.1.1.21  root       18: #include "Volumes.h"
1.1.1.12  root       19: #include "Wipe.h"
1.1.1.6   root       20: 
                     21: #ifdef _WIN32
                     22: 
1.1.1.13  root       23: /* WARNING: Modifying the following values or their meanings can introduce incompatibility with previous versions. */
1.1       root       24: 
1.1.1.12  root       25: #define TC_IOCTL(CODE) (CTL_CODE (FILE_DEVICE_UNKNOWN, 0x800 + (CODE), METHOD_BUFFERED, FILE_ANY_ACCESS))
1.1       root       26: 
1.1.1.12  root       27: #define TC_IOCTL_GET_DRIVER_VERSION                                            TC_IOCTL (1)
                     28: #define TC_IOCTL_GET_BOOT_LOADER_VERSION                               TC_IOCTL (2)
                     29: #define TC_IOCTL_MOUNT_VOLUME                                                  TC_IOCTL (3)
                     30: #define TC_IOCTL_DISMOUNT_VOLUME                                               TC_IOCTL (4)
                     31: #define TC_IOCTL_DISMOUNT_ALL_VOLUMES                                  TC_IOCTL (5)
                     32: #define TC_IOCTL_GET_MOUNTED_VOLUMES                                   TC_IOCTL (6)
                     33: #define TC_IOCTL_GET_VOLUME_PROPERTIES                                 TC_IOCTL (7)
                     34: #define TC_IOCTL_GET_DEVICE_REFCOUNT                                   TC_IOCTL (8)
1.1.1.22! root       35: #define TC_IOCTL_IS_DRIVER_UNLOAD_DISABLED                             TC_IOCTL (9)
1.1.1.12  root       36: #define TC_IOCTL_IS_ANY_VOLUME_MOUNTED                                 TC_IOCTL (10)
                     37: #define TC_IOCTL_GET_PASSWORD_CACHE_STATUS                             TC_IOCTL (11)
                     38: #define TC_IOCTL_WIPE_PASSWORD_CACHE                                   TC_IOCTL (12)
                     39: #define TC_IOCTL_OPEN_TEST                                                             TC_IOCTL (13)
                     40: #define TC_IOCTL_GET_DRIVE_PARTITION_INFO                              TC_IOCTL (14)
                     41: #define TC_IOCTL_GET_DRIVE_GEOMETRY                                            TC_IOCTL (15)
                     42: #define TC_IOCTL_PROBE_REAL_DRIVE_SIZE                                 TC_IOCTL (16)
                     43: #define TC_IOCTL_GET_RESOLVED_SYMLINK                                  TC_IOCTL (17)
                     44: #define TC_IOCTL_GET_BOOT_ENCRYPTION_STATUS                            TC_IOCTL (18)
                     45: #define TC_IOCTL_BOOT_ENCRYPTION_SETUP                                 TC_IOCTL (19)
                     46: #define TC_IOCTL_ABORT_BOOT_ENCRYPTION_SETUP                   TC_IOCTL (20)
                     47: #define TC_IOCTL_GET_BOOT_ENCRYPTION_SETUP_RESULT              TC_IOCTL (21)
                     48: #define TC_IOCTL_GET_BOOT_DRIVE_VOLUME_PROPERTIES              TC_IOCTL (22)
                     49: #define TC_IOCTL_REOPEN_BOOT_VOLUME_HEADER                             TC_IOCTL (23)
1.1.1.13  root       50: #define TC_IOCTL_GET_BOOT_ENCRYPTION_ALGORITHM_NAME            TC_IOCTL (24)
1.1.1.19  root       51: #define TC_IOCTL_GET_PORTABLE_MODE_STATUS                              TC_IOCTL (25)
                     52: #define TC_IOCTL_SET_PORTABLE_MODE_STATUS                              TC_IOCTL (26)
1.1.1.14  root       53: #define TC_IOCTL_IS_HIDDEN_SYSTEM_RUNNING                              TC_IOCTL (27)
                     54: #define TC_IOCTL_GET_SYSTEM_DRIVE_CONFIG                               TC_IOCTL (28)
                     55: #define TC_IOCTL_DISK_IS_WRITABLE                                              TC_IOCTL (29)
1.1.1.15  root       56: #define TC_IOCTL_START_DECOY_SYSTEM_WIPE                               TC_IOCTL (30)
                     57: #define TC_IOCTL_ABORT_DECOY_SYSTEM_WIPE                               TC_IOCTL (31)
                     58: #define TC_IOCTL_GET_DECOY_SYSTEM_WIPE_STATUS                  TC_IOCTL (32)
                     59: #define TC_IOCTL_GET_DECOY_SYSTEM_WIPE_RESULT                  TC_IOCTL (33)
                     60: #define TC_IOCTL_WRITE_BOOT_DRIVE_SECTOR                               TC_IOCTL (34)
1.1.1.21  root       61: #define TC_IOCTL_GET_WARNING_FLAGS                                             TC_IOCTL (35)
1.1.1.19  root       62: #define TC_IOCTL_SET_SYSTEM_FAVORITE_VOLUME_DIRTY              TC_IOCTL (36)
1.1.1.21  root       63: #define TC_IOCTL_REREAD_DRIVER_CONFIG                                  TC_IOCTL (37)
                     64: #define TC_IOCTL_GET_SYSTEM_DRIVE_DUMP_CONFIG                  TC_IOCTL (38)
1.1.1.12  root       65: 
                     66: // Legacy IOCTLs used before version 5.0
                     67: #define TC_IOCTL_LEGACY_GET_DRIVER_VERSION             466968
                     68: #define TC_IOCTL_LEGACY_GET_MOUNTED_VOLUMES            466948
1.1       root       69: 
                     70: 
                     71: /* Start of driver interface structures, the size of these structures may
                     72:    change between versions; so make sure you first send DRIVER_VERSION to
                     73:    check that it's the correct device driver */
                     74: 
                     75: #pragma pack (push)
                     76: #pragma pack(1)
                     77: 
                     78: typedef struct
                     79: {
1.1.1.6   root       80:        int nReturnCode;                                        /* Return code back from driver */
1.1.1.15  root       81:        BOOL FilesystemDirty;
1.1.1.16  root       82:        BOOL VolumeMountedReadOnlyAfterAccessDenied;
1.1.1.17  root       83:        BOOL VolumeMountedReadOnlyAfterDeviceWriteProtected;
1.1.1.15  root       84: 
1.1.1.21  root       85:        wchar_t wszVolume[TC_MAX_PATH];         /* Volume to be mounted */
1.1.1.6   root       86:        Password VolumePassword;                        /* User password */
                     87:        BOOL bCache;                                            /* Cache passwords in driver */
                     88:        int nDosDriveNo;                                        /* Drive number to mount */
1.1.1.21  root       89:        uint32 BytesPerSector;
1.1.1.6   root       90:        BOOL bMountReadOnly;                            /* Mount volume in read-only mode */
                     91:        BOOL bMountRemovable;                           /* Mount volume as removable media */
                     92:        BOOL bExclusiveAccess;                          /* Open host file/device in exclusive access mode */
                     93:        BOOL bMountManager;                                     /* Announce volume to mount manager */
                     94:        BOOL bPreserveTimestamp;                        /* Preserve file container timestamp */
1.1.1.13  root       95:        BOOL bPartitionInInactiveSysEncScope;           /* If TRUE, we are to attempt to mount a partition located on an encrypted system drive without pre-boot authentication. */
                     96:        int nPartitionInInactiveSysEncScopeDriveNo;     /* If bPartitionInInactiveSysEncScope is TRUE, this contains the drive number of the system drive on which the partition is located. */
1.1.1.19  root       97:        BOOL SystemFavorite;
1.1.1.6   root       98:        // Hidden volume protection
                     99:        BOOL bProtectHiddenVolume;                      /* TRUE if the user wants the hidden volume within this volume to be protected against being overwritten (damaged) */
                    100:        Password ProtectedHidVolPassword;       /* Password to the hidden volume to be protected against overwriting */
1.1.1.14  root      101:        BOOL UseBackupHeader;
1.1.1.15  root      102:        BOOL RecoveryMode;
1.1       root      103: } MOUNT_STRUCT;
                    104: 
                    105: typedef struct
                    106: {
                    107:        int nDosDriveNo;        /* Drive letter to unmount */
1.1.1.4   root      108:        BOOL ignoreOpenFiles;
1.1.1.14  root      109:        BOOL HiddenVolumeProtectionTriggered;
1.1.1.4   root      110:        int nReturnCode;        /* Return code back from driver */
1.1       root      111: } UNMOUNT_STRUCT;
                    112: 
                    113: typedef struct
                    114: {
1.1.1.6   root      115:        unsigned __int32 ulMountedDrives;       /* Bitfield of all mounted drive letters */
1.1.1.21  root      116:        wchar_t wszVolume[26][TC_MAX_PATH];     /* Volume names of mounted volumes */
1.1       root      117:        unsigned __int64 diskLength[26];
1.1.1.4   root      118:        int ea[26];
1.1.1.6   root      119:        int volumeType[26];     /* Volume type (e.g. PROP_VOL_TYPE_OUTER, PROP_VOL_TYPE_OUTER_VOL_WRITE_PREVENTED, etc.) */
1.1       root      120: } MOUNT_LIST_STRUCT;
                    121: 
                    122: typedef struct
                    123: {
                    124:        int driveNo;
1.1.1.6   root      125:        int uniqueId;
1.1.1.21  root      126:        wchar_t wszVolume[TC_MAX_PATH];
1.1       root      127:        unsigned __int64 diskLength;
1.1.1.4   root      128:        int ea;
1.1.1.7   root      129:        int mode;
1.1       root      130:        int pkcs5;
                    131:        int pkcs5Iterations;
1.1.1.4   root      132:        BOOL hiddenVolume;
1.1.1.6   root      133:        BOOL readOnly;
1.1.1.17  root      134:        BOOL removable;
1.1.1.19  root      135:        BOOL partitionInInactiveSysEncScope;
1.1.1.15  root      136: #if 0
                    137:        unsigned __int64 volumeCreationTime;    // Deprecated in v6.0
                    138:        unsigned __int64 headerCreationTime;    // Deprecated in v6.0
                    139: #endif
                    140:        uint32 volumeHeaderFlags;
1.1.1.6   root      141:        unsigned __int64 totalBytesRead;
                    142:        unsigned __int64 totalBytesWritten;
                    143:        int hiddenVolProtection;        /* Hidden volume protection status (e.g. HIDVOL_PROT_STATUS_NONE, HIDVOL_PROT_STATUS_ACTIVE, etc.) */
1.1.1.14  root      144:        int volFormatVersion;
1.1       root      145: } VOLUME_PROPERTIES_STRUCT;
                    146: 
                    147: typedef struct
                    148: {
1.1.1.4   root      149:        WCHAR symLinkName[TC_MAX_PATH];
                    150:        WCHAR targetName[TC_MAX_PATH];
                    151: } RESOLVE_SYMLINK_STRUCT;
                    152: 
                    153: typedef struct
                    154: {
1.1.1.10  root      155:        WCHAR deviceName[TC_MAX_PATH];
                    156:        PARTITION_INFORMATION partInfo;
1.1.1.12  root      157:        BOOL IsGPT;
1.1.1.15  root      158:        BOOL IsDynamic;
1.1.1.10  root      159: }
                    160: DISK_PARTITION_INFO_STRUCT;
                    161: 
                    162: typedef struct
                    163: {
                    164:        WCHAR deviceName[TC_MAX_PATH];
                    165:        DISK_GEOMETRY diskGeometry;
                    166: }
                    167: DISK_GEOMETRY_STRUCT;
                    168: 
                    169: typedef struct
                    170: {
1.1.1.12  root      171:        WCHAR DeviceName[TC_MAX_PATH];
                    172:        LARGE_INTEGER RealDriveSize;
1.1.1.13  root      173:        BOOL TimeOut;
1.1.1.12  root      174: } ProbeRealDriveSizeRequest;
                    175: 
                    176: typedef struct
                    177: {
1.1.1.21  root      178:        wchar_t wszFileName[TC_MAX_PATH];               // Volume to be "open tested"
1.1.1.13  root      179:        BOOL bDetectTCBootLoader;                       // Whether the driver is to determine if the first sector contains a portion of the TrueCrypt Boot Loader
1.1.1.17  root      180:        BOOL TCBootLoaderDetected;
                    181:        BOOL DetectFilesystem;
                    182:        BOOL FilesystemDetected;
1.1       root      183: } OPEN_TEST_STRUCT;
                    184: 
                    185: 
1.1.1.12  root      186: typedef enum
                    187: {
                    188:        SetupNone = 0,
                    189:        SetupEncryption,
                    190:        SetupDecryption
                    191: } BootEncryptionSetupMode;
                    192: 
                    193: 
                    194: typedef struct
                    195: {
1.1.1.14  root      196:        // New fields must be added at the end of the structure to maintain compatibility with previous versions
1.1.1.12  root      197:        BOOL DeviceFilterActive;
                    198: 
                    199:        uint16 BootLoaderVersion;
                    200: 
                    201:        BOOL DriveMounted;
                    202:        BOOL VolumeHeaderPresent;
                    203:        BOOL DriveEncrypted;
                    204: 
                    205:        LARGE_INTEGER BootDriveLength;
                    206: 
                    207:        int64 ConfiguredEncryptedAreaStart;
                    208:        int64 ConfiguredEncryptedAreaEnd;
                    209:        int64 EncryptedAreaStart;
                    210:        int64 EncryptedAreaEnd;
                    211: 
                    212:        uint32 VolumeHeaderSaltCrc32;
                    213: 
                    214:        BOOL SetupInProgress;
                    215:        BootEncryptionSetupMode SetupMode;
                    216:        BOOL TransformWaitingForIdle;
                    217: 
                    218:        uint32 HibernationPreventionCount;
                    219: 
1.1.1.14  root      220:        BOOL HiddenSystem;
                    221:        int64 HiddenSystemPartitionStart;
                    222: 
                    223:        // Number of times the filter driver answered that an unencrypted volume
                    224:        // is read-only (or mounted an outer/normal TrueCrypt volume as read only)
                    225:        uint32 HiddenSysLeakProtectionCount;
                    226: 
1.1.1.12  root      227: } BootEncryptionStatus;
                    228: 
                    229: 
                    230: typedef struct
                    231: {
                    232:        BootEncryptionSetupMode SetupMode;
                    233:        WipeAlgorithmId WipeAlgorithm;
1.1.1.15  root      234:        BOOL ZeroUnreadableSectors;
1.1.1.17  root      235:        BOOL DiscardUnreadableEncryptedSectors;
1.1.1.12  root      236: } BootEncryptionSetupRequest;
                    237: 
                    238: 
                    239: typedef struct
                    240: {
                    241:        Password VolumePassword;
                    242: } ReopenBootVolumeHeaderRequest;
                    243: 
                    244: 
1.1.1.13  root      245: typedef struct
                    246: {
                    247:        char BootEncryptionAlgorithmName[256];
                    248: } GetBootEncryptionAlgorithmNameRequest;
                    249: 
1.1.1.14  root      250: typedef struct
                    251: {
                    252:        wchar_t DevicePath[TC_MAX_PATH];
                    253:        byte Configuration;
                    254:        BOOL DriveIsDynamic;
1.1.1.15  root      255:        uint16 BootLoaderVersion;
                    256:        byte UserConfiguration;
                    257:        char CustomUserMessage[TC_BOOT_SECTOR_USER_MESSAGE_MAX_LENGTH + 1];
1.1.1.14  root      258: } GetSystemDriveConfigurationRequest;
1.1.1.13  root      259: 
1.1.1.15  root      260: typedef struct
                    261: {
                    262:        WipeAlgorithmId WipeAlgorithm;
                    263:        byte WipeKey[MASTER_KEYDATA_SIZE];
                    264: } WipeDecoySystemRequest;
                    265: 
                    266: typedef struct
                    267: {
                    268:        BOOL WipeInProgress;
                    269:        WipeAlgorithmId WipeAlgorithm;
                    270:        int64 WipedAreaEnd;
                    271: } DecoySystemWipeStatus;
                    272: 
                    273: typedef struct
                    274: {
                    275:        LARGE_INTEGER Offset;
1.1.1.21  root      276:        byte Data[TC_SECTOR_SIZE_BIOS];
1.1.1.15  root      277: } WriteBootDriveSectorRequest;
                    278: 
1.1.1.21  root      279: typedef struct
                    280: {
                    281:        BOOL PagingFileCreationPrevented;
                    282:        BOOL SystemFavoriteVolumeDirty;
                    283: } GetWarningFlagsRequest;
                    284: 
                    285: typedef struct
                    286: {
                    287:        struct _DriveFilterExtension *BootDriveFilterExtension;
                    288:        BOOL HwEncryptionEnabled;
                    289: } GetSystemDriveDumpConfigRequest;
                    290: 
1.1       root      291: #pragma pack (pop)
                    292: 
1.1.1.21  root      293: #ifdef TC_WINDOWS_DRIVER
1.1       root      294: #define DRIVER_STR WIDE
                    295: #else
                    296: #define DRIVER_STR
                    297: #endif
                    298: 
1.1.1.13  root      299: #define TC_UNIQUE_ID_PREFIX "TrueCryptVolume"
1.1       root      300: #define TC_MOUNT_PREFIX L"\\Device\\TrueCryptVolume"
                    301: 
                    302: #define NT_MOUNT_PREFIX DRIVER_STR("\\Device\\TrueCryptVolume")
                    303: #define NT_ROOT_PREFIX DRIVER_STR("\\Device\\TrueCrypt")
                    304: #define DOS_MOUNT_PREFIX DRIVER_STR("\\DosDevices\\")
                    305: #define DOS_ROOT_PREFIX DRIVER_STR("\\DosDevices\\TrueCrypt")
                    306: #define WIN32_ROOT_PREFIX DRIVER_STR("\\\\.\\TrueCrypt")
1.1.1.6   root      307: 
1.1.1.14  root      308: #define TC_DRIVER_CONFIG_REG_VALUE_NAME DRIVER_STR("TrueCryptConfig")
1.1.1.21  root      309: #define TC_ENCRYPTION_FREE_CPU_COUNT_REG_VALUE_NAME DRIVER_STR("TrueCryptEncryptionFreeCpuCount")
1.1.1.14  root      310: 
1.1.1.21  root      311: // WARNING: Modifying the following values can introduce incompatibility with previous versions.
1.1.1.19  root      312: #define TC_DRIVER_CONFIG_CACHE_BOOT_PASSWORD                                           0x1
                    313: #define TC_DRIVER_CONFIG_CACHE_BOOT_PASSWORD_FOR_SYS_FAVORITES         0x2
                    314: #define TC_DRIVER_CONFIG_DISABLE_NONADMIN_SYS_FAVORITES_ACCESS         0x4
1.1.1.21  root      315: #define TC_DRIVER_CONFIG_DISABLE_HARDWARE_ENCRYPTION                           0x8
1.1.1.15  root      316: 
1.1.1.6   root      317: #endif         /* _WIN32 */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.