⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ifsmgr.h

📁 Programming the Microsoft Windows driver model.2nd 随书光盘。内有很多作者送的实用工具和随书源码。WDM编程
💻 H
📖 第 1 页 / 共 2 页
字号:
// 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 + -