📄 ifsmgr.h
字号:
// IFSMGR.H -- Declarations for Installable File System Manager Calls
// Copyright (C) 1996 by Walter Oney
// All rights reserved
#ifndef IFSMGR_H
#define IFSMGR_H
#ifdef __cplusplus
extern "C" {
#endif
#include "ifs.h"
#define IFSMGRVERSION 0x22
///////////////////////////////////////////////////////////////////////////////
// IFSMgr services
#ifndef IFSMgr_DEVICE_ID
#define IFSMgr_DEVICE_ID 0x0040
#endif
#ifndef Not_VxD
#undef IFSMgr_Service
#define IFSMgr_Service Declare_Service
#pragma warning(disable:4003) // not enough parameters
Begin_Service_Table(IFSMgr)
IFSMgr_Service(IFSMgr_Get_Version)
IFSMgr_Service(IFSMgr_RegisterMount)
IFSMgr_Service(IFSMgr_RegisterNet)
IFSMgr_Service(IFSMgr_RegisterMailSlot)
IFSMgr_Service(IFSMgr_Attach)
IFSMgr_Service(IFSMgr_Detach)
IFSMgr_Service(IFSMgr_Get_NetTime)
IFSMgr_Service(IFSMgr_Get_DOSTime)
IFSMgr_Service(IFSMgr_SetupConnection)
IFSMgr_Service(IFSMgr_DerefConnection)
IFSMgr_Service(IFSMgr_ServerDOSCall)
IFSMgr_Service(IFSMgr_CompleteAsync)
IFSMgr_Service(IFSMgr_RegisterHeap)
IFSMgr_Service(IFSMgr_GetHeap)
IFSMgr_Service(IFSMgr_RetHeap)
IFSMgr_Service(IFSMgr_CheckHeap)
IFSMgr_Service(IFSMgr_CheckHeapItem)
IFSMgr_Service(IFSMgr_FillHeapSpare)
IFSMgr_Service(IFSMgr_Block)
IFSMgr_Service(IFSMgr_Wakeup)
IFSMgr_Service(IFSMgr_Yield)
IFSMgr_Service(IFSMgr_SchedEvent)
IFSMgr_Service(IFSMgr_QueueEvent)
IFSMgr_Service(IFSMgr_KillEvent)
IFSMgr_Service(IFSMgr_FreeIOReq)
IFSMgr_Service(IFSMgr_MakeMailSlot)
IFSMgr_Service(IFSMgr_DeleteMailSlot)
IFSMgr_Service(IFSMgr_WriteMailSlot)
IFSMgr_Service(IFSMgr_PopUp)
IFSMgr_Service(IFSMgr_printf)
IFSMgr_Service(IFSMgr_AssertFailed)
IFSMgr_Service(IFSMgr_LogEntry)
IFSMgr_Service(IFSMgr_DebugMenu)
IFSMgr_Service(IFSMgr_DebugVars)
IFSMgr_Service(IFSMgr_GetDebugString)
IFSMgr_Service(IFSMgr_GetDebugHexNum)
IFSMgr_Service(IFSMgr_NetFunction)
IFSMgr_Service(IFSMgr_DoDelAllUses)
IFSMgr_Service(IFSMgr_SetErrString)
IFSMgr_Service(IFSMgr_GetErrString)
IFSMgr_Service(IFSMgr_SetReqHook)
IFSMgr_Service(IFSMgr_SetPathHook)
IFSMgr_Service(IFSMgr_UseAdd)
IFSMgr_Service(IFSMgr_UseDel)
IFSMgr_Service(IFSMgr_InitUseAdd)
IFSMgr_Service(IFSMgr_ChangeDir)
IFSMgr_Service(IFSMgr_DelAllUses)
IFSMgr_Service(IFSMgr_CDROM_Attach)
IFSMgr_Service(IFSMgr_CDROM_Detach)
IFSMgr_Service(IFSMgr_Win32DupHandle)
IFSMgr_Service(IFSMgr_Ring0_FileIO)
IFSMgr_Service(IFSMgr_Win32_Get_Ring0_Handle)
IFSMgr_Service(IFSMgr_Get_Drive_Info)
IFSMgr_Service(IFSMgr_Ring0GetDriveInfo)
IFSMgr_Service(IFSMgr_BlockNoEvents)
IFSMgr_Service(IFSMgr_NetToDosTime)
IFSMgr_Service(IFSMgr_DosToNetTime)
IFSMgr_Service(IFSMgr_DosToWin32Time)
IFSMgr_Service(IFSMgr_Win32ToDosTime)
IFSMgr_Service(IFSMgr_NetToWin32Time)
IFSMgr_Service(IFSMgr_Win32ToNetTime)
IFSMgr_Service(IFSMgr_MetaMatch)
IFSMgr_Service(IFSMgr_TransMatch)
IFSMgr_Service(IFSMgr_CallProvider)
IFSMgr_Service(UniToBCS)
IFSMgr_Service(UniToBCSPath)
IFSMgr_Service(BCSToUni)
IFSMgr_Service(UniToUpper)
IFSMgr_Service(UniCharToOEM)
IFSMgr_Service(CreateBasis)
IFSMgr_Service(MatchBasisName)
IFSMgr_Service(AppendBasisTail)
IFSMgr_Service(FcbToShort)
IFSMgr_Service(ShortToFcb)
IFSMgr_Service(IFSMgr_ParsePath)
IFSMgr_Service(Query_PhysLock)
IFSMgr_Service(_VolFlush)
IFSMgr_Service(NotifyVolumeArrival)
IFSMgr_Service(NotifyVolumeRemoval)
IFSMgr_Service(QueryVolumeRemoval)
IFSMgr_Service(IFSMgr_FSDUnmountCFSD)
IFSMgr_Service(IFSMgr_GetConversionTablePtrs)
IFSMgr_Service(IFSMgr_CheckAccessConflict)
IFSMgr_Service(IFSMgr_LockFile)
IFSMgr_Service(IFSMgr_UnlockFile)
IFSMgr_Service(IFSMgr_RemoveLocks)
IFSMgr_Service(IFSMgr_CheckLocks)
IFSMgr_Service(IFSMgr_CountLocks)
IFSMgr_Service(IFSMgr_ReassignLockFileInst)
IFSMgr_Service(IFSMgr_UnassignLockList)
IFSMgr_Service(IFSMgr_MountChildVolume)
IFSMgr_Service(IFSMgr_UnmountChildVolume)
IFSMgr_Service(IFSMgr_SwapDrives)
IFSMgr_Service(IFSMgr_FSDMapFHtoIOREQ)
IFSMgr_Service(IFSMgr_FSDParsePath)
IFSMgr_Service(IFSMgr_FSDAttachSFT)
IFSMgr_Service(IFSMgr_GetTimeZoneBias)
IFSMgr_Service(IFSMgr_PNPEvent)
IFSMgr_Service(IFSMgr_RegisterCFSD)
IFSMgr_Service(IFSMgr_Win32MapExtendedHandleToSFT)
IFSMgr_Service(IFSMgr_DbgSetFileHandleLimit)
IFSMgr_Service(IFSMgr_Win32MapSFTToExtendedHandle)
IFSMgr_Service(IFSMgr_FSDGetCurrentDrive)
IFSMgr_Service(IFSMgr_InstallFileSystemApiHook)
IFSMgr_Service(IFSMgr_RemoveFileSystemApiHook)
IFSMgr_Service(IFSMgr_RunScheduledEvents)
IFSMgr_Service(IFSMgr_CheckDelResource)
IFSMgr_Service(IFSMgr_Win32GetVMCurdir)
IFSMgr_Service(IFSMgr_SetupFailedConnection)
IFSMgr_Service(_GetMappedErr)
IFSMgr_Service(ShortToLossyFcb)
IFSMgr_Service(IFSMgr_GetLockState)
IFSMgr_Service(BcsToBcs)
IFSMgr_Service(IFSMgr_SetLoopback)
IFSMgr_Service(IFSMgr_ClearLoopback)
IFSMgr_Service(IFSMgr_ParseOneElement)
IFSMgr_Service(BcsToBcsUpper)
End_Service_Table(IFSMgr)
#pragma warning(default:4003)
#endif // Not_VxD
///////////////////////////////////////////////////////////////////////////////
// Inline service function definitions:
#ifndef Not_VxD
#pragma warning(disable:4035) // missing return value
#undef NAKED
#define NAKED __declspec(naked)
DWORD VXDINLINE IFSMgr_Get_Version()
{
VxDCall(IFSMgr_Get_Version)
_asm jnc okay
_asm xor eax, eax
_asm okay:
}
#define NORMAL_FSD 0
#define DEFAULT_FSD 1
int NAKED IFSMgr_RegisterCFSD(pIFSFunc fcn, UINT version, string_t* ppDeviceNames)
{
VxDJmp(IFSMgr_RegisterCFSD)
}
// Command codes in ir_flags for calls to mailslot procedure:
#define MSLOT_CREATE 0
#define MSLOT_DELETE 1
#define MSLOT_WRITE 2
int NAKED IFSMgr_RegisterMailSlot(pIFSFunc fcn, UINT version)
{
VxDJmp(IFSMgr_RegisterMailSlot)
}
int NAKED IFSMgr_RegisterMount(pIFSFunc fcn, UINT version, UINT defoption)
{
VxDJmp(IFSMgr_RegisterMount)
}
int NAKED IFSMgr_RegisterNet(pIFSFunc fcn, UINT version, UINT netid)
{
VxDJmp(IFSMgr_RegisterNet)
}
#define DEBUG_FENCE_ON 1
#ifdef DEBUG
VOID NAKED IFSMgr_RegisterHeap(pIFSFunc fcn, UINT flag)
{
VxDJmp(IFSMgr_RegisterHeap)
}
#else
#define IFSMgr_RegisterHeapUser(a1,a2)
#endif
PVOID NAKED IFSMgr_GetHeap(UINT size)
{
VxDJmp(IFSMgr_GetHeap)
}
VOID NAKED IFSMgr_RetHeap(PVOID p)
{
VxDJmp(IFSMgr_RetHeap)
}
#ifdef DEBUG
#define CHECKHEAP(p) IFSMgr_CheckHeap(p, __FILE__, __LINE__);
#define CHECKHEAPITEM(p) IFSMgr_CheckHeapItem(p, __FILE__, __LINE__);
int NAKED IFSMgr_CheckHeap(PVOID pmem, char* filename, UINT line)
{
VxDJmp(IFSMgr_CheckHeap)
}
int NAKED IFSMgr_CheckHeapItem(PVOID pmem, char* filename, UINT line)
{
VxDJmp(IFSMgr_CheckHeapItem)
}
#else
#define CHECKHEAP(p)
#define CHECKHEAPITEM(p)
#define IFSMgr_CheckHeap(a1, a2, a3)
#define IFSMgr_CheckHeapItem(a1, a2, a3)
#endif
VOID NAKED IFSMgr_FillHeapSpare()
{
VxDJmp(IFSMgr_FillHeapSpare)
}
typedef DWORD nettime_t; // # seconds since 1/1/1970
typedef struct nettimex_t
{
DWORD dwSeconds; // # seconds since 1/1/1970
DWORD dwMilliseconds; // milliseconds in last second
} nettimex_t;
typedef struct dostimex_t
{
dos_time dostime; // time & data in DOS format
DWORD dwMilliseconds; // # milliseconds in last 2-sec interval
} dostimex_t;
nettimex_t NAKED IFSMgr_Get_NetTimeEx()
{
VxDJmp(IFSMgr_Get_NetTime)
}
nettime_t NAKED IFSMgr_Get_NetTime()
{
VxDJmp(IFSMgr_Get_NetTime)
}
dostimex_t NAKED IFSMgr_Get_DOSTimeEx()
{
VxDJmp(IFSMgr_Get_DOSTime)
}
typedef dos_time dostime_t;
dostime_t NAKED IFSMgr_Get_DOSTime()
{
VxDJmp(IFSMgr_Get_DOSTime)
}
dostime_t NAKED IFSMgr_NetToDosTime(DWORD nettime)
{
VxDJmp(IFSMgr_NetToDosTime)
}
DWORD NAKED IFSMgr_DosToNetTime(dostime_t dostime)
{
VxDJmp(IFSMgr_DosToNetTime)
}
_FILETIME NAKED IFSMgr_DosToWin32Time(dostime_t dostime)
{
VxDJmp(IFSMgr_DosToWin32Time)
}
dostime_t NAKED IFSMgr_Win32ToDosTime(_FILETIME win32time)
{
VxDJmp(IFSMgr_Win32ToDosTime)
}
_FILETIME NAKED IFSMgr_NetToWin32Time(DWORD nettime)
{
VxDJmp(IFSMgr_NetToWin32Time)
}
DWORD NAKED IFSMgr_Win32ToNetTime(_FILETIME win32time)
{
VxDJmp(IFSMgr_Win32ToNetTime)
}
int NAKED IFSMgr_GetTimeZoneBias()
{
VxDJmp(IFSMgr_GetTimeZoneBias)
}
VOID NAKED IFSMgr_SetupConnection(pioreq pir, UINT resopt, UINT restype)
{
VxDJmp(IFSMgr_SetupConnection)
}
VOID NAKED IFSMgr_DerefConnection(pioreq pir)
{
VxDJmp(IFSMgr_DerefConnection)
}
typedef union tagDPL32
{
struct DPL32_DW
{
DWORD DPL32_EAX;
DWORD DPL32_EBX;
DWORD DPL32_ECX;
DWORD DPL32_EDX;
DWORD DPL32_ESI;
DWORD DPL32_EDI;
DWORD DPL32_EBP;
WORD DPL32_UID;
WORD DPL32_PID;
DWORD DPL32_DTA;
BYTE DPL32_FLAGS;
BYTE DPL32_PAD[3];
};
struct DPL32_W
{
WORD DPL32_AX, junk1;
WORD DPL32_BX, junk2;
WORD DPL32_CX, junk3;
WORD DPL32_DX, junk4;
WORD DPL32_SI, junk5;
WORD DPL32_DI, junk6;
WORD DPL32_BP, junk7;
DWORD DPL32_PID32;
};
struct DPL32_B
{
BYTE DPL32_AL, APL32_AH;
WORD junk8;
BYTE DPL32_BL, APL32_BH;
WORD junk9;
BYTE DPL32_CL, APL32_CH;
WORD junk10;
BYTE DPL32_DL, APL32_DH;
WORD junk11;
};
} DPL32, *PDPL32;
#define DPL32_USE_MASK 0x03
#define DPL32_USE_ANSI 0
#define DPL32_USE_OEM 1
#define DPL32_USE_UNICODE 2
#define DPL32_8_3_MATCHING 0x04
BOOL VXDINLINE IFSMgr_ServerDOSCall(HVM hVM, UINT fcn, PDPL32 dpl, PCRS pRegs)
{
_asm push ebp
_asm mov ebx, hVM
_asm mov ecx, fcn
_asm mov esi, dpl
_asm mov ebp, pRegs
VxDCall(IFSMgr_ServerDOSCall)
_asm pop ebp
_asm cmc
_asm sbb eax, eax
}
typedef int (_cdecl *pMSFunc)(PVOID pdata, UINT len, BYTE lana);
int NAKED IFSMgr_MakeMailSlot(pMSFunc fcn, path_t pmsname, PDWORD pmshand)
{
VxDJmp(IFSMgr_MakeMailSlot)
}
int NAKED IFSMgr_DeleteMailSlot(DWORD mshand)
{
VxDJmp(IFSMgr_DeleteMailSlot)
}
int NAKED IFSMgr_WriteMailSlot(path_t pmsname, char* pdata, WORD len, BYTE lana, string_t rname, PVOID xtra)
{
VxDJmp(IFSMgr_WriteMailSlot)
}
int NAKED IFSMgr_SetErrString(char* errstr, UINT errorcode, UINT table)
{
VxDJmp(IFSMgr_SetErrString)
}
NAKED PCHAR IFSMgr_GetErrString(UINT errorcode, UINT table)
{
VxDJmp(IFSMgr_GetErrString)
}
typedef void (__cdecl *PPREAMBLE)();
NAKED PPREAMBLE IFSMgr_SetReqHook(UINT request, PPREAMBLE preamble)
{
VxDJmp(IFSMgr_SetReqHook)
}
typedef void (__cdecl *PPATHCHECKER)();
NAKED PPATHCHECKER IFSMgr_SetPathHook(PPATHCHECKER fcn)
{
VxDJmp(IFSMgr_SetPathHook)
}
#endif // Not_VxD
typedef struct _LM_GUID {
WORD guid_uid; // LM10 style user id
DWORD guid_serial; // user record serial number
BYTE guid_rsvd[10]; // pad to 16 bytes
} _LM_GUID;
typedef struct use_info_2 {
char ui2_local[9];
char ui2_pad_1;
char* ui2_remote;
char* ui2_password;
unsigned short ui2_status;
short ui2_asg_type;
unsigned short ui2_refcount;
unsigned short ui2_usecount;
unsigned short ui2_res_type;
unsigned short ui2_flags;
unsigned short ui2_usrclass;
void* ui2_dirname;
struct _LM_GUID ui2_dfs_id;
} use_info_2, *puse_info_2;
#ifndef Not_VxD
int NAKED IFSMgr_UseAdd(pioreq pir, int proId, netuse_info* pinfo)
{
VxDJmp(IFSMgr_UseAdd)
}
int NAKED IFSMgr_InitUseAdd(puse_info_2 pui2, int proId, int lana)
{
VxDJmp(IFSMgr_InitUseAdd)
}
int NAKED IFSMgr_UseDel(pioreq pir, int proId, netuse_info* pinfo)
{
VxDJmp(IFSMgr_UseDel)
}
int NAKED IFSMgr_DelAllUses(int proId, int force)
{
VxDJmp(IFSMgr_DelAllUses)
}
VOID NAKED IFSMgr_DoDelAllUses(pioreq pir)
{
VxDJmp(IFSMgr_DoDelAllUses)
}
#if 0
int VXDLINLINE NAKED IFSMgr_FSDMapFHtoIOREQ(pioreq pir, WORD doshandle)
{
VxDJmp(IFSMgr_FSDMapFHtoIOREQ)
}
#endif
int NAKED IFSMgr_CheckDelResource(PVOID rh, int force, BOOL fDelFlag)
{
VxDJmp(IFSMgr_CheckDelResource)
}
int NAKED IFSMgr_SetupFailedConnection(pioreq pir, PDWORD pProId)
{
VxDJmp(IFSMgr_SetupFailedConnection)
}
int NAKED IFSMgr_SetLoopback(char* pszUNCPath, char* pszLocalPath)
{
VxDJmp(IFSMgr_SetLoopback)
}
int NAKED IFSMgr_ClearLoopback(char* pszUNCPath)
{
VxDJmp(IFSMgr_ClearLoopback)
}
VOID NAKED IFSMgr_Block(DWORD key)
{
VxDJmp(IFSMgr_Block)
}
VOID NAKED IFSMgr_BlockNoEvents(DWORD key)
{
VxDJmp(IFSMgr_BlockNoEvents)
}
VOID NAKED IFSMgr_Wakeup(DWORD key)
{
VxDJmp(IFSMgr_Wakeup)
}
VOID NAKED IFSMgr_Yield()
{
VxDJmp(IFSMgr_Yield)
}
VOID NAKED IFSMgr_SchedEvent(pevent pev, DWORD time)
{
VxDJmp(IFSMgr_SchedEvent)
}
VOID NAKED IFSMgr_QueueEvent(pevent pev)
{
VxDJmp(IFSMgr_QueueEvent)
}
VOID NAKED IFSMgr_KillEvent(pevent pev)
{
VxDJmp(IFSMgr_KillEvent)
}
VOID NAKED IFSMgr_FreeIOReq(pioreq pir)
{
VxDJmp(IFSMgr_FreeIOReq)
}
VOID NAKED IFSMgr_RunScheduledEvents()
{
VxDJmp(IFSMgr_RunScheduledEvents)
}
UINT NAKED IFSMgr_MetaMatch(string_t pUniPattern, string_t pUniName, int matchSem)
{
VxDJmp(IFSMgr_MetaMatch)
}
int NAKED IFSMgr_TransMatch(pioreq pir, srch_entry* pse, string_t pattern, _WIN32_FIND_DATA* pFindBuf)
{
VxDJmp(IFSMgr_TransMatch)
}
UINT NAKED UniToBCSPath(PBYTE pBCSPath, PathElement* pUniPath, UINT maxLength, int charSet)
{
VxDJmp(UniToBCSPath)
}
UINT NAKED UniToBCS(PBYTE pBCSPath, string_t pUniPath, UINT length, UINT maxLength, UINT charSet)
{
VxDJmp(UniToBCS)
}
UINT NAKED BCSToUni(string_t pUniStr, PBYTE pBCSStr, UINT length, int charSet)
{
VxDJmp(BCSToUni)
}
UINT NAKED BcsToBcs(PBYTE pDest, PBYTE pSrc, UINT dstCharSet, UINT srcCharSet, UINT MaxLen)
{
VxDJmp(BcsToBcs)
}
UINT NAKED BcsToBcsUpper(PBYTE pDest, PBYTE pSrc, UINT dstCharSet, UINT srcCharSet, UINT MaxLen)
{
VxDJmp(BcsToBcsUpper)
}
UINT NAKED UniCharToOEM(WORD uniChar)
{
VxDJmp(UniCharToOEM)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -