Annotation of truecrypt/driver vxd/iosdcls.inc, revision 1.1.1.1

1.1       root        1: /* IOSDCLS.H -- C-language declarations for IOS drivers
                      2:    Copyright (C) 1995 by Walter Oney
                      3:    All rights reserved
                      4:    */
                      5: 
                      6: #define WANTVXDWRAPS
                      7: #include <basedef.h>
                      8: #include <vmm.h>
                      9:        
                     10: #include <aep.h>
                     11: #include <blockdev.h>
                     12: #include <config.h>
                     13: #include <dcb.h>
                     14: #include <ddb.h>
                     15: #include <drp.h>
                     16: #include <dvt.h>
                     17: #include <ida.h>
                     18: #include <ilb.h>
                     19: #include <ior.h>
                     20: #include <iop.h>
                     21: #include <irs.h>
                     22: #include <isp.h>
                     23: #include <ivt.h>
                     24: #include <sgd.h>
                     25: #include <vrp.h>
                     26: 
                     27: #undef _IRS_H      /* suppress extra IOS_Requestor_Service in VXDWRAPS */
                     28: #include <vxdwraps.h>
                     29: 
                     30: /* Some annoying inconsistencies in typedef spelling: */
                     31: 
                     32: typedef pIOP PIOP;
                     33: typedef pDDB PDDB;
                     34: 
                     35: /*
                     36: IOS.H is useless for C-language users, so do what it should have done:
                     37: */
                     38: 
                     39: #define IOS_DEVICE_ID  0x0010
                     40: 
                     41: #define IOS_Service Declare_Service
                     42: #pragma warning(disable:4003)   /* not enough parameters */
                     43: 
                     44: Begin_Service_Table(IOS)
                     45: 
                     46: IOS_Service(IOS_Get_Version, LOCAL)
                     47: IOS_Service(IOS_BD_Register_Device)
                     48: IOS_Service(IOS_Find_Int13_Drive)
                     49: IOS_Service(IOS_Get_Device_List)
                     50: IOS_Service(IOS_SendCommand)
                     51: IOS_Service(IOS_BD_Command_Complete)
                     52: IOS_Service(IOS_Synchronous_Command)
                     53: IOS_Service(IOS_Register)
                     54: IOS_Service(IOS_Requestor_Service)
                     55: IOS_Service(IOS_Exclusive_Access)
                     56: IOS_Service(IOS_Send_Next_Command)
                     57: IOS_Service(IOS_Set_Async_Time_Out)
                     58: IOS_Service(IOS_Signal_Semaphore_No_Switch)
                     59: IOS_Service(IOSIdleStatus)
                     60: IOS_Service(IOSMapIORSToI24)
                     61: IOS_Service(IOSMapIORSToI21)
                     62: 
                     63: #ifdef INITLOG
                     64: IOS_Service(PrintLog)
                     65: #endif
                     66: 
                     67: End_Service_Table(IOS)
                     68: 
                     69: #pragma warning(default:4003)
                     70: 
                     71: #define IOSEA_LOCK_THREAD (1 << 8)
                     72: 
                     73: #ifndef Not_VxD
                     74: #pragma warning(disable:4035)   /* missing return value */
                     75: #define NAKED __declspec(naked)
                     76: 
                     77: 
                     78: 
                     79: 
                     80: 
                     81: VXDINLINE VOID IOS_SendCommand(PIOR ior, PDCB bdd)
                     82: {
                     83:        _asm mov esi, ior
                     84:        _asm mov edi, bdd
                     85:        VxDCall(IOS_SendCommand)
                     86: }
                     87: 
                     88: VXDINLINE VOID IOS_BD_Command_Complete(PIOR ior)
                     89: {
                     90:        _asm mov esi, ior
                     91:        VxDCall(IOS_BD_Command_Complete)
                     92: }
                     93: 
                     94: 
                     95: 
                     96: VXDINLINE VOID IOS_Register(PDRP drp)
                     97: {
                     98:        _asm push drp
                     99:        VxDCall(IOS_Register)
                    100:        _asm add esp,4
                    101: }
                    102: 
                    103: 
                    104: 
                    105: /*
                    106:  Interfaces to routines via IOS linkage block (ILB).
                    107:  THESE DEFINITIONS ASSUME YOU HAVE AN ILB NAMED "theILB"
                    108:  */
                    109: 
                    110: #ifndef FIELDOFFSET
                    111:        #define FIELDOFFSET(type, field) ((DWORD)(&((type *)0)->field))
                    112: #endif
                    113: 
                    114: extern ILB theILB;
                    115: 
                    116: VXDINLINE PIOP NAKED IlbDequeueIop(PDCB dcb)
                    117: {
                    118:        _asm jmp [theILB.ILB_dequeue_iop]
                    119: }
                    120: 
                    121: VXDINLINE VOID NAKED IlbDprintf(char *ctl, ...)
                    122: {
                    123:        _asm jmp [theILB.ILB_dprintf_rtn]
                    124: }
                    125: 
                    126: VXDINLINE VOID NAKED IlbEnqueueIop(PIOP iop, PDCB dcb)
                    127: {
                    128:        _asm jmp [theILB.ILB_enqueue_iop]
                    129: }
                    130: 
                    131: VXDINLINE DWORD NAKED IlbIntIoCriteria(PIOP iop)
                    132: {
                    133:        _asm jmp [theILB.ILB_int_io_criteria_rtn]
                    134: }
                    135: 
                    136: VXDINLINE VOID IlbInternalRequest(PIOP iop, PDCB dcb, PVOID calldown)
                    137: {
                    138:        _asm pushad   ;added
                    139:        
                    140:        _asm mov edi, iop
                    141:        _asm mov ebx, dcb
                    142:        _asm mov edx, calldown
                    143:         /* (* (VOID (*)()) theILB.ILB_internal_request)(); */
                    144:     _asm call [theILB.ILB_internal_request]
                    145: 
                    146:     _asm popad   ;added
                    147: }
                    148: 
                    149: VXDINLINE DWORD NAKED IlbIoCriteria(PIOR ior)
                    150: {
                    151:        _asm jmp [theILB.ILB_io_criteria_rtn]
                    152: }
                    153: 
                    154: VXDINLINE DWORD NAKED IlbService(PVOID isp)     /* really has (PISP) arg */
                    155: {
                    156:        _asm jmp [theILB.ILB_service_rtn]
                    157: }
                    158: 
                    159: VXDINLINE VOID NAKED IlbWait10thSec()
                    160: {
                    161:        _asm jmp [theILB.ILB_Wait_10th_Sec]
                    162: }
                    163: 
                    164: /*
                    165:  IOS Service Request wrappers. These avoid the baroque nonsense of explicitly
                    166:  filling in the appropriate packet structure. TANSTAAFL, but at least it's
                    167:  less typing in the program!
                    168:  */
                    169: 
                    170: VXDINLINE PVOID IspAllocMem(USHORT size, USHORT type, UCHAR flags)
                    171: {
                    172:        ISP_mem_alloc isp = {{ISP_ALLOC_MEM, 0}, size, 0, type, flags};
                    173:        IlbService(&isp);
                    174:        if (isp.ISP_mem_a_hdr.ISP_result == 0)
                    175:                return (PVOID) isp.ISP_mem_ptr;
                    176:        return NULL;
                    177: }
                    178: 
                    179: VXDINLINE BOOL IspAssociateDcb(PDCB dcb, CHAR drive, UCHAR flags)
                    180: {
                    181:        ISP_dcb_associate isp = {{ISP_ASSOCIATE_DCB, 0}, (ULONG) dcb, drive, flags};
                    182:        IlbService(&isp);
                    183:        return isp.ISP_d_a_hdr.ISP_result == 0;
                    184: }
                    185: 
                    186: VXDINLINE BOOL IspBroadcastAep(PAEP aep)
                    187: {
                    188:        ISP_AEP_BROADCAST isp = {{ISP_BROADCAST_AEP, 0}, aep};
                    189:        IlbService(&isp);
                    190:        return isp.ISP_baep_hdr.ISP_result == 0;
                    191: }
                    192: 
                    193: VXDINLINE PDCB IspCreateDcb(USHORT size)
                    194: {
                    195:        ISP_dcb_create isp = {{ISP_CREATE_DCB, 0}, size};
                    196:        IlbService(&isp);
                    197:        if (isp.ISP_dcb_hdr.ISP_result == 0)
                    198:                return (PDCB) isp.ISP_dcb_ptr;
                    199:        return NULL;
                    200: }
                    201: 
                    202: VXDINLINE PDDB IspCreateDdb(USHORT size, UCHAR flags)
                    203: {
                    204:        ISP_ddb_create isp = {{ISP_CREATE_DDB, 0}, size, 0, flags};
                    205:        IlbService(&isp);
                    206:        if (isp.ISP_ddb_hdr.ISP_result == 0)
                    207:                return (PDDB) isp.ISP_ddb_ptr;
                    208:        return NULL;
                    209: }
                    210: 
                    211: 
                    212: 
                    213: 
                    214: 
                    215: VXDINLINE PIOP IspCreateIop(USHORT size, ULONG delta, UCHAR flags)
                    216: {
                    217:        ISP_IOP_alloc isp = {{ISP_CREATE_IOP, 0}, size, delta, 0, flags};
                    218:        IlbService(&isp);
                    219:        if ( (isp.ISP_i_c_hdr.ISP_result == 0) && (isp.ISP_IOP_ptr!=NULL))
                    220:                 return (PIOP) (isp.ISP_IOP_ptr + delta - FIELDOFFSET(IOP, IOP_ior)); /* ptr is to memory block, NOT the IOP (?!) */
                    221:        return NULL;
                    222: }
                    223: 
                    224: 
                    225: 
                    226: 
                    227: 
                    228: VXDINLINE PIOR IspCreateIor(USHORT size, ULONG delta, UCHAR flags)
                    229: {
                    230:        ISP_IOP_alloc isp = {{ISP_CREATE_IOP, 0}, size, delta, 0, flags};
                    231:        IlbService(&isp);
                    232:        if (isp.ISP_i_c_hdr.ISP_result == 0)
                    233:                 return (PIOR) (isp.ISP_IOP_ptr + delta); /* ptr is to memory block, NOT the IOP (?!) */
                    234:        return NULL;
                    235: }
                    236: 
                    237: VXDINLINE BOOL IspDeallocDdb(PDDB ddb)
                    238: {
                    239:        ISP_DDB_DEALLOC isp = {{ISP_DEALLOC_DDB, 0}, (ULONG) ddb, theILB.ILB_dvt};
                    240:        IlbService(&isp);
                    241:        return isp.ISP_ddb_d_hdr.ISP_result == 0;
                    242: }
                    243: 
                    244: VXDINLINE BOOL IspDeallocMem(PVOID p)
                    245: {
                    246:        ISP_mem_dealloc isp = {{ISP_DEALLOC_MEM, 0}, (ULONG) p};
                    247:        IlbService(&isp);
                    248:        return isp.ISP_mem_da_hdr.ISP_result == 0;
                    249: }
                    250: 
                    251: VXDINLINE BOOL IspDeleteLdmEntry(ULONG drive)
                    252: {
                    253:        ISP_FIND_LDM isp = {{ISP_DELETE_LDM_ENTRY, 0}, drive};
                    254:        IlbService(&isp);
                    255:        return isp.ISP_fldm_hdr.ISP_result == 0;
                    256: }
                    257: 
                    258: VXDINLINE BOOL IspDestroyDcb(PDCB dcb)
                    259: {
                    260:        ISP_DCB_DESTROY isp = {{ISP_DESTROY_DCB, 0}, (ULONG) dcb};
                    261:        IlbService(&isp);
                    262:         return isp.ISP_ddb_d_hdr.ISP_result == 0; /* not a typo! it's really spelled "ddb_d_hdr" instead of "dcb_d_hdr" */
                    263: }
                    264: 
                    265: VXDINLINE BOOL IspDeviceArrived(PDCB dcb, ULONG flags)
                    266: {
                    267:        ISP_DEV_ARRIVED isp = {{ISP_DEVICE_ARRIVED, 0}, dcb, flags};
                    268:        IlbService(&isp);
                    269:        return isp.ISP_d_arrived_hdr.ISP_result == 0;
                    270: }
                    271: 
                    272: VXDINLINE BOOL IspDeviceRemoved(PDCB dcb, ULONG flags)
                    273: {
                    274:        ISP_DEV_REMOVED isp = {{ISP_DEVICE_REMOVED, 0}, dcb, flags};
                    275:        IlbService(&isp);
                    276:        return isp.ISP_d_removed_hdr.ISP_result == 0;
                    277: }
                    278: 
                    279: VXDINLINE BOOL IspDisassociateDcb(ULONG drive)
                    280: {
                    281:         /*    {{function     result}  ULONG}   */
                    282:         ISP_DISASSOC_DCB isp = {{ISP_DISASSOCIATE_DCB, 0}, drive};
                    283:        IlbService(&isp);
                    284:        return isp.ISP_dis_dcb_hdr.ISP_result == 0;
                    285: }
                    286: 
                    287: VXDINLINE UCHAR IspDriveLetterPick(PDCB dcb, UCHAR flags)
                    288: {
                    289:        ISP_pick_drive_letter isp = {{ISP_DRIVE_LETTER_PICK, 0}, dcb, {0, 0}, flags};
                    290:        IlbService(&isp);
                    291:        if (isp.ISP_p_d_l_hdr.ISP_result == 0)
                    292:                return isp.ISP_p_d_l_letter[0];
                    293:        return 0;
                    294: }
                    295: 
                    296: VXDINLINE UCHAR IspDriveLetterPickPref(PDCB dcb, UCHAR flags,UCHAR preffered)
                    297: {
                    298:        
                    299:        ISP_pick_drive_letter isp = {{ISP_DRIVE_LETTER_PICK, 0}, dcb, {0, 0}, flags};
                    300:         isp.ISP_p_d_l_letter[0]=preffered; /* +'A'; */
                    301:         isp.ISP_p_d_l_letter[1]=preffered+1; /* 'A'; */
                    302:        IlbService(&isp);
                    303:        if (isp.ISP_p_d_l_hdr.ISP_result == 0)
                    304:                return isp.ISP_p_d_l_letter[0];
                    305:        return 255;
                    306: }
                    307: 
                    308: 
                    309: 
                    310: 
                    311: VXDINLINE PVOID IspFindLdmEntry(ULONG drive)
                    312: {
                    313:        ISP_FIND_LDM isp = {{ISP_DELETE_LDM_ENTRY, 0}, drive};
                    314:        if (isp.ISP_fldm_hdr.ISP_result == 0)
                    315:                return isp.ISP_fldm_pldm;
                    316:        return NULL;
                    317: }
                    318: 
                    319: VXDINLINE PDCB IspGetDcb(ULONG drive)
                    320: {
                    321:        ISP_dcb_get isp = {{ISP_GET_DCB, 0}, 0, drive};
                    322:        IlbService(&isp);
                    323:        if (isp.ISP_g_d_hdr.ISP_result == 0)
                    324:                return (PDCB) isp.ISP_g_d_dcb;
                    325:        return NULL;
                    326: }
                    327: 
                    328: VXDINLINE PDCB IspGetFirstNextDcb(PDCB dcb, BYTE type)
                    329: {
                    330:        ISP_GET_FRST_NXT_DCB isp = {{ISP_GET_FIRST_NEXT_DCB, 0}, (ULONG) dcb, 0, type};
                    331:        IlbService(&isp);
                    332:        if (isp.ISP_gfnd_hdr.ISP_result == 0)
                    333:                return (PDCB) isp.ISP_gfnd_found_dcb;
                    334:        return NULL;
                    335: }
                    336: 
                    337: VXDINLINE BOOL IspInsertCalldown(PDCB dcb, VOID (*calldown)(PIOP), PDDB ddb, USHORT expand, DWORD demand, UCHAR loadgroup)
                    338: {
                    339:        ISP_calldown_insert isp = {{ISP_INSERT_CALLDOWN, 0}, (ULONG) dcb, (PVOID) calldown, (ULONG) ddb, expand, demand, loadgroup};
                    340:        IlbService(&isp);
                    341:        return isp.ISP_i_cd_hdr.ISP_result == 0;
                    342: }
                    343: 
                    344: VXDINLINE ULONG IspQueryMatchingDcbs(PDCB dcb)
                    345: {
                    346:        ISP_QUERY_MATCH isp = {{ISP_QUERY_MATCHING_DCBS, 0}, dcb};
                    347:        IlbService(&isp);
                    348:        if (isp.ISP_q_match_hdr.ISP_result == 0)
                    349:                return isp.ISP_q_match_drives;
                    350:        return 0;
                    351: }
                    352: 
                    353: VXDINLINE BOOL IspRegistryRead(PDCB dcb, char* keyname, PDWORD ptype, PDWORD psize, PVOID buffer)
                    354: {
                    355:        ISP_read_registry isp = {{ISP_REGISTRY_READ, 0}, dcb, keyname, ptype, psize, buffer};
                    356:        IlbService(&isp);
                    357:        return isp.ISP_r_r_hdr.ISP_result == 0;
                    358: }
                    359: 
                    360: VXDINLINE BOOL IspQueryRemoveDcb(PDCB dcb, ULONG flags)
                    361: {
                    362:        ISP_QUERY_REMOVE isp = {{ISP_QUERY_REMOVE_DCB, 0}, dcb, flags};
                    363:        IlbService(&isp);
                    364:        return isp.ISP_q_remove_hdr.ISP_result == 0;
                    365: }
                    366: 
                    367: 
                    368: 
                    369: VXDINLINE BOOL SaveClientState(CLIENT_STRUCT * s)
                    370: {
                    371: 
                    372: 
                    373:        _asm push edi
                    374:        _asm mov edi,[s]
                    375: 
                    376:        VxDCall (Save_Client_State)
                    377: 
                    378:        _asm pop edi
                    379: 
                    380:        return FALSE;
                    381: }
                    382: 
                    383: 
                    384: 
                    385: VXDINLINE BOOL RestoreClientState(CLIENT_STRUCT * s)
                    386: {
                    387: 
                    388: 
                    389:        _asm push esi
                    390:        _asm mov esi,[s]
                    391: 
                    392:        VxDCall (Restore_Client_State)
                    393: 
                    394:        _asm pop esi
                    395: 
                    396:        return FALSE;
                    397: }
                    398: 
                    399: 
                    400: #pragma warning(default:4035)
                    401: #endif /* Not_VxD */
                    402: 

unix.superglobalmegacorp.com

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