📄 vxdwraps.h
字号:
/****************************************************************************
* *
* THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY *
* KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE *
* IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR *
* PURPOSE. *
* *
* Copyright (C) 1993-95 Microsoft Corporation. All Rights Reserved. *
* *
****************************************************************************/
/****************************************************************************
*
* Title: VXDWRAPS.H - Include file for using VXDWRAPS.LIB
*
* Version: 1.00
*
***************************************************************************/
#ifndef _VXDWRAPS_H
#define _VXDWRAPS_H
#ifdef _VMM_
#define VMM_MAP_PHYS_TO_LINEAR_INVALID 0xFFFFFFFF
typedef VOID (_cdecl *VMM_TIMEOUT_HANDLER)();
typedef VOID (_cdecl *VMM_EVENT_HANDLER)();
typedef ULONG (_cdecl *VMMSWP)(ULONG frame, ULONG npages);
typedef VOID (_cdecl *VMMCOMS)(DWORD dwParam);
typedef struct Exception_Handler_Struc *PVMMEXCEPTION;
//typedef QWORD DESCDWORDS;
typedef DWORD VMMLIST;
typedef PVOID VMMLISTNODE;
typedef DWORD SIGNATURE;
typedef SIGNATURE *PSIGNATURE; // Pointer to a signature.
typedef struct _vmmmtx {int unused;} *PVMMMUTEX;
typedef struct cb_s *PVMMCB;
#endif // _VMM_
#define CAT_HELPER(x, y) x##y
#define CAT(x, y) CAT_HELPER(x, y)
#ifndef CURSEG
#define CURSEG() LCODE
#endif
/****************************************************************************
*
* There are two types of VxD 'C' wrappers. The ones that are VXDINLINE and
* the one that have little stubs.
*
***************************************************************************/
/****************************************************************************
*
* The following are VxD wrappers done with VXDINLINE. They must return void
* (to avoid a problem with C++), must take VOID (so that no parameter are
* used as temporary stack) and all registers are preserved. The two
* *_Debug_String also fall in that category since they need esp and ebp
* not to be in a nested stack frame.
*
***************************************************************************/
#ifdef _VMM_
VOID VXDINLINE
End_Critical_Section(VOID)
{
VMMCall(End_Critical_Section)
}
VOID VXDINLINE
Fatal_Memory_Handler(VOID)
{
VMMJmp(Fatal_Memory_Error);
}
VOID VXDINLINE
Begin_Nest_Exec(VOID)
{
VMMCall(Begin_Nest_Exec)
}
VOID VXDINLINE
End_Nest_Exec(VOID)
{
VMMCall(End_Nest_Exec)
}
VOID VXDINLINE
Resume_Exec(VOID)
{
VMMCall(Resume_Exec)
}
VOID VXDINLINE
Enable_Touch_1st_Meg(VOID)
{
VMMCall(Enable_Touch_1st_Meg)
}
VOID VXDINLINE
Disable_Touch_1st_Meg(VOID)
{
VMMCall(Disable_Touch_1st_Meg)
}
VOID VXDINLINE
Out_Debug_String(PCHAR psz)
{
__asm pushad
__asm mov esi, [psz]
VMMCall(Out_Debug_String)
__asm popad
}
VOID VXDINLINE
Queue_Debug_String(PCHAR psz, ULONG ulEAX, ULONG ulEBX)
{
_asm push esi
_asm push [ulEAX]
_asm push [ulEBX]
_asm mov esi, [psz]
VMMCall(Queue_Debug_String)
_asm pop esi
}
#endif // _VMM_
#define MAKE_HEADER(RetType, DecType, Function, Parameters) \
extern RetType DecType CAT(LCODE_, CAT(Function, Parameters)); \
extern RetType DecType CAT(ICODE_, CAT(Function, Parameters)); \
extern RetType DecType CAT(PCODE_, CAT(Function, Parameters)); \
extern RetType DecType CAT(SCODE_, CAT(Function, Parameters)); \
extern RetType DecType CAT(DCODE_, CAT(Function, Parameters)); \
extern RetType DecType CAT(CCODE_, CAT(Function, Parameters));
#define PREPEND(Name) CURSEG()##_##Name
#ifdef _VMM_
WORD VXDINLINE
Get_VMM_Version(VOID)
{
WORD w;
Touch_Register(ecx)
Touch_Register(edx)
VMMCall(Get_VMM_Version);
_asm mov [w], ax
return(w);
}
MAKE_HEADER(PVOID,_cdecl, _MapPhysToLinear, (ULONG PhysAddr, ULONG nBytes, ULONG flags))
MAKE_HEADER(PVOID,_cdecl,_HeapAllocate, (ULONG Bytes, ULONG Flags))
MAKE_HEADER(ULONG,_cdecl,_HeapFree, (PVOID Address, ULONG Flags))
MAKE_HEADER(PVOID,_cdecl,_HeapReAllocate, (PVOID pOld, ULONG Bytes, ULONG Flags))
MAKE_HEADER(ULONG,_cdecl,_HeapGetSize, (PVOID p, ULONG Flags))
MAKE_HEADER(VOID,_stdcall,Fatal_Error_Handler, (PCHAR pszMessage, DWORD dwExitFlag))
MAKE_HEADER(VOID,_stdcall,Begin_Critical_Section, (ULONG Flags))
MAKE_HEADER(HEVENT,_stdcall,Schedule_Global_Event, (VMM_EVENT_HANDLER pfnEvent, ULONG ulRefData))
MAKE_HEADER(VOID,_stdcall,Cancel_Global_Event, (HEVENT hEvent));
MAKE_HEADER(HVM,_cdecl,Get_Sys_VM_Handle, (VOID))
MAKE_HEADER(DWORD,_stdcall,Get_Profile_Hex_Int, (PCHAR pszSection, PCHAR pszKeyName, DWORD dwDefault))
MAKE_HEADER(BOOL,_stdcall,Get_Profile_Boolean, (PCHAR pszSection, PCHAR pszKeyName, BOOL fDefault))
MAKE_HEADER(VMM_SEMAPHORE,_stdcall,Create_Semaphore, (LONG lTokenCount))
MAKE_HEADER(VOID,_stdcall,Destroy_Semaphore, (VMM_SEMAPHORE vsSemaphore))
MAKE_HEADER(VOID,_stdcall,Signal_Semaphore, (VMM_SEMAPHORE vsSemaphore))
MAKE_HEADER(VOID,_stdcall,Wait_Semaphore, (VMM_SEMAPHORE vsSemaphore, DWORD dwFlags))
MAKE_HEADER(HVM,_cdecl,Get_Execution_Focus, (VOID))
MAKE_HEADER(HTIMEOUT,_stdcall,Set_VM_Time_Out, (VMM_TIMEOUT_HANDLER pfnTimeout, CMS cms, ULONG ulRefData))
MAKE_HEADER(HTIMEOUT,_stdcall,Set_Global_Time_Out, (VMM_TIMEOUT_HANDLER pfnTimeout, CMS cms, ULONG ulRefData))
MAKE_HEADER(VOID,_stdcall,Cancel_Time_Out, (HTIMEOUT htimeout))
MAKE_HEADER(VOID,_stdcall,Update_System_Clock, (ULONG msElapsed))
MAKE_HEADER(BOOL,_stdcall,Install_Exception_Handler, (PVMMEXCEPTION pveException))
MAKE_HEADER(PCHAR,_stdcall,Get_Exec_Path, (PULONG pulPathLength))
MAKE_HEADER(DWORD,_cdecl,Get_Last_Updated_System_Time, (VOID))
MAKE_HEADER(VMMLISTNODE,_stdcall,List_Allocate, (VMMLIST List))
MAKE_HEADER(VOID,_stdcall,List_Attach, (VMMLIST List, VMMLISTNODE Node))
MAKE_HEADER(VOID,_stdcall,List_Attach_Tail, (VMMLIST List, VMMLISTNODE Node))
MAKE_HEADER(VMMLIST,_stdcall,List_Create, (ULONG Flags, ULONG NodeSize))
MAKE_HEADER(VOID,_stdcall,List_Deallocate, (VMMLIST List, VMMLISTNODE Node))
MAKE_HEADER(VOID,_stdcall,List_Destroy, (VMMLIST List))
MAKE_HEADER(VMMLISTNODE,_stdcall,List_Get_First, (VMMLIST List))
MAKE_HEADER(VMMLISTNODE,_stdcall,List_Get_Next, (VMMLIST List, VMMLISTNODE Node))
MAKE_HEADER(VOID,_stdcall,List_Insert, (VMMLIST List, VMMLISTNODE NewNode, VMMLISTNODE Node))
MAKE_HEADER(BOOL,_stdcall,List_Remove, (VMMLIST List, VMMLISTNODE Node))
MAKE_HEADER(VMMLISTNODE,_stdcall,List_Remove_First, (VMMLIST List))
MAKE_HEADER(PVOID,_cdecl,_PageAllocate, (DWORD nPages, DWORD pType, HVM hvm, DWORD AlignMask, DWORD minPhys, DWORD maxPhys, PVOID *PhysAddr, DWORD flags))
MAKE_HEADER(BOOL,_cdecl,_PageFree, (PVOID hMem, DWORD flags))
MAKE_HEADER(BOOL,_cdecl,_PageReserve, (DWORD page, DWORD npages, DWORD flags))
MAKE_HEADER(BOOL,_cdecl,_PageCommitPhys, (DWORD page, DWORD npages, DWORD physpg, DWORD flags))
MAKE_HEADER(BOOL,_cdecl,_PageCommitConfig, (DWORD page, DWORD npages, DWORD flags, DWORD alignmask, DWORD minphys, DWORD maxphys))
MAKE_HEADER(DWORD,_cdecl,_AddFreePhysPage, (ULONG PhysPgNum, ULONG nPages, ULONG flags, VMMSWP pfnSwapOutNotify))
//MAKE_HEADER(WORD,_cdecl,_Allocate_GDT_Selector, (DESCDWORDS DescDWORDS, ULONG flags))
//MAKE_HEADER(DESCDWORDS,_cdecl,_BuildDescriptorDWORDs, (DWORD DESCBase, DWORD DESCLimit, DWORD DESCType, DWORD DESCSize, ULONG flags))
//MAKE_HEADER(BOOL,_cdecl,_Free_GDT_Selector, (WORD Selector, ULONG flags))
MAKE_HEADER(HVM,_cdecl,Get_Cur_VM_Handle, (VOID))
MAKE_HEADER(HVM,_cdecl,_LinPageLock, (DWORD HLinPgNum, DWORD nPages, DWORD flags))
MAKE_HEADER(HVM,_cdecl,_LinPageUnlock, (DWORD HLinPgNum, DWORD nPages, DWORD flags))
#ifdef WIN40SERVICES
MAKE_HEADER(ULONG,_cdecl,VMM_GetSystemInitState, (VOID))
MAKE_HEADER(VOID,_stdcall,_Trace_Out_Service, (PCHAR psz))
MAKE_HEADER(VOID,_stdcall,_Debug_Out_Service, (PCHAR psz))
MAKE_HEADER(VOID,_stdcall,_Debug_Flags_Service, (ULONG flags))
MAKE_HEADER(VOID,_cdecl,_Debug_Printf_Service, (PCHAR pszfmt, ...))
MAKE_HEADER(HTIMEOUT,_stdcall, Set_Async_Time_Out, (VMM_TIMEOUT_HANDLER pfnTimeout, CMS cms, ULONG ulRefData))
MAKE_HEADER(PVMMDDB,_stdcall,Get_DDB, (WORD DeviceID, PCHAR Name))
MAKE_HEADER(DWORD,_stdcall,Directed_Sys_Control, (PVMMDDB pDDB, DWORD SysControl, DWORD rEBX, DWORD rEDX, DWORD rESI, DWORD rEDI))
MAKE_HEADER(BOOL,_cdecl,_Assert_Range, (PVOID p, ULONG ulSize, SIGNATURE sSignature, LONG lSignatureOffset, ULONG ulFlags))
MAKE_HEADER(ULONG,_cdecl,_Sprintf, (PCHAR pszBuf, PCHAR pszFmt, ...))
MAKE_HEADER(PVMMMUTEX,_cdecl,_CreateMutex, (LONG Boost, ULONG Flags))
MAKE_HEADER(BOOL,_cdecl,_DestroyMutex, (PVMMMUTEX hmtx))
MAKE_HEADER(VOID,_cdecl,_EnterMutex, (PVMMMUTEX hmtx, ULONG Flags))
MAKE_HEADER(PTCB,_cdecl,_GetMutexOwner, (PVMMMUTEX hmtx))
MAKE_HEADER(VOID,_cdecl,_LeaveMutex, (PVMMMUTEX hmtx))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -