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

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
                      7:  this file are Copyright (c) 2003-2008 TrueCrypt Foundation and are governed
                      8:  by the TrueCrypt License 2.4 the full text of which is contained in the
                      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: 
                     15: #include "EncryptedIoQueue.h"
                     16: 
1.1       root       17: /* This structure is used to start new threads */
                     18: typedef struct _THREAD_BLOCK_
                     19: {
                     20:        PDEVICE_OBJECT DeviceObject;
                     21:        NTSTATUS ntCreateStatus;
1.1.1.7   root       22:        WCHAR wszMountVolume[TC_MAX_PATH + 8];
1.1       root       23:        MOUNT_STRUCT *mount;
                     24: } THREAD_BLOCK, *PTHREAD_BLOCK;
                     25: 
1.1.1.12  root       26: 
1.1       root       27: /* This structure is allocated for non-root devices! WARNING: bRootDevice
                     28:    must be the first member of the structure! */
                     29: typedef struct EXTENSION
                     30: {
                     31:        BOOL bRootDevice;       /* Is this the root device ? which the
                     32:                                   user-mode apps talk to */
1.1.1.12  root       33:        BOOL IsDriveFilterDevice;
1.1       root       34: 
                     35:        ULONG lMagicNumber;     /* To ensure the completion routine is not
                     36:                                   sending us bad IRP's */
                     37: 
1.1.1.6   root       38:        int UniqueVolumeId;
1.1       root       39:        int nDosDriveNo;        /* Drive number this extension is mounted
                     40:                                   against */
                     41:        BOOL bShuttingDown;                     /* Is the driver shutting down ? */
                     42:        BOOL bThreadShouldQuit;         /* Instruct per device worker thread to quit */
                     43:        PETHREAD peThread;                      /* Thread handle */
                     44:        KEVENT keCreateEvent;           /* Device creation event */
                     45:        KSPIN_LOCK ListSpinLock;        /* IRP spinlock */
                     46:        LIST_ENTRY ListEntry;           /* IRP listentry */
                     47:        KSEMAPHORE RequestSemaphore;    /* IRP list request  Semaphore */
                     48: 
                     49:        HANDLE hDeviceFile;                     /* Device handle for this device */
                     50:        PFILE_OBJECT pfoDeviceFile;     /* Device fileobject for this device */
                     51:        PDEVICE_OBJECT pFsdDevice;      /* lower level device handle */
                     52: 
1.1.1.6   root       53:        CRYPTO_INFO *cryptoInfo;        /* Cryptographic and other information for this device */
1.1       root       54: 
                     55:        __int64 DiskLength;                     /* The length of the disk referred to by this device */  
                     56:        __int64 NumberOfCylinders;              /* Partition info */
                     57:        ULONG TracksPerCylinder;        /* Partition info */
                     58:        ULONG SectorsPerTrack;          /* Partition info */
                     59:        ULONG BytesPerSector;           /* Partition info */
                     60:        UCHAR PartitionType;            /* Partition info */
1.1.1.10  root       61:        
                     62:        int HostBytesPerSector;
1.1       root       63: 
                     64:        KEVENT keVolumeEvent;           /* Event structure used when setting up a device */
                     65: 
1.1.1.12  root       66:        EncryptedIoQueue Queue;
1.1.1.8   root       67: 
1.1.1.4   root       68:        BOOL bReadOnly;                         /* Is this device read-only ? */
                     69:        BOOL bRemovable;                        /* Is this device removable media ? */
                     70:        BOOL bRawDevice;                        /* Is this a raw-partition or raw-floppy device ? */
                     71:        BOOL bMountManager;                     /* Mount manager knows about volume */
1.1       root       72: 
1.1.1.7   root       73:        WCHAR wszVolume[TC_MAX_PATH];   /*  DONT change this size without also changing MOUNT_LIST_STRUCT! */
1.1       root       74: 
1.1.1.6   root       75:        // 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       76:        LARGE_INTEGER fileCreationTime;
                     77:        LARGE_INTEGER fileLastAccessTime;
                     78:        LARGE_INTEGER fileLastWriteTime;
                     79:        LARGE_INTEGER fileLastChangeTime;
1.1.1.6   root       80:        BOOL bTimeStampValid;
                     81: 
1.1       root       82: } EXTENSION, *PEXTENSION;
                     83: 
