Annotation of truecrypt/driver/ntdriver.h, revision 1.1.1.19

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
                      6:  the original source code (contained in this file) and all other portions of
1.1.1.17  root        7:  this file are Copyright (c) 2003-2009 TrueCrypt Foundation and are governed
1.1.1.19! root        8:  by the TrueCrypt License 2.8 the full text of which is contained in the
1.1.1.12  root        9:  file License.txt included in TrueCrypt binary and source code distribution
1.1.1.10  root       10:  packages. */
1.1       root       11: 
1.1.1.12  root       12: #ifndef TC_HEADER_NTDRIVER
                     13: #define TC_HEADER_NTDRIVER
                     14: 
1.1.1.19! root       15: #include "Common.h"
1.1.1.12  root       16: #include "EncryptedIoQueue.h"
                     17: 
1.1       root       18: /* This structure is used to start new threads */
                     19: typedef struct _THREAD_BLOCK_
                     20: {
                     21:        PDEVICE_OBJECT DeviceObject;
                     22:        NTSTATUS ntCreateStatus;
1.1.1.7   root       23:        WCHAR wszMountVolume[TC_MAX_PATH + 8];
1.1       root       24:        MOUNT_STRUCT *mount;
                     25: } THREAD_BLOCK, *PTHREAD_BLOCK;
                     26: 
1.1.1.12  root       27: 
1.1       root       28: /* This structure is allocated for non-root devices! WARNING: bRootDevice
                     29:    must be the first member of the structure! */
                     30: typedef struct EXTENSION
                     31: {
1.1.1.14  root       32:        BOOL bRootDevice;       /* Is this the root device ? which the user-mode apps talk to */
1.1.1.15  root       33:        BOOL IsVolumeDevice;
1.1.1.12  root       34:        BOOL IsDriveFilterDevice;
1.1.1.15  root       35:        BOOL IsVolumeFilterDevice;
1.1       root       36: 
1.1.1.14  root       37:        ULONG lMagicNumber;     /* To ensure the completion routine is not sending us bad IRP's */
1.1       root       38: 
1.1.1.6   root       39:        int UniqueVolumeId;
1.1.1.14  root       40:        int nDosDriveNo;        /* Drive number this extension is mounted against */
                     41: 
1.1       root       42:        BOOL bShuttingDown;                     /* Is the driver shutting down ? */
                     43:        BOOL bThreadShouldQuit;         /* Instruct per device worker thread to quit */
                     44:        PETHREAD peThread;                      /* Thread handle */
                     45:        KEVENT keCreateEvent;           /* Device creation event */
                     46:        KSPIN_LOCK ListSpinLock;        /* IRP spinlock */
                     47:        LIST_ENTRY ListEntry;           /* IRP listentry */
                     48:        KSEMAPHORE RequestSemaphore;    /* IRP list request  Semaphore */
                     49: 
                     50:        HANDLE hDeviceFile;                     /* Device handle for this device */
                     51:        PFILE_OBJECT pfoDeviceFile;     /* Device fileobject for this device */
                     52:        PDEVICE_OBJECT pFsdDevice;      /* lower level device handle */
                     53: 
1.1.1.6   root       54:        CRYPTO_INFO *cryptoInfo;        /* Cryptographic and other information for this device */
1.1       root       55: 
1.1.1.17  root       56:        __int64 HostLength;
1.1       root       57:        __int64 DiskLength;                     /* The length of the disk referred to by this device */  
                     58:        __int64 NumberOfCylinders;              /* Partition info */
                     59:        ULONG TracksPerCylinder;        /* Partition info */
                     60:        ULONG SectorsPerTrack;          /* Partition info */
                     61:        ULONG BytesPerSector;           /* Partition info */
                     62:        UCHAR PartitionType;            /* Partition info */
1.1.1.10  root       63:        
                     64:        int HostBytesPerSector;
1.1       root       65: 
                     66:        KEVENT keVolumeEvent;           /* Event structure used when setting up a device */
                     67: 
1.1.1.12  root       68:        EncryptedIoQueue Queue;
1.1.1.8   root       69: 
1.1.1.4   root       70:        BOOL bReadOnly;                         /* Is this device read-only ? */
                     71:        BOOL bRemovable;                        /* Is this device removable media ? */
1.1.1.19! root       72:        BOOL PartitionInInactiveSysEncScope;
1.1.1.4   root       73:        BOOL bRawDevice;                        /* Is this a raw-partition or raw-floppy device ? */
                     74:        BOOL bMountManager;                     /* Mount manager knows about volume */
1.1.1.19! root       75:        BOOL SystemFavorite;
1.1       root       76: 
1.1.1.7   root       77:        WCHAR wszVolume[TC_MAX_PATH];   /*  DONT change this size without also changing MOUNT_LIST_STRUCT! */
1.1       root       78: 
1.1.1.6   root       79:        // Container file date/time (used to reset date and time of file-hosted volumes after dismount or unsuccessful mount attempt, to preserve plausible deniability of hidden volumes).
1.1.1.4   root       80:        LARGE_INTEGER fileCreationTime;
                     81:        LARGE_INTEGER fileLastAccessTime;
                     82:        LARGE_INTEGER fileLastWriteTime;
                     83:        LARGE_INTEGER fileLastChangeTime;
1.1.1.6   root       84:        BOOL bTimeStampValid;
                     85: 
1.1.1.16  root       86:        PSID UserSid;
                     87:        BOOL SecurityClientContextValid;
                     88:        SECURITY_CLIENT_CONTEXT SecurityClientContext;
                     89: 
1.1       root       90: } EXTENSION, *PEXTENSION;
                     91: 
