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

📄 ifsmgr.h

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



UINT NAKED UniToUpper(string_t pUniUpStr, string_t pUniStr, UINT length)

	{

	VxDJmp(UniToUpper)

	}



UINT NAKED CreateBasis(string_t pBasisName, string_t pUniName, UINT length)

	{

	VxDJmp(CreateBasis)

	}



int NAKED MatchBasisName(string_t pBasisName, string_t pName)

	{

	VxDJmp(MatchBasisName)

	}



int NAKED AppendBasisTail(string_t pBasisName, int tail)

	{

	VxDJmp(AppendBasisTail)

	}



int NAKED FcbToShort(string_t p83name, string_t pFCBName, int trailDot)

	{

	VxDJmp(FcbToShort)

	}



int NAKED ShortToFcb(string_t pFCBName, string_t p83Name, UINT length)

	{

	VxDJmp(ShortToFcb)

	}



int NAKED ShortToLossyFcb(string_t pFCBName, string_t p83Name, UINT length)

	{

	VxDJmp(ShortToLossyFcb)

	}



typedef struct _CONVTABLES

	{

	DWORD	ct_length;

	PDWORD	ct_UniToWinAnsiTbl;

	PDWORD	ct_UniToOemTbl;

	PDWORD	ct_WinAnsiToUniTbl;

	PDWORD	ct_OemToUniTable;

	PDWORD	ct_UniToUpperDeltaTbl;

	PDWORD	ct_UniToUpperTbl;

	} _CONVTABLES, *_PCONVTABLES;



_PCONVTABLES NAKED IFSMgr_GetConversionTablePtrs()

	{

	VxDJmp(IFSMgr_GetConversionTablePtrs)

	}



int NAKED IFSMgr_ParsePath(pioreq pir)

	{

	VxDJmp(IFSMgr_ParsePath)

	}



int NAKED IFSMgr_FSDParsePath(pioreq pir)

	{

	VxDJmp(IFSMgr_FSDParsePath)

	}



int NAKED IFSMgr_ParseOneElement(USHORT* pe_unichars)

	{

	VxDJmp(IFSMgr_ParseOneElement)

	}



int NAKED IFSMgr_CheckAccessConflict(int fSortCompatibleDisable, fmode_t pfmode, int (*pfn)(fmode_t*, const void*), const void* FSDCookie)

	{

	VxDJmp(IFSMgr_CheckAccessConflict)

	}



int NAKED IFSMgr_LockFile(void** ppFSDLockListHead, DWORD LockOffset, DWORD LockLength, DWORD LockOwner, PVOID pOpenFileInstance, DWORD fLockSemantics)

	{

	VxDJmp(IFSMgr_LockFile)

	}



int NAKED IFSMgr_UnlockFile(void** ppFSDLockListHead, DWORD LockOffset, DWORD LockLength, DWORD LockOwner, PVOID pOpenFileInstance, DWORD fLockSemantics)

	{

	VxDJmp(IFSMgr_UnlockFile)

	}



VOID NAKED IFSMgr_RemoveLocks(void** ppFSDLockListHead, DWORD LockOwner, PVOID pOpenFileInstance)

	{

	VxDJmp(IFSMgr_RemoveLocks)

	}



int NAKED IFSMgr_CheckLocks(PVOID pFSDLockListHead, DWORD Offset, DWORD Length, DWORD Process, PVOID pOpenFileInstance, DWORD fOperation)

	{

	VxDJmp(IFSMgr_CheckLocks)

	}



int NAKED IFSMgr_CountLocks(PVOID pFSDLockListHead, PVOID pOpenFileInstance)

	{

	VxDJmp(IFSMgr_CountLocks)

	}



VOID NAKED IFSMgr_UnassignLockList(PVOID pFSDLockListHead)

	{

	VxDJmp(IFSMgr_UnassignLockList)

	}



VOID NAKED IFSMgr_ReassignLockFileInst(PVOID pFSDLockListhead, PVOID pOldOpenFileInstance, PVOID pNewOpenFileInstance)

	{

	VxDJmp(IFSMgr_ReassignLockFileInst)

	}



VOID NAKED NotifyVolumeArrival(UINT drive)

	{

	VxDJmp(NotifyVolumeArrival)

	}



int NAKED QueryVolumeRemoval(UINT drive, int fDialog)

	{

	VxDJmp(QueryVolumeRemoval)

	}



VOID NAKED NotifyVolumeRemoval(UINT drive)

	{

	VxDJmp(NotifyVolumeRemoval)

	}



int NAKED IFSMgr_PNPEvent(UINT Message, UINT Resource, UINT Flags)

	{

	VxDJmp(IFSMgr_PNPEvent)

	}