1.1.1.12  root       84: extern BOOL DriverShuttingDown;
1.1.1.10  root       85: extern ULONG OsMajorVersion;
                     86: 
1.1       root       87: /* Helper macro returning x seconds in units of 100 nanoseconds */
1.1.1.4   root       88: #define WAIT_SECONDS(x) ((x)*10000000)
1.1       root       89: 
                     90: /* In order to see any debug output you will need to run a checked build of
                     91:    NT */
                     92: #ifdef DEBUG
1.1.1.12  root       93: #      if 1 // DbgPrintEx is not available on Windows 2000
                     94: #              define Dump DbgPrint
                     95: #      else
                     96: #              define Dump(...) DbgPrintEx (DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, __VA_ARGS__)
                     97: #      endif
                     98: #              define DumpMem(...) DumpMemory (__VA_ARGS__)
1.1       root       99: #else
1.1.1.12  root      100: #      define Dump(...) ((void) 0)
                    101: #      define DumpMem(...) ((void) 0)
1.1       root      102: #endif
                    103: 
1.1.1.4   root      104: #define FSCTL_LOCK_VOLUME               CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  6, METHOD_BUFFERED, FILE_ANY_ACCESS)
                    105: #define FSCTL_UNLOCK_VOLUME             CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  7, METHOD_BUFFERED, FILE_ANY_ACCESS)
                    106: #define FSCTL_DISMOUNT_VOLUME           CTL_CODE(FILE_DEVICE_FILE_SYSTEM,  8, METHOD_BUFFERED, FILE_ANY_ACCESS)
1.1.1.6   root      107: NTKERNELAPI NTSTATUS ObOpenObjectByPointer (IN PVOID Object, IN ULONG HandleAttributes, IN PACCESS_STATE PassedAccessState OPTIONAL, IN ACCESS_MASK DesiredAccess OPTIONAL, IN POBJECT_TYPE ObjectType OPTIONAL, IN KPROCESSOR_MODE AccessMode, OUT PHANDLE Handle);
1.1       root      108: 
                    109: NTSTATUS DriverEntry (PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath);
1.1.1.12  root      110: void DumpMemory (void *memory, int size);
                    111: BOOL IsAccessibleByUser (PUNICODE_STRING objectFileName, BOOL readOnly);
                    112: NTSTATUS ProcessMainDeviceControlIrp (PDEVICE_OBJECT DeviceObject, PEXTENSION Extension, PIRP Irp);
                    113: NTSTATUS ProcessVolumeDeviceControlIrp (PDEVICE_OBJECT DeviceObject, PEXTENSION Extension, PIRP Irp);
                    114: NTSTATUS SendDeviceIoControlRequest (PDEVICE_OBJECT deviceObject, ULONG ioControlCode, void *inputBuffer, int inputBufferSize, void *outputBuffer, int outputBufferSize);
1.1       root      115: NTSTATUS TCDispatchQueueIRP (PDEVICE_OBJECT DeviceObject, PIRP Irp);
                    116: NTSTATUS TCCreateRootDeviceObject (PDRIVER_OBJECT DriverObject);
1.1.1.4   root      117: NTSTATUS TCCreateDeviceObject (PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT * ppDeviceObject, MOUNT_STRUCT * mount);
1.1.1.12  root      118: NTSTATUS TCReadDevice (PDEVICE_OBJECT deviceObject, PVOID buffer, LARGE_INTEGER offset, ULONG length);
                    119: NTSTATUS TCWriteDevice (PDEVICE_OBJECT deviceObject, PVOID buffer, LARGE_INTEGER offset, ULONG length);
                    120: NTSTATUS TCStartThread (PKSTART_ROUTINE threadProc, PVOID threadArg, PKTHREAD *kThread);