1.1.1.16  root       92: 
                     93: typedef enum
                     94: {
                     95:        ValidateInput,
                     96:        ValidateOutput,
                     97:        ValidateInputOutput
                     98: } ValidateIOBufferSizeType;
                     99: 
                    100: 
1.1.1.14  root      101: extern PDRIVER_OBJECT TCDriverObject;
1.1.1.12  root      102: extern BOOL DriverShuttingDown;
1.1.1.10  root      103: extern ULONG OsMajorVersion;
1.1.1.14  root      104: extern ULONG OsMinorVersion;
1.1.1.17  root      105: extern BOOL VolumeClassFilterRegistered;
1.1.1.16  root      106: extern BOOL CacheBootPassword;
1.1.1.10  root      107: 
1.1       root      108: /* Helper macro returning x seconds in units of 100 nanoseconds */
1.1.1.4   root      109: #define WAIT_SECONDS(x) ((x)*10000000)
1.1       root      110: 
                    111: NTSTATUS DriverEntry (PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath);
1.1.1.15  root      112: NTSTATUS DriverAddDevice (PDRIVER_OBJECT driverObject, PDEVICE_OBJECT pdo);
1.1.1.12  root      113: void DumpMemory (void *memory, int size);
                    114: BOOL IsAccessibleByUser (PUNICODE_STRING objectFileName, BOOL readOnly);
                    115: NTSTATUS ProcessMainDeviceControlIrp (PDEVICE_OBJECT DeviceObject, PEXTENSION Extension, PIRP Irp);
                    116: NTSTATUS ProcessVolumeDeviceControlIrp (PDEVICE_OBJECT DeviceObject, PEXTENSION Extension, PIRP Irp);
                    117: NTSTATUS SendDeviceIoControlRequest (PDEVICE_OBJECT deviceObject, ULONG ioControlCode, void *inputBuffer, int inputBufferSize, void *outputBuffer, int outputBufferSize);
1.1       root      118: NTSTATUS TCDispatchQueueIRP (PDEVICE_OBJECT DeviceObject, PIRP Irp);
                    119: NTSTATUS TCCreateRootDeviceObject (PDRIVER_OBJECT DriverObject);
1.1.1.4   root      120: NTSTATUS TCCreateDeviceObject (PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT * ppDeviceObject, MOUNT_STRUCT * mount);
1.1.1.12  root      121: NTSTATUS TCReadDevice (PDEVICE_OBJECT deviceObject, PVOID buffer, LARGE_INTEGER offset, ULONG length);
                    122: NTSTATUS TCWriteDevice (PDEVICE_OBJECT deviceObject, PVOID buffer, LARGE_INTEGER offset, ULONG length);
                    123: NTSTATUS TCStartThread (PKSTART_ROUTINE threadProc, PVOID threadArg, PKTHREAD *kThread);
1.1.1.13  root      124: NTSTATUS TCStartThreadInProcess (PKSTART_ROUTINE threadProc, PVOID threadArg, PKTHREAD *kThread, PEPROCESS process);
1.1.1.12  root      125: NTSTATUS TCStartVolumeThread (PDEVICE_OBJECT DeviceObject, PEXTENSION Extension, MOUNT_STRUCT * mount);
                    126: void TCStopThread (PKTHREAD kThread, PKEVENT wakeUpEvent);
                    127: void TCStopVolumeThread (PDEVICE_OBJECT DeviceObject, PEXTENSION Extension);
                    128: VOID VolumeThreadProc (PVOID Context);
1.1.1.5   root      129: void TCSleep (int milliSeconds);
1.1       root      130: void TCGetNTNameFromNumber (LPWSTR ntname, int nDriveNo);
                    131: void TCGetDosNameFromNumber (LPWSTR dosname, int nDriveNo);
                    132: LPWSTR TCTranslateCode (ULONG ulCode);
                    133: PDEVICE_OBJECT TCDeleteDeviceObject (PDEVICE_OBJECT DeviceObject, PEXTENSION Extension);
                    134: VOID TCUnloadDriver (PDRIVER_OBJECT DriverObject);
