Annotation of truecrypt/driver/encryptedioqueue.h, revision 1.1.1.2

1.1       root        1: /*
                      2:  Copyright (c) 2008 TrueCrypt Foundation. All rights reserved.
                      3: 
                      4:  Governed by the TrueCrypt License 2.4 the full text of which is contained
                      5:  in the file License.txt included in TrueCrypt binary and source code
                      6:  distribution packages.
                      7: */
                      8: 
                      9: #ifndef TC_HEADER_DRIVER_ENCRYPTED_IO_QUEUE
                     10: #define TC_HEADER_DRIVER_ENCRYPTED_IO_QUEUE
                     11: 
                     12: #include "TCdefs.h"
                     13: #include "Apidrvr.h"
                     14: 
                     15: #define TC_ENC_IO_QUEUE_MAX_FRAGMENT_SIZE (64 * 512)
                     16: 
                     17: typedef struct
                     18: {
                     19:        PDEVICE_OBJECT DeviceObject;
                     20:        
                     21:        CRYPTO_INFO *CryptoInfo;
                     22:        
                     23:        // File-handle-based IO
                     24:        HANDLE HostFileHandle;
                     25:        int64 VirtualDeviceLength;
                     26: 
                     27:        // Filter device
                     28:        BOOL IsFilterDevice;
                     29:        PDEVICE_OBJECT LowerDeviceObject;
                     30:        int64 EncryptedAreaStart;
                     31:        int64 EncryptedAreaEnd;
                     32:        IO_REMOVE_LOCK RemoveLock;
                     33: 
                     34:        // Main tread
                     35:        PKTHREAD MainThread;
                     36:        LIST_ENTRY MainThreadQueue;
                     37:        KSPIN_LOCK MainThreadQueueLock;
                     38:        KEVENT MainThreadQueueNotEmptyEvent;
                     39: 
                     40:        // IO thread
                     41:        PKTHREAD IoThread;
                     42:        LIST_ENTRY IoThreadQueue;
                     43:        KSPIN_LOCK IoThreadQueueLock;
                     44:        KEVENT IoThreadQueueNotEmptyEvent;
                     45: 
                     46:        // Completion thread
                     47:        PKTHREAD CompletionThread;
                     48:        LIST_ENTRY CompletionThreadQueue;
                     49:        KSPIN_LOCK CompletionThreadQueueLock;
                     50:        KEVENT CompletionThreadQueueNotEmptyEvent;
                     51: 
                     52:        byte *FragmentBufferA;
                     53:        byte *FragmentBufferB;
                     54:        KEVENT FragmentBufferAFreeEvent;
                     55:        KEVENT FragmentBufferBFreeEvent;
                     56: 
                     57:        LONG OutstandingIoCount;
                     58:        KEVENT NoOutstandingIoEvent;
                     59:        
                     60:        __int64 TotalBytesRead;
                     61:        __int64 TotalBytesWritten;
                     62: 
                     63:        volatile BOOL ThreadExitRequested;
                     64:        
                     65:        volatile BOOL Suspended;
                     66:        volatile BOOL SuspendPending;
                     67:        volatile BOOL StopPending;
                     68: 
                     69:        KEVENT QueueResumedEvent;
                     70: 
                     71: }  EncryptedIoQueue;
                     72: 
                     73: 
                     74: typedef struct
                     75: {
                     76:        EncryptedIoQueue *Queue;
                     77:        PIRP OriginalIrp;
                     78:        BOOL Write;
                     79:        ULONG OriginalLength;
                     80:        LARGE_INTEGER OriginalOffset;
                     81:        KEVENT IoRequestCompletedEvent;
                     82:        NTSTATUS Status;
                     83:        LIST_ENTRY ListEntry;
                     84:        __int64 DebugOffset;
                     85: } EncryptedIoQueueItem;
                     86: 
                     87: 
                     88: typedef struct
                     89: {
                     90:        EncryptedIoQueueItem *Item;
                     91: 
                     92:        BOOL CompleteOriginalIrp;
                     93:        LARGE_INTEGER Offset;
                     94:        ULONG Length;
                     95:        int64 EncryptedOffset;
                     96:        ULONG EncryptedLength;
                     97:        byte *Data;
                     98:        byte *OrigDataBufferFragment;
                     99: 
                    100:        LIST_ENTRY ListEntry;
                    101:        LIST_ENTRY CompletionListEntry;
                    102: } EncryptedIoRequest;
                    103: 
                    104: 
                    105: NTSTATUS EncryptedIoQueueAddIrp (EncryptedIoQueue *queue, PIRP irp);
                    106: BOOL EncryptedIoQueueIsRunning (EncryptedIoQueue *queue);
                    107: BOOL EncryptedIoQueueIsSuspended (EncryptedIoQueue *queue);
                    108: NTSTATUS EncryptedIoQueueResumeFromHold (EncryptedIoQueue *queue);
1.1.1.2 ! root      109: NTSTATUS EncryptedIoQueueStart (EncryptedIoQueue *queue, PEPROCESS process);
1.1       root      110: NTSTATUS EncryptedIoQueueStop (EncryptedIoQueue *queue);
                    111: NTSTATUS EncryptedIoQueueHoldWhenIdle (EncryptedIoQueue *queue, int64 timeout);
                    112: 
                    113: 
                    114: #endif // TC_HEADER_DRIVER_ENCRYPTED_IO_QUEUE

unix.superglobalmegacorp.com

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