1.1.1.13! root      121: NTSTATUS TCStartThreadInProcess (PKSTART_ROUTINE threadProc, PVOID threadArg, PKTHREAD *kThread, PEPROCESS process);
1.1.1.12  root      122: NTSTATUS TCStartVolumeThread (PDEVICE_OBJECT DeviceObject, PEXTENSION Extension, MOUNT_STRUCT * mount);
                    123: void TCStopThread (PKTHREAD kThread, PKEVENT wakeUpEvent);
                    124: void TCStopVolumeThread (PDEVICE_OBJECT DeviceObject, PEXTENSION Extension);
                    125: VOID VolumeThreadProc (PVOID Context);
1.1.1.5   root      126: void TCSleep (int milliSeconds);
1.1       root      127: void TCGetNTNameFromNumber (LPWSTR ntname, int nDriveNo);
                    128: void TCGetDosNameFromNumber (LPWSTR dosname, int nDriveNo);
                    129: LPWSTR TCTranslateCode (ULONG ulCode);
                    130: PDEVICE_OBJECT TCDeleteDeviceObject (PDEVICE_OBJECT DeviceObject, PEXTENSION Extension);
                    131: VOID TCUnloadDriver (PDRIVER_OBJECT DriverObject);
1.1.1.4   root      132: NTSTATUS TCDeviceIoControl (PWSTR deviceName, ULONG IoControlCode, void *InputBuffer, int InputBufferSize, void *OutputBuffer, int OutputBufferSize);
                    133: NTSTATUS TCOpenFsVolume (PEXTENSION Extension, PHANDLE volumeHandle, PFILE_OBJECT * fileObject);
                    134: void TCCloseFsVolume (HANDLE volumeHandle, PFILE_OBJECT fileObject);
                    135: NTSTATUS TCFsctlCall (PFILE_OBJECT fileObject, LONG IoControlCode, void *InputBuffer, int InputBufferSize, void *OutputBuffer, int OutputBufferSize);
1.1.1.6   root      136: NTSTATUS CreateDriveLink (int nDosDriveNo);
                    137: NTSTATUS RemoveDriveLink (int nDosDriveNo);
1.1.1.4   root      138: NTSTATUS MountManagerMount (MOUNT_STRUCT *mount);
                    139: NTSTATUS MountManagerUnmount (int nDosDriveNo);
                    140: NTSTATUS MountDevice (PDEVICE_OBJECT deviceObject, MOUNT_STRUCT *mount);
                    141: NTSTATUS UnmountDevice (PDEVICE_OBJECT deviceObject, BOOL ignoreOpenFiles);
1.1.1.12  root      142: NTSTATUS UnmountAllDevices (PDEVICE_OBJECT DeviceObject, BOOL ignoreOpenFiles);
1.1.1.4   root      143: NTSTATUS SymbolicLinkToTarget (PWSTR symlinkName, PWSTR targetName, USHORT maxTargetNameLength);
1.1.1.5   root      144: void DriverMutexWait ();
                    145: void DriverMutexRelease ();
1.1.1.6   root      146: BOOL RegionsOverlap (unsigned __int64 start1, unsigned __int64 end1, unsigned __int64 start2, unsigned __int64 end2);
1.1.1.12  root      147: void GetIntersection (uint64 start1, uint32 length1, uint64 start2, uint64 end2, uint64 *intersectStart, uint32 *intersectLength);
                    148: NTSTATUS TCCompleteIrp (PIRP irp, NTSTATUS status, ULONG_PTR information);
                    149: NTSTATUS TCCompleteDiskIrp (PIRP irp, NTSTATUS status, ULONG_PTR information);
                    150: NTSTATUS ProbeRealDriveSize (PDEVICE_OBJECT driveDeviceObject, LARGE_INTEGER *driveSize);
                    151: 
                    152: #define TC_TO_STRING2(n) #n
                    153: #define TC_TO_STRING(n) TC_TO_STRING2(n)
                    154: 
                    155: #define trace_point Dump (__FUNCTION__ ":" TC_TO_STRING(__LINE__) "\n")
                    156: 
                    157: #define TC_BUG_CHECK(status) KeBugCheckEx (SECURITY_SYSTEM, __LINE__, status, 0, 'TC')
                    158: 
                    159: #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.