windows-nt/Source/XPSP1/NT/base/wow64/mscpu/inc/wx86.h
2020-09-26 16:20:57 +08:00

125 lines
2.3 KiB
C

/*++
Copyright (c) 1994-2000 Microsoft Corporation
Module Name:
wx86.h
Abstract:
Public exports, defines for wx86.dll
Author:
10-Jan-1995 Jonle,Created
Revision History:
24-Aug-1999 [askhalid] isolated some definition from wow64
and define some proxy and wrapper functions.
--*/
#include <wow64.h>
#if !defined(_WX86CPUAPI_)
#define WX86CPUAPI DECLSPEC_IMPORT
#else
#define WX86CPUAPI
#endif
#ifdef __cplusplus
extern "C" {
#endif
typedef struct _ConfigVariable {
LIST_ENTRY ConfigEntry;
DWORD Data;
UNICODE_STRING Name;
WCHAR Buffer[1];
} CONFIGVAR, *PCONFIGVAR;
PCONFIGVAR
Wx86FetchConfigVar(
PWSTR VariableName
);
VOID
Wx86RaiseStatus(
NTSTATUS Status
);
void
Wx86RaiseInterrupt(
ULONG IntNum,
ULONG EipVal,
ULONG EspVal,
BOOL bParameter,
ULONG Parameter
);
VOID
Wx86FreeConfigVar(
PCONFIGVAR ConfigVar
);
#define BOPFL_ENDCODE 0x01
typedef struct _BopInstr {
BYTE Instr1; // 0xc4c4 - the x86 BOP instruction
BYTE Instr2;
BYTE BopNum;
BYTE Flags;
USHORT ApiNum;
BYTE RetSize;
BYTE ArgSize;
} BOPINSTR;
typedef UNALIGNED BOPINSTR * PBOPINSTR;
void
Wx86DispatchBop(
PBOPINSTR Bop
);
/////////////////////////////////
#define ProxyGetCurrentThreadId() \
HandleToUlong(NtCurrentTeb()->ClientId.UniqueThread)
#define ProxyDebugBreak() \
DbgBreakPoint()
BOOL ProxyIsProcessorFeaturePresent (DWORD feature);
VOID ProxyRaiseException(
IN DWORD dwExceptionCode,
IN DWORD dwExceptionFlags,
IN DWORD nNumberOfArguments,
IN CONST ULONG_PTR *lpArguments
);
WX86CPUAPI DWORD GetEdi(PVOID CpuContext);
WX86CPUAPI VOID SetEdx(PVOID CpuContext, DWORD val);
WX86CPUAPI VOID SetEdi(PVOID CpuContext, DWORD val);
WX86CPUAPI DWORD GetEfl(PVOID CpuContext);
WX86CPUAPI VOID SetEfl(PVOID CpuContext, DWORD val);
WX86CPUAPI DWORD GetEsp(PVOID CpuContext);
WX86CPUAPI VOID SetEip(PVOID CpuContext, DWORD val);
WX86CPUAPI VOID SetEsp(PVOID CpuContext, DWORD val);
WX86CPUAPI DWORD GetEip(PVOID CpuContext);
DWORD ProxyWowDispatchBop(
ULONG ServiceNumber,
PVOID Context32,
PULONG ArgBase
);
double Proxylog10( double x );
double Proxyatan2( double y, double x );
#ifdef __cplusplus
}
#endif