int NAKED _VolFlush(UINT Volume, int Flags)

	{

	VxDJmp(_VolFlush)

	}



VOID NAKED IFSMgr_CompleteAsync(pioreq pir)

	{

	VxDJmp(IFSMgr_CompleteAsync)

	}



int VXDINLINE R0_OpenCreateFile(BOOL incontext, WORD modeflags, WORD attrib, BYTE action, BYTE flags, char* pathname, PDWORD phandle, PDWORD paction)

	{

	DWORD opcode = incontext ? R0_OPENCREAT_IN_CONTEXT : R0_OPENCREATFILE;

	WORD result;

	_asm

		{

		mov	eax, opcode

		mov bx, modeflags

		mov cx, attrib

		mov dl, action

		mov dh, flags

		mov esi, pathname

		}

	VxDCall(IFSMgr_Ring0_FileIO)

	_asm

		{

		jc	error

		mov ebx, phandle

		mov [ebx], eax

		mov ebx, paction

		movzx ecx, cl

		mov [ebx], ecx

		xor eax, eax

		

	error:

		mov	result, ax

		}

	return result;

	}



int VXDINLINE R0_ReadFile(BOOL incontext, DWORD handle, DWORD count, DWORD pos, PBYTE buffer, PDWORD nread)

	{

	DWORD opcode = incontext ? R0_READFILE_IN_CONTEXT : R0_READFILE;

	WORD result;

	_asm

		{

		mov	eax, opcode

		mov	ebx, handle

		mov ecx, count

		mov edx, pos

		mov esi, buffer

		}

	VxDCall(IFSMgr_Ring0_FileIO)

	_asm

		{

		jc	error

		mov ebx, nread

		mov [ebx], eax

		xor eax, eax

	error:

		mov	result, ax

		}

	return result;

	}



int VXDINLINE R0_WriteFile(BOOL incontext, DWORD handle, DWORD count, DWORD pos, const BYTE* buffer, PDWORD nwritten)

	{

	DWORD opcode = incontext ? R0_WRITEFILE_IN_CONTEXT : R0_WRITEFILE;

	WORD result;

	_asm

		{

		mov	eax, opcode

		mov	ebx, handle

		mov ecx, count

		mov edx, pos

		mov esi, buffer

		}

	VxDCall(IFSMgr_Ring0_FileIO)

	_asm

		{

		jc	error

		mov ebx, nwritten

		mov [ebx], eax

		xor eax, eax

	error:

		mov result, ax

		}

	return result;

	}



int VXDINLINE R0_CloseFile(DWORD handle)

	{

	_asm

		{

		mov	eax, R0_CLOSEFILE

		mov ebx, handle

		}

	VxDCall(IFSMgr_Ring0_FileIO)

	_asm jc error

	_asm xor eax, eax

	_asm error:

	_asm movzx eax, ax

	}



int VXDINLINE R0_GetFileSize(DWORD handle, PDWORD psize)

	{

	_asm

		{

		mov	eax, R0_GETFILESIZE

		mov ebx, handle

		}

	VxDCall(IFSMgr_Ring0_FileIO)

	_asm

		{

		jc	error

		mov ebx, psize

		mov [ebx], eax

		xor	eax, eax

	error:

		movzx eax, ax

		}

	}



int VXDINLINE R0_FindFirstFile(WORD attrib, const char* pathname, _WIN32_FIND_DATA* fd, PDWORD phandle)

	{

	_asm

		{

		mov	eax, R0_FINDFIRSTFILE

		mov	esi, pathname

		mov edx, fd

		mov	cx, attrib

		}

	VxDCall(IFSMgr_Ring0_FileIO)

	_asm

		{

		jc	error

		mov ebx, phandle

		mov [ebx], eax

		xor eax, eax

	error:

		movzx eax, ax

		}

	}



int VXDINLINE R0_FindNextFile(DWORD handle, _WIN32_FIND_DATA* fd)

	{

	_asm

		{

		mov	eax, R0_FINDNEXTFILE

		mov ebx, handle

		mov edx, fd

		}

	VxDCall(IFSMgr_Ring0_FileIO)

	_asm jc error

	_asm xor eax, eax

	_asm error:

	_asm movzx eax, ax

	}



int VXDINLINE R0_FindClose(DWORD handle)

	{

	_asm

		{

		mov	eax, R0_FINDCLOSEFILE

		mov ebx, handle

		}

	VxDCall(IFSMgr_Ring0_FileIO)

	_asm jc error

	_asm xor eax, eax

	_asm error:

	_asm movzx eax, ax

	}



