|
|
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:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.