Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

162 lines
4.9 KiB

/*++
Copyright (c) 1998-2000 Microsoft Corporation
Module Name:
ia64bt.h
Abstract:
Header for calling IA32 Execution layer if it exists
Author:
22-Aug-2000 v-cspira (charles spirakis)
--*/
#ifndef _BINTRANS_INCLUDE
#define _BINTRANS_INCLUDE
#ifdef __cplusplus
extern "C" {
#endif
//
// Create the typedefs for the functions we can import from the IA32 Execution
// layer. These functions are duplicates of the wow64cpu export list for both
// what they do and the parameters they take. Any changes to the wow64cpu
// list should also update these typedefs
//
//
// Cache manipulation functions and Dll notification
//
typedef VOID (*PFNCPUFLUSHINSTRUCTIONCACHE)( HANDLE ProcessHandle, PVOID BaseAddress, ULONG Length, WOW64_FLUSH_REASON Reason );
typedef VOID (*PFNCPUNOTIFYDLLLOAD)( LPWSTR DllName, PVOID DllBase, ULONG DllSize );
typedef VOID (*PFNCPUNOTIFYDLLUNLOAD)( PVOID DllBase );
//
// Init and term APIs
//
typedef NTSTATUS (*PFNCPUPROCESSINIT)(PWSTR pImageName, PSIZE_T pCpuThreadDataSize);
typedef NTSTATUS (*PFNCPUPROCESSTERM)(HANDLE ProcessHandle);
typedef NTSTATUS (*PFNCPUTHREADINIT)(PVOID pPerThreadData);
typedef NTSTATUS (*PFNCPUTHREADTERM)(VOID);
//
// Execution
//
typedef VOID (*PFNCPUSIMULATE)(VOID);
//
// Exception handling, context manipulation
//
typedef VOID (*PFNCPURESETTOCONSISTENTSTATE)(PEXCEPTION_POINTERS pExecptionPointers);
typedef ULONG (*PFNCPUGETSTACKPOINTER)(VOID);
typedef VOID (*PFNCPUSETSTACKPOINTER)(ULONG Value);
typedef VOID (*PFNCPUSETINSTRUCTIONPOINTER)(ULONG Value);
typedef VOID (*PFNCPUSETFLOATINGPOINT)(VOID);
typedef NTSTATUS (*PFNCPUSUSPENDTHREAD)( IN HANDLE ThreadHandle, IN HANDLE ProcessHandle, IN PTEB Teb, OUT PULONG PreviousSuspendCount OPTIONAL);
typedef NTSTATUS (*PFNCPUGETCONTEXT)( IN HANDLE ThreadHandle, IN HANDLE ProcessHandle, IN PTEB Teb, OUT PCONTEXT32 Context);
typedef NTSTATUS (*PFNCPUSETCONTEXT)( IN HANDLE ThreadHandle, IN HANDLE ProcessHandle, IN PTEB Teb, PCONTEXT32 Context);
typedef BOOLEAN (*PFNCPUPROCESSDEBUGEVENT)(IN LPDEBUG_EVENT DebugEvent);
//
// Need the entry point names as well
// This is what needs to be exported from the binary translation dll
// The LdrGetProcedureAddress() uses Ansi, so these are ansi too
//
// NOTE: the order of these strings must match the order
// of the corresponding functions in the _bintrans structure below
//
PUCHAR BtImportList[] = {
"BTCpuProcessInit",
"BTCpuProcessTerm",
"BTCpuThreadInit",
"BTCpuThreadTerm",
"BTCpuSimulate",
"BTCpuGetStackPointer",
"BTCpuSetStackPointer",
"BTCpuSetInstructionPointer",
"BTCpuResetFloatingPoint",
"BTCpuSuspendThread",
"BTCpuGetContext",
"BTCpuSetContext",
"BTCpuResetToConsistentState",
"BTCpuFlushInstructionCache",
"BTCpuNotifyDllLoad",
"BTCpuNotifyDllUnload",
"BTCpuProcessDebugEvent"
};
//
// NOTE: The order of entries in this structure MUST match the
// order of entries listed above. This structure gets cast
// into a PVOID struction to be filled in and we iterate though the
// names above to do it...
//
typedef struct _bintrans {
PFNCPUPROCESSINIT BtProcessInit;
PFNCPUPROCESSTERM BtProcessTerm;
PFNCPUTHREADINIT BtThreadInit;
PFNCPUTHREADTERM BtThreadTerm;
PFNCPUSIMULATE BtSimulate;
PFNCPUGETSTACKPOINTER BtGetStack;
PFNCPUSETSTACKPOINTER BtSetStack;
PFNCPUSETINSTRUCTIONPOINTER BtSetEip;
PFNCPUSETFLOATINGPOINT BtResetFP;
PFNCPUSUSPENDTHREAD BtSuspend;
PFNCPUGETCONTEXT BtGetContext;
PFNCPUSETCONTEXT BtSetContext;
PFNCPURESETTOCONSISTENTSTATE BtReset;
PFNCPUFLUSHINSTRUCTIONCACHE BtFlush;
PFNCPUNOTIFYDLLLOAD BtDllLoad;
PFNCPUNOTIFYDLLUNLOAD BtDllUnload;
PFNCPUPROCESSDEBUGEVENT BtProcessDebugEvent;
} BINTRANS;
//
// The binary translator is enabled by a key in the registry
// The key is in HKLM, and there are subkeys for enabling (1)
//
// No subkey area and/or no enable key means don't use the binary translator.
//
// The path must be specified and is used to load the dll. Thus, the dll can
// actually have any name as long as the path is right and the export list
// is correct.
//
// Individual apps can be listed here with a DWORD subkey. A
// value of 1 says use btrans, and a value of 0 says don't. No value says
// use the global enable/disable to decide
//
//
//
#define BTKEY_SUBKEY L"Software\\Microsoft\\Wow64\\IA32Exec"
#define BTKEY_MACHINE_SUBKEY L"\\Registry\\Machine\\Software\\Microsoft\\Wow64\\IA32Exec"
#define BTKEY_ENABLE L"Enable"
#define BTKEY_PATH L"Path"
#ifdef __cplusplus
}
#endif
#endif //_BINTRANS_INCLUDE