int VXDINLINE R0_GetFileAttributes(const char* pathname, PWORD pattrib)

	{

	_asm

		{

		mov	eax, R0_FILEATTRIBUTES or GET_ATTRIBUTES

		mov esi, pathname

		}

	VxDCall(IFSMgr_Ring0_FileIO)

	_asm

		{

		jc	error

		mov ebx, pattrib

		mov word ptr [ebx], cx

		xor eax, eax

	error:

		movzx eax, ax

		}

	}



int VXDINLINE R0_SetFileAttributes(const char* pathname, WORD attrib)

	{

	_asm

		{

		mov	eax, R0_FILEATTRIBUTES or SET_ATTRIBUTES

		mov cx, attrib

		mov esi, pathname

		}

	VxDCall(IFSMgr_Ring0_FileIO)

	_asm jc error

	_asm xor eax, eax

	_asm error:

	_asm movzx eax, ax

	}



int VXDINLINE R0_RenameFile(const char* oldname, const char* newname)

	{

	_asm

		{

		mov	eax, R0_RENAMEFILE

		mov esi, oldname

		mov edx, newname

		}

	VxDCall(IFSMgr_Ring0_FileIO)

	_asm jc error

	_asm xor eax, eax

	_asm error:

	_asm movzx eax, ax

	}



int VXDINLINE R0_DeleteFile(const char* pathname, WORD attrib)

	{

	_asm

		{

		mov eax, R0_DELETEFILE

		mov cx, attrib

		mov esi, pathname

		}

	VxDCall(IFSMgr_Ring0_FileIO)

	_asm jc error

	_asm xor eax, eax

	_asm error:

	_asm movzx eax, ax

	}



int VXDINLINE R0_LockFile(DWORD handle, DWORD pid, DWORD dwOffset, DWORD dwLength)

	{

	_asm

		{

		mov eax, R0_LOCKFILE or LOCK_REGION

		mov ebx, handle

		mov ecx, pid

		mov edx, dwOffset

		mov esi, dwLength

		}

	VxDCall(IFSMgr_Ring0_FileIO)

	_asm jc error

	_asm xor eax, eax

	_asm error:

	_asm movzx eax, ax

	}



int VXDINLINE R0_UnlockFile(DWORD handle, DWORD pid, DWORD dwOffset, DWORD dwLength)

	{

	_asm

		{

		mov eax, R0_LOCKFILE or UNLOCK_REGION

		mov ebx, handle

		mov ecx, pid

		mov edx, dwOffset

		mov esi, dwLength

		}

	VxDCall(IFSMgr_Ring0_FileIO)

	_asm jc error

	_asm xor eax, eax

	_asm error:

	_asm movzx eax, ax

	}



int VXDINLINE R0_GetDiskFreeSpace(BYTE drive, PWORD pspc, PWORD pavl, PWORD psecsize, PWORD ptot)

	{

	_asm

		{

		mov	eax, R0_GETDISKFREESPACE

		mov dl, drive

		}

	VxDCall(IFSMgr_Ring0_FileIO)

	_asm

		{

		jc	error

		mov esi, pspc

		mov word ptr [esi], ax		; sectors per cluster

		mov esi, pavl

		mov word ptr [esi], bx		; available clusters

		mov esi, psecsize

		mov word ptr [esi], cx		; bytes per sector

		mov esi, ptot

		mov word ptr [esi], dx		; total clusters on disk

		xor eax, eax

	error:

		movzx eax, ax

		}

	}



int VXDINLINE R0_ReadAbsoluteDisk(BYTE drive, UINT nsectors, DWORD sector, PBYTE buffer)

	{

	_asm

		{

		mov	al, drive

		mov ah, R0_READABSOLUTEDISK shr 8

		mov ecx, nsectors

		mov edx, sector

		mov esi, buffer

		}

	VxDCall(IFSMgr_Ring0_FileIO)

	_asm jc error

	_asm xor eax, eax

	_asm error:

	_asm movzx eax, ax

	}



int VXDINLINE R0_WriteAbsoluteDisk(BYTE drive, UINT nsectors, DWORD sector, const BYTE* buffer)

	{

	_asm

		{

		mov	al, drive

		mov ah, R0_WRITEABSOLUTEDISK shr 8

		mov ecx, nsectors

		mov edx, sector

		mov esi, buffer

		}

	VxDCall(IFSMgr_Ring0_FileIO)

	_asm jc error

	_asm xor eax, eax

	_asm error:

	_asm movzx eax, ax

	}



