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

1.1       root        1: /* IFSMGR.H -- Declarations for Installable File System Manager Calls
                      2:  Copyright (C) 1996 by Walter Oney
                      3:  All rights reserved
                      4: 
                      5:  Wrapper Modifications and extentions by Aman.
                      6:  */
                      7: 
                      8: #include "ifs.h"       /* Win 95 DDk one seems ok, but Oney has his own */
                      9: #define IFSMGRVERSION 0x22
                     10: 
                     11: /*
                     12:  IFSMgr services
                     13:  */
                     14: 
                     15: #ifndef IFSMgr_DEVICE_ID
                     16: #define IFSMgr_DEVICE_ID 0x0040
                     17: #endif
                     18: 
                     19: #ifndef Not_VxD
                     20: 
                     21: #undef IFSMgr_Service
                     22: #define IFSMgr_Service Declare_Service
                     23: #pragma warning(disable:4003)  /* not enough parameters */
                     24: #include <vmm.h>
                     25: 
                     26: #include <vtd.h>
                     27: Begin_Service_Table(IFSMgr)
                     28: 
                     29: IFSMgr_Service(IFSMgr_Get_Version)
                     30: IFSMgr_Service(IFSMgr_RegisterMount)
                     31: IFSMgr_Service(IFSMgr_RegisterNet)
                     32: IFSMgr_Service(IFSMgr_RegisterMailSlot)
                     33: IFSMgr_Service(IFSMgr_Attach)
                     34: IFSMgr_Service(IFSMgr_Detach)
                     35: IFSMgr_Service(IFSMgr_Get_NetTime)
                     36: IFSMgr_Service(IFSMgr_Get_DOSTime)
                     37: IFSMgr_Service(IFSMgr_SetupConnection)
                     38: IFSMgr_Service(IFSMgr_DerefConnection)
                     39: IFSMgr_Service(IFSMgr_ServerDOSCall)
                     40: IFSMgr_Service(IFSMgr_CompleteAsync)
                     41: IFSMgr_Service(IFSMgr_RegisterHeap)
                     42: IFSMgr_Service(IFSMgr_GetHeap)
                     43: IFSMgr_Service(IFSMgr_RetHeap)
                     44: IFSMgr_Service(IFSMgr_CheckHeap)
                     45: IFSMgr_Service(IFSMgr_CheckHeapItem)
                     46: IFSMgr_Service(IFSMgr_FillHeapSpare)
                     47: IFSMgr_Service(IFSMgr_Block)
                     48: IFSMgr_Service(IFSMgr_Wakeup)
                     49: IFSMgr_Service(IFSMgr_Yield)
                     50: IFSMgr_Service(IFSMgr_SchedEvent)
                     51: IFSMgr_Service(IFSMgr_QueueEvent)
                     52: IFSMgr_Service(IFSMgr_KillEvent)
                     53: IFSMgr_Service(IFSMgr_FreeIOReq)
                     54: IFSMgr_Service(IFSMgr_MakeMailSlot)
                     55: IFSMgr_Service(IFSMgr_DeleteMailSlot)
                     56: IFSMgr_Service(IFSMgr_WriteMailSlot)
                     57: IFSMgr_Service(IFSMgr_PopUp)
                     58: IFSMgr_Service(IFSMgr_printf)
                     59: IFSMgr_Service(IFSMgr_AssertFailed)
                     60: IFSMgr_Service(IFSMgr_LogEntry)
                     61: IFSMgr_Service(IFSMgr_DebugMenu)
                     62: IFSMgr_Service(IFSMgr_DebugVars)
                     63: IFSMgr_Service(IFSMgr_GetDebugString)
                     64: IFSMgr_Service(IFSMgr_GetDebugHexNum)
                     65: IFSMgr_Service(IFSMgr_NetFunction)
                     66: IFSMgr_Service(IFSMgr_DoDelAllUses)
                     67: IFSMgr_Service(IFSMgr_SetErrString)
                     68: IFSMgr_Service(IFSMgr_GetErrString)
                     69: IFSMgr_Service(IFSMgr_SetReqHook)
                     70: IFSMgr_Service(IFSMgr_SetPathHook)
                     71: IFSMgr_Service(IFSMgr_UseAdd)
                     72: IFSMgr_Service(IFSMgr_UseDel)
                     73: IFSMgr_Service(IFSMgr_InitUseAdd)
                     74: IFSMgr_Service(IFSMgr_ChangeDir)
                     75: IFSMgr_Service(IFSMgr_DelAllUses)
                     76: IFSMgr_Service(IFSMgr_CDROM_Attach)
                     77: IFSMgr_Service(IFSMgr_CDROM_Detach)
                     78: IFSMgr_Service(IFSMgr_Win32DupHandle)
                     79: IFSMgr_Service(IFSMgr_Ring0_FileIO)
                     80: IFSMgr_Service(IFSMgr_Win32_Get_Ring0_Handle)
                     81: IFSMgr_Service(IFSMgr_Get_Drive_Info)
                     82: IFSMgr_Service(IFSMgr_Ring0GetDriveInfo)
                     83: IFSMgr_Service(IFSMgr_BlockNoEvents)
                     84: IFSMgr_Service(IFSMgr_NetToDosTime)
                     85: IFSMgr_Service(IFSMgr_DosToNetTime)
                     86: IFSMgr_Service(IFSMgr_DosToWin32Time)
                     87: IFSMgr_Service(IFSMgr_Win32ToDosTime)
                     88: IFSMgr_Service(IFSMgr_NetToWin32Time)
                     89: IFSMgr_Service(IFSMgr_Win32ToNetTime)
                     90: IFSMgr_Service(IFSMgr_MetaMatch)
                     91: IFSMgr_Service(IFSMgr_TransMatch)
                     92: IFSMgr_Service(IFSMgr_CallProvider)
                     93: IFSMgr_Service(UniToBCS)
                     94: IFSMgr_Service(UniToBCSPath)
                     95: IFSMgr_Service(BCSToUni)
                     96: IFSMgr_Service(UniToUpper)
                     97: IFSMgr_Service(UniCharToOEM)
                     98: IFSMgr_Service(CreateBasis)
                     99: IFSMgr_Service(MatchBasisName)
                    100: IFSMgr_Service(AppendBasisTail)
                    101: IFSMgr_Service(FcbToShort)
                    102: IFSMgr_Service(ShortToFcb)
                    103: IFSMgr_Service(IFSMgr_ParsePath)
                    104: IFSMgr_Service(Query_PhysLock)
                    105: IFSMgr_Service(_VolFlush)
                    106: IFSMgr_Service(NotifyVolumeArrival)
                    107: IFSMgr_Service(NotifyVolumeRemoval)
                    108: IFSMgr_Service(QueryVolumeRemoval)
                    109: IFSMgr_Service(IFSMgr_FSDUnmountCFSD)
                    110: IFSMgr_Service(IFSMgr_GetConversionTablePtrs)
                    111: IFSMgr_Service(IFSMgr_CheckAccessConflict)
                    112: IFSMgr_Service(IFSMgr_LockFile)
                    113: IFSMgr_Service(IFSMgr_UnlockFile)
                    114: IFSMgr_Service(IFSMgr_RemoveLocks)
                    115: IFSMgr_Service(IFSMgr_CheckLocks)
                    116: IFSMgr_Service(IFSMgr_CountLocks)
                    117: IFSMgr_Service(IFSMgr_ReassignLockFileInst)
                    118: IFSMgr_Service(IFSMgr_UnassignLockList)
                    119: IFSMgr_Service(IFSMgr_MountChildVolume)
                    120: IFSMgr_Service(IFSMgr_UnmountChildVolume)
                    121: IFSMgr_Service(IFSMgr_SwapDrives)
                    122: IFSMgr_Service(IFSMgr_FSDMapFHtoIOREQ)
                    123: IFSMgr_Service(IFSMgr_FSDParsePath)
                    124: IFSMgr_Service(IFSMgr_FSDAttachSFT)
                    125: IFSMgr_Service(IFSMgr_GetTimeZoneBias)
                    126: IFSMgr_Service(IFSMgr_PNPEvent)
                    127: IFSMgr_Service(IFSMgr_RegisterCFSD)
                    128: IFSMgr_Service(IFSMgr_Win32MapExtendedHandleToSFT)
                    129: IFSMgr_Service(IFSMgr_DbgSetFileHandleLimit)
                    130: IFSMgr_Service(IFSMgr_Win32MapSFTToExtendedHandle)
                    131: IFSMgr_Service(IFSMgr_FSDGetCurrentDrive)
                    132: IFSMgr_Service(IFSMgr_InstallFileSystemApiHook)
                    133: IFSMgr_Service(IFSMgr_RemoveFileSystemApiHook)
                    134: IFSMgr_Service(IFSMgr_RunScheduledEvents)
                    135: IFSMgr_Service(IFSMgr_CheckDelResource)
                    136: IFSMgr_Service(IFSMgr_Win32GetVMCurdir)
                    137: IFSMgr_Service(IFSMgr_SetupFailedConnection)
                    138: IFSMgr_Service(_GetMappedErr)
                    139: IFSMgr_Service(ShortToLossyFcb)
                    140: IFSMgr_Service(IFSMgr_GetLockState)
                    141: IFSMgr_Service(BcsToBcs)
                    142: IFSMgr_Service(IFSMgr_SetLoopback)
                    143: IFSMgr_Service(IFSMgr_ClearLoopback)
                    144: IFSMgr_Service(IFSMgr_ParseOneElement)
                    145: IFSMgr_Service(BcsToBcsUpper)
                    146: 
                    147: End_Service_Table(IFSMgr)
                    148: 
                    149: #pragma warning(default:4003)
                    150: 
                    151: #endif /* Not_VxD */
                    152: 
                    153: /*
                    154:  Inline service function definitions:
                    155: */
                    156: 
                    157: #ifndef Not_VxD
                    158: #pragma warning(disable:4035)  /* missing return value */
                    159: 
                    160: #undef NAKED
                    161: #define NAKED __declspec(naked)
                    162: 
                    163: DWORD VXDINLINE IFSMgr_Get_Version()
                    164:        {
                    165:        VxDCall(IFSMgr_Get_Version)
                    166:        _asm jnc okay
                    167:        _asm xor eax, eax
                    168:        _asm okay:
                    169:        }
                    170: 
                    171: #define NORMAL_FSD 0
                    172: #define DEFAULT_FSD 1
                    173: 
                    174: int VXDINLINE NAKED IFSMgr_RegisterCFSD(pIFSFunc fcn, UINT version, string_t* ppDeviceNames)
                    175:        {
                    176:        VxDJmp(IFSMgr_RegisterCFSD)
                    177:        }
                    178: 
                    179: /* Command codes in ir_flags for calls to mailslot procedure: */
                    180: 
                    181: #define MSLOT_CREATE 0
                    182: #define MSLOT_DELETE 1
                    183: #define MSLOT_WRITE 2
                    184: 
                    185: int VXDINLINE NAKED IFSMgr_RegisterMailSlot(pIFSFunc fcn, UINT version)
                    186:        {
                    187:        VxDJmp(IFSMgr_RegisterMailSlot)
                    188:        }
                    189: 
                    190: int VXDINLINE NAKED IFSMgr_RegisterMount(pIFSFunc fcn, UINT version, UINT defoption)
                    191:        {
                    192:        VxDJmp(IFSMgr_RegisterMount)
                    193:        }
                    194: 
                    195: int VXDINLINE NAKED IFSMgr_RegisterNet(pIFSFunc fcn, UINT version, UINT netid)
                    196:        {
                    197:        VxDJmp(IFSMgr_RegisterNet)
                    198:        }
                    199: 
                    200: #define DEBUG_FENCE_ON 1
                    201: 
                    202: #ifdef DEBUG
                    203: VOID VXDINLINE NAKED IFSMgr_RegisterHeap(pIFSFunc fcn, UINT flag)
                    204:        {
                    205:        VxDJmp(IFSMgr_RegisterHeap)
                    206:        }
                    207: #else
                    208: #define IFSMgr_RegisterHeapUser(a1,a2)
                    209: #endif
                    210: 
                    211: PVOID VXDINLINE NAKED IFSMgr_GetHeap(UINT size)
                    212:        {
                    213:        VxDJmp(IFSMgr_GetHeap)
                    214:        }
                    215: 
                    216: VOID VXDINLINE NAKED IFSMgr_RetHeap(PVOID p)
                    217:        {
                    218:        VxDJmp(IFSMgr_RetHeap)
                    219:        }
                    220: 
                    221: #ifdef DEBUG
                    222: #define CHECKHEAP(p) IFSMgr_CheckHeap(p, __FILE__, __LINE__);
                    223: #define CHECKHEAPITEM(p) IFSMgr_CheckHeapItem(p, __FILE__, __LINE__);
                    224: int VXDINLINE NAKED IFSMgr_CheckHeap(PVOID pmem, char* filename, UINT line)
                    225:        {
                    226:        VxDJmp(IFSMgr_CheckHeap)
                    227:        }
                    228: int VXDINLINE NAKED IFSMgr_CheckHeapItem(PVOID pmem, char* filename, UINT line)
                    229:        {
                    230:        VxDJmp(IFSMgr_CheckHeapItem)
                    231:        }
                    232: #else
                    233: #define CHECKHEAP(p)
                    234: #define CHECKHEAPITEM(p)
                    235: #define IFSMgr_CheckHeap(a1, a2, a3)
                    236: #define IFSMgr_CheckHeapItem(a1, a2, a3)
                    237: #endif
                    238: 
                    239: VOID VXDINLINE NAKED IFSMgr_FillHeapSpare()
                    240:        {
                    241:        VxDJmp(IFSMgr_FillHeapSpare)
                    242:        }
                    243: 
                    244: typedef DWORD nettime_t;               /* # seconds since 1/1/1970 */
                    245: 
                    246: typedef struct nettimex_t
                    247:        {
                    248:        DWORD dwSeconds;                        /* # seconds since 1/1/1970 */
                    249:        DWORD dwMilliseconds;           /* milliseconds in last second */
                    250:        } nettimex_t;
                    251: 
                    252: typedef struct dostimex_t
                    253:        {
                    254:        WORD wTime;                                     /* time in DOS format */
                    255:        WORD wDate;                                     /* date in DOS format */
                    256:        DWORD dwMilliseconds;           /* # milliseconds in last 2-sec interval */
                    257:        } dostimex_t;
                    258: 
                    259: nettimex_t VXDINLINE NAKED IFSMgr_Get_NetTimeEx()
                    260:        {
                    261:        VxDJmp(IFSMgr_Get_NetTime)
                    262:        }
                    263: 
                    264: nettime_t VXDINLINE NAKED IFSMgr_Get_NetTime()
                    265:        {
                    266:        VxDJmp(IFSMgr_Get_NetTime)
                    267:        }
                    268: 
                    269: dostimex_t VXDINLINE NAKED IFSMgr_Get_DOSTimeEx()
                    270:        {
                    271:        VxDJmp(IFSMgr_Get_DOSTime)
                    272:        }
                    273: 
                    274: typedef dos_time dostime_t;
                    275: 
                    276: dostime_t VXDINLINE NAKED IFSMgr_Get_DOSTime()
                    277:        {
                    278:        VxDJmp(IFSMgr_Get_DOSTime)
                    279:        }
                    280: 
                    281: dostime_t VXDINLINE NAKED IFSMgr_NetToDosTime(DWORD nettime)
                    282:        {
                    283:        VxDJmp(IFSMgr_NetToDosTime)
                    284:        }
                    285: 
                    286: DWORD VXDINLINE NAKED IFSMgr_DosToNetTime(dostime_t dostime)
                    287:        {
                    288:        VxDJmp(IFSMgr_DosToNetTime)
                    289:        }
                    290: 
                    291: _FILETIME VXDINLINE NAKED IFSMgr_DosToWin32Time(dostime_t dostime)
                    292:        {
                    293:        VxDJmp(IFSMgr_DosToWin32Time)
                    294:        }
                    295: 
                    296: dostime_t VXDINLINE NAKED IFSMgr_Win32ToDosTime(_FILETIME win32time)
                    297:        {
                    298:        VxDJmp(IFSMgr_Win32ToDosTime)
                    299:        }
                    300: 
                    301: _FILETIME VXDINLINE NAKED IFSMgr_NetToWin32Time(DWORD nettime)
                    302:        {
                    303:        VxDJmp(IFSMgr_NetToWin32Time)
                    304:        }
                    305: 
                    306: DWORD VXDINLINE NAKED IFSMgr_Win32ToNetTime(_FILETIME win32time)
                    307:        {
                    308:        VxDJmp(IFSMgr_Win32ToNetTime)
                    309:        }
                    310: 
                    311: int VXDINLINE NAKED IFSMgr_GetTimeZoneBias()
                    312:        {
                    313:        VxDJmp(IFSMgr_GetTimeZoneBias)
                    314:        }
                    315: 
                    316: VOID VXDINLINE NAKED IFSMgr_SetupConnection(pioreq pir, UINT resopt, UINT restype)
                    317:        {
                    318:        VxDJmp(IFSMgr_SetupConnection)
                    319:        }
                    320: 
                    321: VOID VXDINLINE NAKED IFSMgr_DerefConnection(pioreq pir)
                    322:        {
                    323:        VxDJmp(IFSMgr_DerefConnection)
                    324:        }
                    325: 
                    326: typedef union tagDPL32
                    327:        {
                    328:        struct DPL32_DW 
                    329:                {
                    330:                DWORD DPL32_EAX;
                    331:                DWORD DPL32_EBX;
                    332:                DWORD DPL32_ECX;
                    333:                DWORD DPL32_EDX;
                    334:                DWORD DPL32_ESI;
                    335:                DWORD DPL32_EDI;
                    336:                DWORD DPL32_EBP;
                    337:                WORD  DPL32_UID;
                    338:                WORD  DPL32_PID;
                    339:                DWORD DPL32_DTA;
                    340:                BYTE  DPL32_FLAGS;
                    341:                BYTE  DPL32_PAD[3];
                    342:                };
                    343:        struct DPL32_W
                    344:                {
                    345:                WORD DPL32_AX, junk1;
                    346:                WORD DPL32_BX, junk2;
                    347:                WORD DPL32_CX, junk3;
                    348:                WORD DPL32_DX, junk4;
                    349:                WORD DPL32_SI, junk5;
                    350:                WORD DPL32_DI, junk6;
                    351:                WORD DPL32_BP, junk7;
                    352:                DWORD DPL32_PID32;
                    353:                };
                    354:        struct DPL32_B
                    355:                {
                    356:                BYTE DPL32_AL, APL32_AH;
                    357:                WORD junk8;
                    358:                BYTE DPL32_BL, APL32_BH;
                    359:                WORD junk9;
                    360:                BYTE DPL32_CL, APL32_CH;
                    361:                WORD junk10;
                    362:                BYTE DPL32_DL, APL32_DH;
                    363:                WORD junk11;
                    364:                };
                    365:        } DPL32, *PDPL32;
                    366: 
                    367: #define DPL32_USE_MASK         0x03
                    368: #define DPL32_USE_ANSI         0
                    369: #define DPL32_USE_OEM          1
                    370: #define DPL32_USE_UNICODE      2
                    371: 
                    372: #define DPL32_8_3_MATCHING     0x04
                    373: 
                    374: BOOL VXDINLINE IFSMgr_ServerDOSCall(HVM hVM, UINT fcn, PDPL32 dpl, PCRS pRegs)
                    375:        {
                    376:        _asm push ebp
                    377:        _asm mov ebx, hVM
                    378:        _asm mov ecx, fcn
                    379:        _asm mov esi, dpl
                    380:        _asm mov ebp, pRegs
                    381:        VxDCall(IFSMgr_ServerDOSCall)
                    382:        _asm pop ebp
                    383:        _asm cmc
                    384:        _asm sbb eax, eax
                    385:        }
                    386: 
                    387: typedef int (_cdecl *pMSFunc)(PVOID pdata, UINT len, BYTE lana);
                    388: 
                    389: int VXDINLINE NAKED IFSMgr_MakeMailSlot(pMSFunc fcn, path_t pmsname, PDWORD pmshand)
                    390:        {
                    391:        VxDJmp(IFSMgr_MakeMailSlot)
                    392:        }
                    393: 
                    394: int VXDINLINE NAKED IFSMgr_DeleteMailSlot(DWORD mshand)
                    395:        {
                    396:        VxDJmp(IFSMgr_DeleteMailSlot)
                    397:        }
                    398: 
                    399: int VXDINLINE NAKED IFSMgr_WriteMailSlot(path_t pmsname, char* pdata, WORD len, BYTE lana, string_t rname, PVOID xtra)
                    400:        {
                    401:        VxDJmp(IFSMgr_WriteMailSlot)
                    402:        }
                    403: 
                    404: int VXDINLINE NAKED IFSMgr_SetErrString(char* errstr, UINT errorcode, UINT table)
                    405:        {
                    406:        VxDJmp(IFSMgr_SetErrString)
                    407:        }
                    408: 
                    409: VXDINLINE NAKED PCHAR IFSMgr_GetErrString(UINT errorcode, UINT table)
                    410:        {
                    411:        VxDJmp(IFSMgr_GetErrString)
                    412:        }
                    413: 
                    414: typedef void (__cdecl *PPREAMBLE)(); 
                    415: 
                    416: VXDINLINE NAKED PPREAMBLE IFSMgr_SetReqHook(UINT request, PPREAMBLE preamble)
                    417:        {
                    418:        VxDJmp(IFSMgr_SetReqHook)
                    419:        }
                    420: 
                    421: typedef void (__cdecl *PPATHCHECKER)();
                    422: 
                    423: VXDINLINE NAKED PPATHCHECKER IFSMgr_SetPathHook(PPATHCHECKER fcn)
                    424:        {
                    425:        VxDJmp(IFSMgr_SetPathHook)
                    426:        }
                    427: 
                    428: #endif /* Not_VxD */
                    429: 
                    430: typedef struct _LM_GUID {
                    431:        WORD                    guid_uid;               /* LM10 style user id */
                    432:        DWORD                   guid_serial;    /* user record serial number */
                    433:        BYTE                    guid_rsvd[10];  /* pad to 16 bytes */
                    434:        } _LM_GUID;
                    435: 
                    436: typedef struct use_info_2 {
                    437:        char            ui2_local[9];
                    438:        char            ui2_pad_1;
                    439:        char*                   ui2_remote;
                    440:        char*                   ui2_password;
                    441:        unsigned short  ui2_status;         
                    442:        short           ui2_asg_type;       
                    443:        unsigned short  ui2_refcount;       
                    444:        unsigned short  ui2_usecount;       
                    445:        unsigned short  ui2_res_type;       
                    446:        unsigned short  ui2_flags;          
                    447:        unsigned short  ui2_usrclass;       
                    448:        void*               ui2_dirname;        
                    449:        struct _LM_GUID ui2_dfs_id;         
                    450:        } use_info_2, *puse_info_2;
                    451: 
                    452: #ifndef Not_VxD
                    453: 
                    454: int VXDINLINE NAKED IFSMgr_UseAdd(pioreq pir, int proId, netuse_info* pinfo)
                    455:        {
                    456:        VxDJmp(IFSMgr_UseAdd)
                    457:        }
                    458: 
                    459: int VXDINLINE NAKED IFSMgr_InitUseAdd(puse_info_2 pui2, int proId, int lana)
                    460:        {
                    461:        VxDJmp(IFSMgr_InitUseAdd)
                    462:        }
                    463: 
                    464: int VXDINLINE NAKED IFSMgr_UseDel(pioreq pir, int proId, netuse_info* pinfo)
                    465:        {
                    466:        VxDJmp(IFSMgr_UseDel)
                    467:        }
                    468: 
                    469: int VXDINLINE NAKED IFSMgr_DelAllUses(int proId, int force)
                    470:        {
                    471:        VxDJmp(IFSMgr_DelAllUses)
                    472:        }
                    473: 
                    474: VOID VXDINLINE NAKED IFSMgr_DoDelAllUses(pioreq pir)
                    475:        {
                    476:        VxDJmp(IFSMgr_DoDelAllUses)
                    477:        }
                    478: 
                    479: #if 0
                    480: int VXDLINLINE NAKED IFSMgr_FSDMapFHtoIOREQ(pioreq pir, WORD doshandle)
                    481:        {
                    482:        VxDJmp(IFSMgr_FSDMapFHtoIOREQ)
                    483:        }
                    484: #endif
                    485: 
                    486: int VXDINLINE NAKED IFSMgr_CheckDelResource(PVOID rh, int force, BOOL fDelFlag)
                    487:        {
                    488:        VxDJmp(IFSMgr_CheckDelResource)
                    489:        }
                    490: 
                    491: int VXDINLINE NAKED IFSMgr_SetupFailedConnection(pioreq pir, PDWORD pProId)
                    492:        {
                    493:        VxDJmp(IFSMgr_SetupFailedConnection)
                    494:        }
                    495: 
                    496: int VXDINLINE NAKED IFSMgr_SetLoopback(char* pszUNCPath, char* pszLocalPath)
                    497:        {
                    498:        VxDJmp(IFSMgr_SetLoopback)
                    499:        }
                    500: 
                    501: int VXDINLINE NAKED IFSMgr_ClearLoopback(char* pszUNCPath)
                    502:        {
                    503:        VxDJmp(IFSMgr_ClearLoopback)
                    504:        }
                    505: 
                    506: VOID VXDINLINE NAKED IFSMgr_Block(DWORD key)
                    507:        {
                    508:        VxDJmp(IFSMgr_Block)
                    509:        }
                    510: 
                    511: VOID VXDINLINE NAKED IFSMgr_BlockNoEvents(DWORD key)
                    512:        {
                    513:        VxDJmp(IFSMgr_BlockNoEvents)
                    514:        }
                    515: 
                    516: VOID VXDINLINE NAKED IFSMgr_Wakeup(DWORD key)
                    517:        {
                    518:        VxDJmp(IFSMgr_Wakeup)
                    519:        }
                    520: 
                    521: VOID VXDINLINE NAKED IFSMgr_Yield()
                    522:        {
                    523:        VxDJmp(IFSMgr_Yield)
                    524:        }
                    525: 
                    526: VOID VXDINLINE NAKED IFSMgr_SchedEvent(pevent pev, DWORD time)
                    527:        {
                    528:        VxDJmp(IFSMgr_SchedEvent)
                    529:        }
                    530: 
                    531: VOID VXDINLINE NAKED IFSMgr_QueueEvent(pevent pev)
                    532:        {
                    533:        VxDJmp(IFSMgr_QueueEvent)
                    534:        }
                    535: 
                    536: VOID VXDINLINE NAKED IFSMgr_KillEvent(pevent pev)
                    537:        {
                    538:        VxDJmp(IFSMgr_KillEvent)
                    539:        }
                    540: 
                    541: VOID VXDINLINE NAKED IFSMgr_FreeIOReq(pioreq pir)
                    542:        {
                    543:        VxDJmp(IFSMgr_FreeIOReq)
                    544:        }
                    545: 
                    546: VOID VXDINLINE NAKED IFSMgr_RunScheduledEvents()
                    547:        {
                    548:        VxDJmp(IFSMgr_RunScheduledEvents)
                    549:        }
                    550: 
                    551: UINT VXDINLINE NAKED IFSMgr_MetaMatch(string_t pUniPattern, string_t pUniName, int matchSem)
                    552:        {
                    553:        VxDJmp(IFSMgr_MetaMatch)
                    554:        }
                    555: 
                    556: int VXDINLINE NAKED IFSMgr_TransMatch(pioreq pir, srch_entry* pse, string_t pattern, _WIN32_FIND_DATA* pFindBuf)
                    557:        {
                    558:        VxDJmp(IFSMgr_TransMatch)
                    559:        }
                    560: 
                    561: UINT VXDINLINE NAKED UniToBCSPath(PBYTE pBCSPath, PathElement* pUniPath, UINT maxLength, int charSet)
                    562:        {
                    563:        VxDJmp(UniToBCSPath)
                    564:        }
                    565: 
                    566: UINT VXDINLINE NAKED UniToBCS(PBYTE pBCSPath, string_t pUniPath, UINT length, UINT maxLength, UINT charSet)
                    567:        {
                    568:        VxDJmp(UniToBCS)
                    569:        }
                    570: 
                    571: UINT VXDINLINE NAKED BCSToUni(string_t pUniStr, PBYTE pBCSStr, UINT length, int charSet)
                    572:        {
                    573:        VxDJmp(BCSToUni)
                    574:        }
                    575: 
                    576: UINT VXDINLINE NAKED BcsToBcs(PBYTE pDest, PBYTE pSrc, UINT dstCharSet, UINT srcCharSet, UINT MaxLen)
                    577:        {
                    578:        VxDJmp(BcsToBcs)
                    579:        }
                    580: 
                    581: UINT VXDINLINE NAKED UniCharToOEM(WORD uniChar)
                    582:        {
                    583:        VxDJmp(UniCharToOEM)
                    584:        }
                    585: 
                    586: UINT VXDINLINE NAKED UniToUpper(string_t pUniUpStr, string_t pUniStr, UINT length)
                    587:        {
                    588:        VxDJmp(UniToUpper)
                    589:        }
                    590: 
                    591: UINT VXDINLINE NAKED CreateBasis(string_t pBasisName, string_t pUniName, UINT length)
                    592:        {
                    593:        VxDJmp(CreateBasis)
                    594:        }
                    595: 
                    596: int VXDINLINE NAKED MatchBasisName(string_t pBasisName, string_t pName)
                    597:        {
                    598:        VxDJmp(MatchBasisName)
                    599:        }
                    600: 
                    601: int VXDINLINE NAKED AppendBasisTail(string_t pBasisName, int tail)
                    602:        {
                    603:        VxDJmp(AppendBasisTail)
                    604:        }
                    605: 
                    606: int VXDINLINE NAKED FcbToShort(string_t p83name, string_t pFCBName, int trailDot)
                    607:        {
                    608:        VxDJmp(FcbToShort)
                    609:        }
                    610: 
                    611: int VXDINLINE NAKED ShortToFcb(string_t pFCBName, string_t p83Name, UINT length)
                    612:        {
                    613:        VxDJmp(ShortToFcb)
                    614:        }
                    615: 
                    616: int VXDINLINE NAKED ShortToLossyFcb(string_t pFCBName, string_t p83Name, UINT length)
                    617:        {
                    618:        VxDJmp(ShortToLossyFcb)
                    619:        }
                    620: 
                    621: typedef struct _CONVTABLES
                    622:        {
                    623:        DWORD   ct_length;
                    624:        PDWORD  ct_UniToWinAnsiTbl;
                    625:        PDWORD  ct_UniToOemTbl;
                    626:        PDWORD  ct_WinAnsiToUniTbl;
                    627:        PDWORD  ct_OemToUniTable;
                    628:        PDWORD  ct_UniToUpperDeltaTbl;
                    629:        PDWORD  ct_UniToUpperTbl;
                    630:        } _CONVTABLES, *_PCONVTABLES;
                    631: 
                    632: _PCONVTABLES VXDINLINE NAKED IFSMgr_GetConversionTablePtrs()
                    633:        {
                    634:        VxDJmp(IFSMgr_GetConversionTablePtrs)
                    635:        }
                    636: 
                    637: int VXDINLINE NAKED IFSMgr_ParsePath(pioreq pir)
                    638:        {
                    639:        VxDJmp(IFSMgr_ParsePath)
                    640:        }
                    641: 
                    642: int VXDINLINE NAKED IFSMgr_FSDParsePath(pioreq pir)
                    643:        {
                    644:        VxDJmp(IFSMgr_FSDParsePath)
                    645:        }
                    646: 
                    647: int VXDINLINE NAKED IFSMgr_ParseOneElement(USHORT* pe_unichars)
                    648:        {
                    649:        VxDJmp(IFSMgr_ParseOneElement)
                    650:        }
                    651: 
                    652: int VXDINLINE NAKED IFSMgr_CheckAccessConflict(int fSortCompatibleDisable, fmode_t pfmode, int (*pfn)(fmode_t*, const void*), const void* FSDCookie)
                    653:        {
                    654:        VxDJmp(IFSMgr_CheckAccessConflict)
                    655:        }
                    656: 
                    657: int VXDINLINE NAKED IFSMgr_LockFile(void** ppFSDLockListHead, DWORD LockOffset, DWORD LockLength, DWORD LockOwner, PVOID pOpenFileInstance, DWORD fLockSemantics)
                    658:        {
                    659:        VxDJmp(IFSMgr_LockFile)
                    660:        }
                    661: 
                    662: int VXDINLINE NAKED IFSMgr_UnlockFile(void** ppFSDLockListHead, DWORD LockOffset, DWORD LockLength, DWORD LockOwner, PVOID pOpenFileInstance, DWORD fLockSemantics)
                    663:        {
                    664:        VxDJmp(IFSMgr_UnlockFile)
                    665:        }
                    666: 
                    667: VOID VXDINLINE NAKED IFSMgr_RemoveLocks(void** ppFSDLockListHead, DWORD LockOwner, PVOID pOpenFileInstance)
                    668:        {
                    669:        VxDJmp(IFSMgr_RemoveLocks)
                    670:        }
                    671: 
                    672: int VXDINLINE NAKED IFSMgr_CheckLocks(PVOID pFSDLockListHead, DWORD Offset, DWORD Length, DWORD Process, PVOID pOpenFileInstance, DWORD fOperation)
                    673:        {
                    674:        VxDJmp(IFSMgr_CheckLocks)
                    675:        }
                    676: 
                    677: int VXDINLINE NAKED IFSMgr_CountLocks(PVOID pFSDLockListHead, PVOID pOpenFileInstance)
                    678:        {
                    679:        VxDJmp(IFSMgr_CountLocks)
                    680:        }
                    681: 
                    682: VOID VXDINLINE NAKED IFSMgr_UnassignLockList(PVOID pFSDLockListHead)
                    683:        {
                    684:        VxDJmp(IFSMgr_UnassignLockList)
                    685:        }
                    686: 
                    687: VOID VXDINLINE NAKED IFSMgr_ReassignLockFileInst(PVOID pFSDLockListhead, PVOID pOldOpenFileInstance, PVOID pNewOpenFileInstance)
                    688:        {
                    689:        VxDJmp(IFSMgr_ReassignLockFileInst)
                    690:        }
                    691: 
                    692: VOID VXDINLINE NAKED NotifyVolumeArrival(UINT drive)
                    693:        {
                    694:        VxDJmp(NotifyVolumeArrival)
                    695:        }
                    696: 
                    697: int VXDINLINE NAKED QueryVolumeRemoval(UINT drive, int fDialog)
                    698:        {
                    699:        VxDJmp(QueryVolumeRemoval)
                    700:        }
                    701: 
                    702: VOID VXDINLINE NAKED NotifyVolumeRemoval(UINT drive)
                    703:        {
                    704:        VxDJmp(NotifyVolumeRemoval)
                    705:        }
                    706: 
                    707: int VXDINLINE NAKED IFSMgr_PNPEvent(UINT Message, UINT Resource, UINT Flags)
                    708:        {
                    709:        VxDJmp(IFSMgr_PNPEvent)
                    710:        }
                    711: 
                    712: int VXDINLINE NAKED _VolFlush(UINT Volume, int Flags)
                    713:        {
                    714:        VxDJmp(_VolFlush)
                    715:        }
                    716: 
                    717: VOID VXDINLINE NAKED IFSMgr_CompleteAsync(pioreq pir)
                    718:        {
                    719:        VxDJmp(IFSMgr_CompleteAsync)
                    720:        }
                    721: 
                    722: int VXDINLINE R0_OpenCreateFile(BOOL incontext, WORD modeflags, WORD attrib, BYTE action, BYTE flags, char* pathname, PDWORD phandle, PDWORD paction)
                    723:        {
                    724:        DWORD opcode = incontext ? R0_OPENCREAT_IN_CONTEXT : R0_OPENCREATFILE;
                    725:        DWORD result=0;
                    726:        _asm
                    727:                {
                    728:                pushad
                    729:                mov     eax, R0_OPENCREATFILE ;/* opcode */
                    730:                xor ebx,ebx
                    731:                xor ecx,ecx
                    732:                xor edx,edx
                    733:                mov bx, [modeflags]
                    734:                mov cx, [attrib]
                    735:                mov dl, [action]
                    736:                mov dh, [flags]
                    737:                mov esi, [pathname]
                    738:                }
                    739:        VxDCall(IFSMgr_Ring0_FileIO)
                    740:        _asm
                    741:                {
                    742:                jc      error
                    743:                mov ebx, [phandle]
                    744:                mov [ebx], eax
                    745:                mov ebx, [paction]
                    746:                mov [ebx], ecx
                    747:                xor eax, eax
                    748:                
                    749:        error:
                    750:                
                    751:                mov     [WORD PTR result], ax
                    752:                popad
                    753:        }
                    754:        return result;
                    755:        }
                    756: 
                    757: int VXDINLINE R0_ReadFile(BOOL incontext, DWORD handle, DWORD count, DWORD pos, PBYTE buffer, PDWORD nread)
                    758:        {
                    759:        DWORD opcode = incontext ? R0_READFILE_IN_CONTEXT : R0_READFILE;
                    760:        DWORD result=0;
                    761:        _asm
                    762:                {
                    763:                pushad
                    764:                mov     eax, R0_READFILE ; /* opcode */
                    765:                mov     ebx, [handle]
                    766:                mov ecx, [count]
                    767:                mov edx, [pos]
                    768:                mov esi, [buffer]
                    769:                }
                    770:        VxDCall(IFSMgr_Ring0_FileIO)
                    771:        _asm
                    772:                {
                    773:                jc      error
                    774:                mov ebx, [nread]
                    775:                mov [ebx], ecx
                    776:                xor eax, eax
                    777:        error:
                    778:                mov     [WORD PTR result], ax
                    779:                popad
                    780:                }
                    781:        return result;
                    782:        }
                    783: 
                    784: int VXDINLINE R0_WriteFile(BOOL incontext, DWORD handle, DWORD count, DWORD pos, const BYTE* buffer, PDWORD nwritten)
                    785:        {
                    786:        DWORD opcode = incontext ? R0_WRITEFILE_IN_CONTEXT : R0_WRITEFILE;
                    787:        DWORD result=0;
                    788:        _asm
                    789:                {
                    790:                pushad
                    791:                
                    792:                mov     eax, R0_WRITEFILE ; /* opcode */
                    793:                mov     ebx, [handle]
                    794:                mov ecx, [count]
                    795:                mov edx, [pos]
                    796:                mov esi, [buffer]
                    797:                }
                    798:        VxDCall(IFSMgr_Ring0_FileIO)
                    799:        _asm
                    800:                {
                    801:                jc      error
                    802:        
                    803:                mov ebx, nwritten
                    804:                mov [ebx], ecx
                    805:                xor eax, eax
                    806:        error:
                    807:                mov [WORD PTR result], ax
                    808:                popad
                    809:                }
                    810:        return result;
                    811:        }
                    812: 
                    813: int VXDINLINE R0_CloseFile(DWORD handle)
                    814:        {
                    815:        _asm
                    816:                {
                    817:                mov     eax, R0_CLOSEFILE
                    818:                mov ebx, [handle]
                    819:                }
                    820:        VxDCall(IFSMgr_Ring0_FileIO)
                    821:        _asm jc error
                    822:        _asm xor eax, eax
                    823:        _asm error:
                    824:        _asm movzx eax, ax
                    825:        }
                    826: 
                    827: int VXDINLINE R0_GetFileSize(DWORD handle, PDWORD psize)
                    828:        {
                    829:        _asm
                    830:                {
                    831:                mov     eax, R0_GETFILESIZE
                    832:                mov ebx, handle
                    833:                }
                    834:        VxDCall(IFSMgr_Ring0_FileIO)
                    835:        _asm
                    836:                {
                    837:                jc      error
                    838:                mov ebx, psize
                    839:                mov [ebx], eax
                    840:                xor     eax, eax
                    841:        error:
                    842:                movzx eax, ax
                    843:                }
                    844:        }
                    845: 
                    846: int VXDINLINE R0_FindFirstFile(WORD attrib, const char* pathname, _WIN32_FIND_DATA* fd, PDWORD phandle)
                    847:        {
                    848:        _asm
                    849:                {
                    850:                mov     eax, R0_FINDFIRSTFILE
                    851:                mov     esi, pathname
                    852:                mov edx, fd
                    853:                }
                    854:        VxDCall(IFSMgr_Ring0_FileIO)
                    855:        _asm
                    856:                {
                    857:                jc      error
                    858:                mov ebx, phandle
                    859:                mov [ebx], eax
                    860:                xor eax, eax
                    861:        error:
                    862:                movzx eax, ax
                    863:                }
                    864:        }
                    865: 
                    866: int VXDINLINE R0_FindNextFile(DWORD handle, _WIN32_FIND_DATA* fd)
                    867:        {
                    868:        _asm
                    869:                {
                    870:                mov     eax, R0_FINDNEXTFILE
                    871:                mov ebx, handle
                    872:                mov edx, fd
                    873:                }
                    874:        VxDCall(IFSMgr_Ring0_FileIO)
                    875:        _asm jc error
                    876:        _asm xor eax, eax
                    877:        _asm error:
                    878:        _asm movzx eax, ax
                    879:        }
                    880: 
                    881: int VXDINLINE R0_FindClose(DWORD handle)
                    882:        {
                    883:        _asm
                    884:                {
                    885:                mov     eax, R0_FINDCLOSEFILE
                    886:                mov ebx, handle
                    887:                }
                    888:        VxDCall(IFSMgr_Ring0_FileIO)
                    889:        _asm jc error
                    890:        _asm xor eax, eax
                    891:        _asm error:
                    892:        _asm movzx eax, ax
                    893:        }
                    894: 
                    895: int VXDINLINE R0_GetFileAttributes(const char* pathname, PWORD pattrib)
                    896:        {
                    897:        _asm
                    898:                {
                    899:                mov     eax, R0_FILEATTRIBUTES or GET_ATTRIBUTES
                    900:                mov esi, pathname
                    901:                }
                    902:        VxDCall(IFSMgr_Ring0_FileIO)
                    903:        _asm
                    904:                {
                    905:                jc      error
                    906:                mov ebx, pattrib
                    907:                mov word ptr [ebx], cx
                    908:                xor eax, eax
                    909:        error:
                    910:                movzx eax, ax
                    911:                }
                    912:        }
                    913: 
                    914: int VXDINLINE R0_SetFileAttributes(const char* pathname, WORD attrib)
                    915:        {
                    916:        _asm
                    917:                {
                    918:                mov     eax, R0_FILEATTRIBUTES or SET_ATTRIBUTES
                    919:                mov cx, attrib
                    920:                mov esi, pathname
                    921:                }
                    922:        VxDCall(IFSMgr_Ring0_FileIO)
                    923:        _asm jc error
                    924:        _asm xor eax, eax
                    925:        _asm error:
                    926:        _asm movzx eax, ax
                    927:        }
                    928: 
                    929: int VXDINLINE R0_RenameFile(const char* oldname, const char* newname)
                    930:        {
                    931:        _asm
                    932:                {
                    933:                mov     eax, R0_RENAMEFILE
                    934:                mov esi, oldname
                    935:                mov edx, newname
                    936:                }
                    937:        VxDCall(IFSMgr_Ring0_FileIO)
                    938:        _asm jc error
                    939:        _asm xor eax, eax
                    940:        _asm error:
                    941:        _asm movzx eax, ax
                    942:        }
                    943: 
                    944: int VXDINLINE R0_DeleteFile(const char* pathname, WORD attrib)
                    945:        {
                    946:        _asm
                    947:                {
                    948:                mov eax, R0_DELETEFILE
                    949:                mov cx, attrib
                    950:                mov esi, pathname
                    951:                }
                    952:        VxDCall(IFSMgr_Ring0_FileIO)
                    953:        _asm jc error
                    954:        _asm xor eax, eax
                    955:        _asm error:
                    956:        _asm movzx eax, ax
                    957:        }
                    958: 
                    959: int VXDINLINE R0_LockFile(DWORD handle, DWORD pid, DWORD dwOffset, DWORD dwLength)
                    960:        {
                    961:        _asm
                    962:                {
                    963:                mov eax, R0_LOCKFILE or LOCK_REGION
                    964:                mov ebx, handle
                    965:                mov ecx, pid
                    966:                mov edx, dwOffset
                    967:                mov esi, dwLength
                    968:                }
                    969:        VxDCall(IFSMgr_Ring0_FileIO)
                    970:        _asm jc error
                    971:        _asm xor eax, eax
                    972:        _asm error:
                    973:        _asm movzx eax, ax
                    974:        }
                    975: 
                    976: int VXDINLINE R0_UnlockFile(DWORD handle, DWORD pid, DWORD dwOffset, DWORD dwLength)
                    977:        {
                    978:        _asm
                    979:                {
                    980:                mov eax, R0_LOCKFILE or UNLOCK_REGION
                    981:                mov ebx, handle
                    982:                mov ecx, pid
                    983:                mov edx, dwOffset
                    984:                mov esi, dwLength
                    985:                }
                    986:        VxDCall(IFSMgr_Ring0_FileIO)
                    987:        _asm jc error
                    988:        _asm xor eax, eax
                    989:        _asm error:
                    990:        _asm movzx eax, ax
                    991:        }
                    992: 
                    993: int VXDINLINE R0_GetDiskFreeSpace(BYTE drive, PWORD pspc, PWORD pavl, PWORD psecsize, PWORD ptot)
                    994:        {
                    995:        _asm
                    996:                {
                    997:                mov     eax, R0_GETDISKFREESPACE
                    998:                mov dl, drive
                    999:                }
                   1000:        VxDCall(IFSMgr_Ring0_FileIO)
                   1001:        _asm
                   1002:                {
                   1003:                jc      error
                   1004:                mov esi, pspc
                   1005:                mov word ptr [esi], ax          ; sectors per cluster
                   1006:                mov esi, pavl
                   1007:                mov word ptr [esi], bx          ; available clusters
                   1008:                mov esi, psecsize
                   1009:                mov word ptr [esi], cx          ; bytes per sector
                   1010:                mov esi, ptot
                   1011:                mov word ptr [esi], dx          ; total clusters on disk
                   1012:                xor eax, eax
                   1013:        error:
                   1014:                movzx eax, ax
                   1015:                }
                   1016:        }
                   1017: 
                   1018: int VXDINLINE R0_ReadAbsoluteDisk(BYTE drive, UINT nsectors, DWORD sector, PBYTE buffer)
                   1019:        {
                   1020:        _asm
                   1021:                {
                   1022:                mov     al, drive
                   1023:                mov ah, R0_READABSOLUTEDISK shr 8
                   1024:                mov ecx, nsectors
                   1025:                mov edx, sector
                   1026:                mov esi, buffer
                   1027:                }
                   1028:        VxDCall(IFSMgr_Ring0_FileIO)
                   1029:        _asm jc error
                   1030:        _asm xor eax, eax
                   1031:        _asm error:
                   1032:        _asm movzx eax, ax
                   1033:        }
                   1034: 
                   1035: int VXDINLINE R0_WriteAbsoluteDisk(BYTE drive, UINT nsectors, DWORD sector, const BYTE* buffer)
                   1036:        {
                   1037:        _asm
                   1038:                {
                   1039:                mov     al, drive
                   1040:                mov ah, R0_WRITEABSOLUTEDISK shr 8
                   1041:                mov ecx, nsectors
                   1042:                mov edx, sector
                   1043:                mov esi, buffer
                   1044:                }
                   1045:        VxDCall(IFSMgr_Ring0_FileIO)
                   1046:        _asm jc error
                   1047:        _asm xor eax, eax
                   1048:        _asm error:
                   1049:        _asm movzx eax, ax
                   1050:        }
                   1051: 
                   1052: int VXDINLINE IFSMgr_Ring0GetDriveInfo(UINT drive)
                   1053:        {
                   1054:        _asm mov edx, drive
                   1055:        VxDCall(IFSMgr_Ring0_FileIO)
                   1056:        _asm
                   1057:                {
                   1058:                jnc     noerror
                   1059:                mov eax, -1
                   1060:        noerror:
                   1061:                }
                   1062:        }
                   1063: 
                   1064: 
                   1065: 
                   1066: 
                   1067: 
                   1068: 
                   1069: int VXDINLINE TimeSliceSleep(UINT time)
                   1070:        {
                   1071:        _asm mov eax, time
                   1072:        VxDCall(Time_Slice_Sleep)
                   1073:        
                   1074:        }
                   1075: 
                   1076: int VXDINLINE GetVMMReenterCount()
                   1077: {
                   1078:     int v;
                   1079:        _asm pushad
                   1080:        
                   1081:        _asm xor ecx,ecx
                   1082:        VxDCall(Get_VMM_Reenter_Count)
                   1083:     _asm mov [v],ecx
                   1084:     _asm popad
                   1085: 
                   1086:        return v;
                   1087:   
                   1088: }
                   1089: 
                   1090: 
                   1091: int VXDINLINE ReleaseTimeSlice()
                   1092:        {
                   1093:        VxDCall(Release_Time_Slice)
                   1094:        }
                   1095: 
                   1096: 
                   1097: //%%%
                   1098: //int RestrictedEvent(unsigned int Proc,unsigned int refdata)
                   1099: //     {
                   1100: //     _asm
                   1101: //     {
                   1102: //
                   1103: //     mov     eax, 0; 
                   1104: //     mov     ebx, 0 ;Handle
                   1105: //     ;;mov     ecx, PEF_ALWAYS_SCHED|PEF_RING0_EVENT; 
                   1106: //     mov     ecx, PEF_ALWAYS_SCHED|PEF_WAIT_CRIT;
                   1107: //     mov     edx, [refdata]
                   1108: //     mov     esi, [Proc]
                   1109: //     mov     edi, 0
                   1110: //     VxDCall (Call_Restricted_Event)
                   1111: //     }
                   1112: //     return 0; 
                   1113: //     }
                   1114: 
                   1115: 
                   1116: ShellMessageNCB(int flags,char * message,char *caption)
                   1117:        {
                   1118:        int handle;
                   1119:        handle=Get_Sys_VM_Handle();
                   1120: 
                   1121:        _asm
                   1122:        {
                   1123:         pushad
                   1124: 
                   1125:         mov ebx, [handle]             ; virtual machine handle
                   1126:         mov eax, [flags]              ; message box flags
                   1127:         mov ecx, [message]   ; address of message text
                   1128:         mov edi, [caption]   ; address of caption text
                   1129:         mov esi, 0  ; address of callback
                   1130:         mov edx, 0      ; reference data for callback
                   1131:        }
                   1132: 
                   1133:        VxDCall (SHELL_SYSMODAL_Message);
                   1134:        _asm cli
                   1135:        _asm popad
                   1136:        }
                   1137: 
                   1138: ShellWinMessage(int flags,char * message,char *caption)
                   1139:        {
                   1140: 
                   1141:        int handle;
                   1142:        handle=Get_Sys_VM_Handle();
                   1143: 
                   1144:        _asm
                   1145:        {
                   1146:        pushad
                   1147: 
                   1148:        mov ebx, [handle]             ; virtual machine handle
                   1149:        mov eax, [flags]              ; message box flags
                   1150:        mov ecx, [message]   ; address of message text
                   1151:        mov edi, [caption]   ; address of caption text
                   1152:        mov esi, 0  ; address of callback
                   1153:        mov edx, 0      ; reference data for callback
                   1154:        }
                   1155: 
                   1156:        VxDCall (SHELL_Message);
                   1157:        _asm jnc noerror
                   1158:        ShellMessageNCB(flags,message,caption);
                   1159: 
                   1160:        _asm noerror:
                   1161: 
                   1162:        _asm cli
                   1163:        _asm popad
                   1164:        }
                   1165: 
                   1166: 
                   1167: APPY_HANDLE VXDINLINE
                   1168: SHELL_CallAtAppyTime(APPY_CALLBACK pfnAppyCallBack, DWORD dwRefData, DWORD flAppy, ...)
                   1169:        {
                   1170:     _asm    push    flAppy[4]
                   1171:     _asm    push    flAppy
                   1172:     _asm    push    dwRefData
                   1173:     _asm    push    pfnAppyCallBack
                   1174:     Touch_Register(eax)
                   1175:     Touch_Register(ecx)
                   1176:     Touch_Register(edx)
                   1177:     VxDCall(_SHELL_CallAtAppyTime);
                   1178:     _asm    add esp, 4*4
                   1179:        }
                   1180: 
                   1181: 
                   1182: int VXDINLINE
                   1183: SHELLexec(int exec)
                   1184:        {
                   1185:        _asm    push    exec
                   1186:        Touch_Register(eax)
                   1187:        Touch_Register(ecx)
                   1188:        Touch_Register(edx)
                   1189:        VxDCall(_SHELL_ShellExecute);
                   1190:        _asm    add esp, 4
                   1191:        }
                   1192:        
                   1193: int SHELLHookBroadcast(void* haddress,int ref)
                   1194:        {               
                   1195:        _asm push ref
                   1196:        _asm push haddress
                   1197:        VxDCall (_SHELL_HookSystemBroadcast)
                   1198:        _asm add esp,8
                   1199:        }
                   1200: 
                   1201: int VXDINLINE WaitShTime(unsigned int time)
                   1202:        {
                   1203:        unsigned int timelow;
                   1204:        unsigned int time2=0;
                   1205:        _asm pushad
                   1206: 
                   1207:        Touch_Register(eax)
                   1208:        Touch_Register(edx)
                   1209: 
                   1210:        VxDCall(VTD_Get_Real_Time)
                   1211: 
                   1212:        _asm mov [timelow],eax
                   1213:        while (time2<time)
                   1214:        {
                   1215:        Touch_Register(eax)
                   1216:        Touch_Register(edx)
                   1217:        VxDCall(VTD_Get_Real_Time)   
                   1218:        _asm sub eax,[timelow]
                   1219:        _asm mov [time2],eax
                   1220: 
                   1221:        }
                   1222: 
                   1223:        _asm popad
                   1224: 
                   1225:        }
                   1226: 
                   1227: 
                   1228: int VXDINLINE AdjustThreadPriority(UINT pb,UINT th)
                   1229:        {
                   1230:        _asm mov eax, pb
                   1231:        _asm mov edi,th
                   1232:        VxDCall(Adjust_Thread_Exec_Priority)
                   1233:        
                   1234:        }
                   1235: 
                   1236: 
                   1237: ppIFSFileHookFunc IFSMgr_InstallFileSystemApiHook(pIFSFileHookFunc fcn)
                   1238:        {
                   1239:        ppIFSFileHookFunc p;
                   1240:        _asm push fcn 
                   1241:        _asm mov eax,fcn        /*  not sure which! */
                   1242:        VxDCall(IFSMgr_InstallFileSystemApiHook)
                   1243:        _asm add esp,4  
                   1244:        _asm mov [p],eax
                   1245:        return p;
                   1246:        }
                   1247: 
                   1248: int VXDINLINE NAKED IFSMgr_RemoveFileSystemApiHook(pIFSFileHookFunc fcn)
                   1249:        {
                   1250:        VxDJmp(IFSMgr_RemoveFileSystemApiHook)
                   1251:        }
                   1252: 
                   1253: int VXDINLINE NAKED IFSMgr_CDROM_Attach(DWORD drive, struct _VRP** pvrp, int fDoMount)
                   1254:        {
                   1255:        VxDJmp(IFSMgr_CDROM_Attach)
                   1256:        }
                   1257: 
                   1258: int VXDINLINE NAKED IFSMgr_CDROM_Detach(DWORD Drive, struct _VRP* vrp)
                   1259:        {
                   1260:        VxDJmp(IFSMgr_CDROM_Detach)
                   1261:        }
                   1262: 
                   1263: int VXDINLINE NAKED IFSMgr_FSDUnmountCFSD(DWORD rh)
                   1264:        {
                   1265:        VxDJmp(IFSMgr_FSDUnmountCFSD)
                   1266:        }
                   1267: 
                   1268: int VXDINLINE NAKED IFSMgr_MountChildVolume(struct _VRP* vrp, DWORD drive)
                   1269:        {
                   1270:        VxDJmp(IFSMgr_MountChildVolume)
                   1271:        }
                   1272: 
                   1273: int VXDINLINE NAKED IFSMgr_UnmountChildVolume(struct _VRP* vrp, DWORD drive)
                   1274:        {
                   1275:        VxDJmp(IFSMgr_UnmountChildVolume)
                   1276:        }
                   1277: 
                   1278: int VXDINLINE NAKED IFSMgr_SwapDrives(struct _VRP* vrp, DWORD drive1, DWORD drive2)
                   1279:        {
                   1280:        VxDJmp(IFSMgr_SwapDrives)
                   1281:        }
                   1282: 
                   1283: int VXDINLINE NAKED IFSMgr_FSDGetCurrentDrive(pioreq pir)
                   1284:        {
                   1285:        VxDJmp(IFSMgr_FSDGetCurrentDrive)
                   1286:        }
                   1287: 
                   1288: int VXDINLINE NAKED _GetMappedErr(UINT Function, UINT ExtErr)
                   1289:        {
                   1290:        VxDJmp(_GetMappedErr)
                   1291:        }
                   1292: 
                   1293: int VXDINLINE NAKED IFSMgr_GetLockState(DWORD drive, PDWORD pLockType, PDWORD pLockFlags, PDWORD pLockOwner)
                   1294:        {
                   1295:        VxDJmp(IFSMgr_GetLockState)
                   1296:        }
                   1297: 
                   1298: BOOL VXDINLINE Query_PhysLock(DWORD unit)
                   1299:        {
                   1300:        _asm mov eax, unit
                   1301:        VxDCall(Query_PhysLock)
                   1302:        _asm sbb eax, eax                       ; CF set if process doesn't own volume lock, so return is -1 if unowned, 0 if owned
                   1303:        }
                   1304: 
                   1305: VOID VXDINLINE NAKED IFSMgr_printf(const char* pfstr, ...)
                   1306:        {
                   1307:        VxDJmp(IFSMgr_printf)
                   1308:        }
                   1309: 
                   1310: #ifdef DEBUG
                   1311: #define IFSASSERT(x) if (!(x)) IFSMgr_AssertFailed(#x, __FILE__, __LINE__)
                   1312: VOID VXDINLINE NAKED IFSMgr_AssertFailed(const char* msg, const char* pfname, DWORD line)
                   1313:        {
                   1314:        VxDJmp(IFSMgr_AssertFailed)
                   1315:        }
                   1316: VOID VXDINLINE NAKED IFSMgr_LogEntry(const char* name, DWORD info1, DWORD info2, int sdepth, DWORD mask)
                   1317:        {
                   1318:        VxDJmp(IFSMgr_LogEntry)
                   1319:        }
                   1320: DWORD VXDINLINE NAKED IFSMgr_DebugMenu(PVOID pm)
                   1321:        {
                   1322:        VxDJmp(IFSMgr_DebugMenu)
                   1323:        }
                   1324: DWORD VXDINLINE NAKED IFSMgr_DebugVars()
                   1325:        {
                   1326:        VxDJmp(IFSMgr_DebugVars)
                   1327:        }
                   1328: int VXDINLINE NAKED IFSMgr_GetDebugString(const char* prompt, char* buffer, UINT length)
                   1329:        {
                   1330:        VxDJmp(IFSMgr_GetDebugString)
                   1331:        }
                   1332: int VXDINLINE NAKED IFSMgr_GetDebugHexNum(const char* prompt, PDWORD phexval)
                   1333:        {
                   1334:        VxDJmp(IFSMgr_GetDebugHexNum)
                   1335:        }
                   1336: DWORD VXDINLINE NAKED IFSMgr_DbgSetFileHandleLimit(DWORD MaxHandles)
                   1337:        {
                   1338:        VxDJmp(IFSMgr_DbgSetFileHandleLimit)
                   1339:        }
                   1340: #else
                   1341: #define IFSASSERT(x)
                   1342: #define IFSMgr_Assert_Failed(a1, a2, a3)
                   1343: #define IFSMgr_LogEntry(a1, a2, a3, a4, a5)
                   1344: #define IFSMgr_DebugMenu(a1) NULL
                   1345: #define IFSMgr_DebugVars() NULL
                   1346: #define IFSMgr_GetDebugString(a1, a2, a3) 0
                   1347: #define IFSMgr_GetDebugHexNum(a1, a2) 0
                   1348: #define IFSMgr_DbgSetFileHandleLimit(a1) a1
                   1349: #endif
                   1350: 
                   1351: #endif /* Not_VxD */
                   1352: 

unix.superglobalmegacorp.com

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