Annotation of truecrypt/driver vxd/ifsmgr.inc, revision 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.