int VXDINLINE IFSMgr_Ring0GetDriveInfo(UINT drive)

	{

	_asm mov edx, drive

	VxDCall(IFSMgr_Ring0_FileIO)

	_asm

		{

		jnc	noerror

		mov eax, -1

	noerror:

		}

	}



ppIFSFileHookFunc NAKED IFSMgr_InstallFileSystemApiHook(pIFSFileHookFunc fcn)

	{

	VxDJmp(IFSMgr_InstallFileSystemApiHook)

	}



int NAKED IFSMgr_RemoveFileSystemApiHook(pIFSFileHookFunc fcn)

	{

	VxDJmp(IFSMgr_RemoveFileSystemApiHook)

	}



int NAKED IFSMgr_CDROM_Attach(DWORD drive, struct _VRP** pvrp, int fDoMount)

	{

	VxDJmp(IFSMgr_CDROM_Attach)

	}



int NAKED IFSMgr_CDROM_Detach(DWORD Drive, struct _VRP* vrp)

	{

	VxDJmp(IFSMgr_CDROM_Detach)

	}



int NAKED IFSMgr_FSDUnmountCFSD(DWORD rh)

	{

	VxDJmp(IFSMgr_FSDUnmountCFSD)

	}



int NAKED IFSMgr_MountChildVolume(struct _VRP* vrp, DWORD drive)

	{

	VxDJmp(IFSMgr_MountChildVolume)

	}



int NAKED IFSMgr_UnmountChildVolume(struct _VRP* vrp, DWORD drive)

	{

	VxDJmp(IFSMgr_UnmountChildVolume)

	}



int NAKED IFSMgr_SwapDrives(struct _VRP* vrp, DWORD drive1, DWORD drive2)

	{

	VxDJmp(IFSMgr_SwapDrives)

	}



int NAKED IFSMgr_FSDGetCurrentDrive(pioreq pir)

	{

	VxDJmp(IFSMgr_FSDGetCurrentDrive)

	}



int NAKED _GetMappedErr(UINT Function, UINT ExtErr)

	{

	VxDJmp(_GetMappedErr)

	}



int NAKED IFSMgr_GetLockState(DWORD drive, PDWORD pLockType, PDWORD pLockFlags, PDWORD pLockOwner)

	{

	VxDJmp(IFSMgr_GetLockState)

	}



BOOL VXDINLINE Query_PhysLock(DWORD unit)

	{

	_asm mov eax, unit

	VxDCall(Query_PhysLock)

	_asm sbb eax, eax			; CF set if process doesn't own volume lock, so return is -1 if unowned, 0 if owned

	}



VOID NAKED IFSMgr_printf(const char* pfstr, ...)

	{

	VxDJmp(IFSMgr_printf)

	}



#ifdef DEBUG

#define IFSASSERT(x) if (!(x)) IFSMgr_AssertFailed(#x, __FILE__, __LINE__)

VOID NAKED IFSMgr_AssertFailed(const char* msg, const char* pfname, DWORD line)

	{

	VxDJmp(IFSMgr_AssertFailed)

	}

VOID NAKED IFSMgr_LogEntry(const char* name, DWORD info1, DWORD info2, int sdepth, DWORD mask)

	{

	VxDJmp(IFSMgr_LogEntry)

	}

DWORD NAKED IFSMgr_DebugMenu(PVOID pm)

	{

	VxDJmp(IFSMgr_DebugMenu)

	}

DWORD NAKED IFSMgr_DebugVars()

	{

	VxDJmp(IFSMgr_DebugVars)

	}

int NAKED IFSMgr_GetDebugString(const char* prompt, char* buffer, UINT length)

	{

	VxDJmp(IFSMgr_GetDebugString)

	}

int NAKED IFSMgr_GetDebugHexNum(const char* prompt, PDWORD phexval)

	{

	VxDJmp(IFSMgr_GetDebugHexNum)

	}

DWORD NAKED IFSMgr_DbgSetFileHandleLimit(DWORD MaxHandles)

	{

	VxDJmp(IFSMgr_DbgSetFileHandleLimit)

	}

#else

#define IFSASSERT(x)

#define IFSMgr_Assert_Failed(a1, a2, a3)

#define IFSMgr_LogEntry(a1, a2, a3, a4, a5)

#define IFSMgr_DebugMenu(a1) NULL

#define IFSMgr_DebugVars() NULL

#define IFSMgr_GetDebugString(a1, a2, a3) 0

#define IFSMgr_GetDebugHexNum(a1, a2) 0

#define IFSMgr_DbgSetFileHandleLimit(a1) a1

#endif



//#pragma warning(default:4035)

#endif // Not_VxD



#ifdef __cplusplus

}

#endif



#endif // IFSMGR_H



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -