Annotation of truecrypt/driver vxd/queue.c, revision 1.1.1.1

1.1       root        1: /* Copyright (C) 2004 TrueCrypt Team, truecrypt.org
                      2:    This product uses components written by Paul Le Roux <[email protected]> */
                      3: 
                      4: #include "TCdefs.h"
                      5: 
                      6: #pragma VxD_LOCKED_CODE_SEG
                      7: #pragma VxD_LOCKED_DATA_SEG
                      8: 
                      9: #include "crypto.h"
                     10: #include "apidrvr.h"
                     11: #include "tc9x.h"
                     12: #include "queue.h"
                     13: 
                     14: #include "ifshook.h"
                     15: 
                     16: extern cryptvol *cryptvols[];
                     17: 
                     18: PIOP queuedIOP = 0;            /* Currently or to be processed iop ptr */
                     19: 
                     20: void
                     21: DeQueueIOP (void)
                     22: {
                     23:        PIOP iop;
                     24:        PIOP iop2;
                     25:        PDCB dcb;
                     26:        cryptvol *cv;
                     27: 
                     28:        iop = queuedIOP;
                     29: 
                     30:        if (!queuedIOP)
                     31:                return;         /* may happen in terminate thread (that this
                     32:                                   runs on...) */
                     33: 
                     34:        iop = queuedIOP;
                     35: 
                     36:        while (1)
                     37:        {
                     38:                dcb = (PDCB) iop->IOP_physical_dcb;
                     39:                cv = (cryptvol *) dcb->DCB_Port_Specific;
                     40: 
                     41:                /* Note that in TC, it isn't necessary to clear IOR_next
                     42:                   Nothing further is called using this IOP */
                     43: 
                     44:                cryptproc (iop, cv);
                     45: 
                     46:                iop2 = (PIOP) iop->IOP_ior.IOR_next;
                     47:                queuedIOP = iop2;
                     48: 
                     49:                ior.IOR_status = 0;     /* IORS_CMD_IN_PROGRESS;         */
                     50: 
                     51:                dcb->DCB_cmn.DCB_device_flags &= ~DCB_DEV_IO_ACTIVE;
                     52:                DoCallBack (iop);
                     53: 
                     54:                if (!queuedIOP)
                     55:                        break;
                     56: 
                     57:                iop = queuedIOP;
                     58:        }
                     59: }
                     60: 
                     61: void
                     62: QueueMyIop (PIOP iop)
                     63: {
                     64:        PIOP tempiop = queuedIOP;
                     65:        PIOP nextiop = 0;
                     66: 
                     67:        iop->IOP_ior.IOR_next = 0;      /* make sure */
                     68: 
                     69:        if (tempiop)
                     70:        {
                     71:                /* Add the current iop to the head of list */
                     72:                while (nextiop = (PIOP) tempiop->IOP_ior.IOR_next)
                     73:                        tempiop = nextiop;
                     74:                tempiop->IOP_ior.IOR_next = (unsigned long) iop;
                     75:        }
                     76:        else
                     77:        {
                     78:                /* No current iop's so wake the thread up */
                     79:                queuedIOP = iop;
                     80:                wakethread ();
                     81:        }
                     82: }

unix.superglobalmegacorp.com

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