1.1.1.19! root      135: NTSTATUS TCDeviceIoControl (PWSTR deviceName, ULONG IoControlCode, void *InputBuffer, ULONG InputBufferSize, void *OutputBuffer, ULONG OutputBufferSize);
1.1.1.4   root      136: NTSTATUS TCOpenFsVolume (PEXTENSION Extension, PHANDLE volumeHandle, PFILE_OBJECT * fileObject);
                    137: void TCCloseFsVolume (HANDLE volumeHandle, PFILE_OBJECT fileObject);
                    138: NTSTATUS TCFsctlCall (PFILE_OBJECT fileObject, LONG IoControlCode, void *InputBuffer, int InputBufferSize, void *OutputBuffer, int OutputBufferSize);
1.1.1.6   root      139: NTSTATUS CreateDriveLink (int nDosDriveNo);
                    140: NTSTATUS RemoveDriveLink (int nDosDriveNo);
1.1.1.4   root      141: NTSTATUS MountManagerMount (MOUNT_STRUCT *mount);
                    142: NTSTATUS MountManagerUnmount (int nDosDriveNo);
                    143: NTSTATUS MountDevice (PDEVICE_OBJECT deviceObject, MOUNT_STRUCT *mount);
1.1.1.15  root      144: NTSTATUS UnmountDevice (UNMOUNT_STRUCT *unmountRequest, PDEVICE_OBJECT deviceObject, BOOL ignoreOpenFiles);
                    145: NTSTATUS UnmountAllDevices (UNMOUNT_STRUCT *unmountRequest, PDEVICE_OBJECT DeviceObject, BOOL ignoreOpenFiles);
1.1.1.4   root      146: NTSTATUS SymbolicLinkToTarget (PWSTR symlinkName, PWSTR targetName, USHORT maxTargetNameLength);
1.1.1.5   root      147: void DriverMutexWait ();
1.1.1.19! root      148: BOOL DriverMutexAcquireNoWait ();
1.1.1.5   root      149: void DriverMutexRelease ();
1.1.1.6   root      150: BOOL RegionsOverlap (unsigned __int64 start1, unsigned __int64 end1, unsigned __int64 start2, unsigned __int64 end2);
1.1.1.12  root      151: void GetIntersection (uint64 start1, uint32 length1, uint64 start2, uint64 end2, uint64 *intersectStart, uint32 *intersectLength);
                    152: NTSTATUS TCCompleteIrp (PIRP irp, NTSTATUS status, ULONG_PTR information);
                    153: NTSTATUS TCCompleteDiskIrp (PIRP irp, NTSTATUS status, ULONG_PTR information);
                    154: NTSTATUS ProbeRealDriveSize (PDEVICE_OBJECT driveDeviceObject, LARGE_INTEGER *driveSize);
1.1.1.14  root      155: BOOL UserCanAccessDriveDevice ();
1.1.1.15  root      156: size_t GetCpuCount ();
                    157: void EnsureNullTerminatedString (wchar_t *str, size_t maxSizeInBytes);
                    158: void *AllocateMemoryWithTimeout (size_t size, int retryDelay, int timeout);
                    159: BOOL IsDriveLetterAvailable (int nDosDriveNo);
                    160: NTSTATUS TCReadRegistryKey (PUNICODE_STRING keyPath, wchar_t *keyValueName, PKEY_VALUE_PARTIAL_INFORMATION *keyData);
                    161: NTSTATUS TCWriteRegistryKey (PUNICODE_STRING keyPath, wchar_t *keyValueName, ULONG keyValueType, void *valueData, ULONG valueSize);
                    162: BOOL IsVolumeClassFilterRegistered ();
                    163: uint32 ReadRegistryConfigFlags ();
                    164: NTSTATUS WriteRegistryConfigFlags (uint32 flags);
1.1.1.16  root      165: BOOL ValidateIOBufferSize (PIRP irp, size_t requiredBufferSize, ValidateIOBufferSizeType type);
                    166: NTSTATUS GetDeviceSectorSize (PDEVICE_OBJECT deviceObject, ULONG *bytesPerSector);
                    167: NTSTATUS ZeroUnreadableSectors (PDEVICE_OBJECT deviceObject, LARGE_INTEGER startOffset, ULONG size, uint64 *zeroedSectorCount);
1.1.1.17  root      168: NTSTATUS ReadDeviceSkipUnreadableSectors (PDEVICE_OBJECT deviceObject, byte *buffer, LARGE_INTEGER startOffset, ULONG size, uint64 *badSectorCount);
1.1.1.16  root      169: BOOL IsVolumeAccessibleByCurrentUser (PEXTENSION volumeDeviceExtension);
1.1.1.17  root      170: void GetElapsedTimeInit (LARGE_INTEGER *lastPerfCounter);
                    171: int64 GetElapsedTime (LARGE_INTEGER *lastPerfCounter);
1.1.1.19! root      172: BOOL IsOSAtLeast (OSVersionEnum reqMinOS);
1.1.1.12  root      173: 
1.1.1.19! root      174: #define TC_BUG_CHECK(status) KeBugCheckEx (SECURITY_SYSTEM, __LINE__, (ULONG_PTR) status, 0, 'TC')
1.1.1.12  root      175: 
                    176: #endif // TC_HEADER_NTDRIVER

unix.superglobalmegacorp.com

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