592 lines
9.3 KiB
C
592 lines
9.3 KiB
C
|
/************************************************************************
|
||
|
* *
|
||
|
* wx86dll.h -- This module defines Wx86 APIs for x86 emulation *
|
||
|
* *
|
||
|
* Copyright (c) 1990-1999, Microsoft Corp. All rights reserved. *
|
||
|
* *
|
||
|
************************************************************************/
|
||
|
#ifndef _WX86DLL_
|
||
|
#define _WX86DLL_
|
||
|
|
||
|
#if _MSC_VER > 1000
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
#if !defined(_WX86DLLAPI_)
|
||
|
#define WX86DLLAPI DECLSPEC_IMPORT
|
||
|
#else
|
||
|
#define WX86DLLAPI
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
|
||
|
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;
|
||
|
|
||
|
|
||
|
typedef
|
||
|
BOOL
|
||
|
(*WX86OFLYINITIALIZE_ROUTINE)(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
BOOL
|
||
|
Wx86OFlyInitialize(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
HMODULE
|
||
|
Wx86LoadX86Dll(
|
||
|
LPCWSTR lpLibFileName,
|
||
|
DWORD dwFlags
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
HMODULE
|
||
|
(*WX86LOADX86DLL_ROUTINE)(
|
||
|
LPCWSTR lpLibFileName,
|
||
|
DWORD dwFlags
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
HMODULE
|
||
|
Wx86GetX86DllHandle(
|
||
|
LPCWSTR lpLibFileName
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
HMODULE
|
||
|
(*WX86GETX86DLLHANDLE_ROUTINE)(
|
||
|
LPCWSTR lpLibFileName
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
BOOL
|
||
|
Wx86FreeX86Dll(
|
||
|
HMODULE hMod
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
BOOL
|
||
|
(*WX86FREEX86Dll_ROUTINE)(
|
||
|
HMODULE hMod
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
BOOL
|
||
|
Wx86Compact(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
BOOL
|
||
|
(*WX86COMPACT_ROUTINE)(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
PVOID
|
||
|
Wx86ThunkProc(
|
||
|
PVOID pvAddress,
|
||
|
PVOID pvCBDispatch,
|
||
|
BOOL fNativeToX86
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
PVOID
|
||
|
Wx86DualThunkProc(
|
||
|
PVOID pvAddress,
|
||
|
PVOID pvCBDispatch,
|
||
|
BOOL fNativeToX86
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
PVOID
|
||
|
(*WX86THUNKPROC_ROUTINE)(
|
||
|
PVOID pvAddress,
|
||
|
PVOID pvCBDispatch,
|
||
|
BOOL fNativeToX86
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
ULONG
|
||
|
(*X86TONATIVETHUNKPROC)(
|
||
|
PVOID pvNativeAddress,
|
||
|
PULONG pBaseArgs,
|
||
|
PULONG pArgCount
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
ULONG
|
||
|
Wx86ThunkEmulateX86(
|
||
|
ULONG nParameters,
|
||
|
PULONG Parameters
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
ULONG
|
||
|
(*WX86THUNKEMULATEX86)(
|
||
|
ULONG nParameters,
|
||
|
PULONG Parameters
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
ULONG
|
||
|
Wx86EmulateX86(
|
||
|
PVOID StartAddress,
|
||
|
ULONG nParameters,
|
||
|
PULONG Parameters
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
ULONG
|
||
|
(*WX86EMULATEX86)(
|
||
|
PVOID StartAddress,
|
||
|
ULONG nParameters,
|
||
|
PULONG Parameters
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
IUnknown *
|
||
|
Wx86ThunkInterface(
|
||
|
IUnknown *punk,
|
||
|
IID *piid,
|
||
|
BOOLEAN fOutParameter,
|
||
|
BOOLEAN fNativeToX86
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
IUnknown *
|
||
|
(*WX86THUNKINTERFACE)(
|
||
|
IUnknown *punk,
|
||
|
IID *piid,
|
||
|
BOOL fOutParameter,
|
||
|
BOOL fNativeToX86
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
void
|
||
|
Wx86CheckFreeTempProxy(
|
||
|
IUnknown *punk
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
void
|
||
|
(*WX86CHECKFREETEMPPROXY)(
|
||
|
IUnknown *punk
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
IUnknown *
|
||
|
Wx86ResolveProxy(
|
||
|
IUnknown *punk,
|
||
|
BOOLEAN fNativeToX86);
|
||
|
|
||
|
typedef
|
||
|
IUnknown *
|
||
|
(*WX86RESOLVEPROXY)(
|
||
|
IUnknown *punk,
|
||
|
BOOLEAN fNativeToX86);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
ULONG
|
||
|
Wx86ProxyAddRef(IUnknown* punk);
|
||
|
|
||
|
typedef
|
||
|
ULONG
|
||
|
(*WX86PROXYADDREF)(
|
||
|
IUnknown *punk);
|
||
|
|
||
|
|
||
|
WX86DLLAPI
|
||
|
ULONG
|
||
|
Wx86ProxyRelease(IUnknown* punk);
|
||
|
|
||
|
typedef
|
||
|
ULONG
|
||
|
(*WX86PROXYRELEASE)(
|
||
|
IUnknown *punk);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
HRESULT
|
||
|
Wx86DllGetClassObjectThunk(
|
||
|
IID *piid,
|
||
|
LPVOID *ppv,
|
||
|
HRESULT hr,
|
||
|
BOOLEAN fNativetoX86);
|
||
|
|
||
|
typedef
|
||
|
HRESULT
|
||
|
(*WX86DLLGETCLASSOBJECTTHUNK)(
|
||
|
IID *piid,
|
||
|
LPVOID *ppv,
|
||
|
HRESULT hr,
|
||
|
BOOLEAN fNativetoX86);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
PVOID *
|
||
|
Wx86InitializeOle(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
typedef
|
||
|
PVOID *
|
||
|
(*W86INITIALIZEOLE)(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
void
|
||
|
Wx86DeinitializeOle(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
WX86DEINITIALIZEOLE(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegCreateKeyA(
|
||
|
HKEY hKey,
|
||
|
LPCSTR lpSubKey,
|
||
|
PHKEY phkResult
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegCreateKeyW(
|
||
|
HKEY hKey,
|
||
|
LPCWSTR lpSubKey,
|
||
|
PHKEY phkResult
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegCreateKeyExA(
|
||
|
HKEY hKey,
|
||
|
LPCSTR lpSubKey,
|
||
|
DWORD Reserved,
|
||
|
LPSTR lpClass,
|
||
|
DWORD dwOptions,
|
||
|
REGSAM samDesired,
|
||
|
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
|
||
|
PHKEY phkResult,
|
||
|
LPDWORD lpdwDisposition
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegCreateKeyExW(
|
||
|
HKEY hKey,
|
||
|
LPCWSTR lpSubKey,
|
||
|
DWORD Reserved,
|
||
|
LPWSTR lpClass,
|
||
|
DWORD dwOptions,
|
||
|
REGSAM samDesired,
|
||
|
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
|
||
|
PHKEY phkResult,
|
||
|
LPDWORD lpdwDisposition
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegDeleteKeyA(
|
||
|
HKEY hKey,
|
||
|
LPCSTR lpKeyName
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegDeleteKeyW(
|
||
|
HKEY hKey,
|
||
|
LPCWSTR lpKeyName
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegEnumKeyA(
|
||
|
HKEY hKey,
|
||
|
DWORD dwIndex,
|
||
|
LPSTR lpName,
|
||
|
DWORD cbName
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegEnumKeyW(
|
||
|
HKEY hKey,
|
||
|
DWORD dwIndex,
|
||
|
LPWSTR lpName,
|
||
|
DWORD cbName
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegEnumKeyExA(
|
||
|
HKEY hKey,
|
||
|
DWORD dwIndex,
|
||
|
LPSTR lpName,
|
||
|
LPDWORD lpcbName,
|
||
|
LPDWORD lpReserved,
|
||
|
LPSTR lpClass,
|
||
|
LPDWORD lpcbClass,
|
||
|
PFILETIME lpftLastWriteTime
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegEnumKeyExW(
|
||
|
HKEY hKey,
|
||
|
DWORD dwIndex,
|
||
|
LPWSTR lpName,
|
||
|
LPDWORD lpcbName,
|
||
|
LPDWORD lpReserved,
|
||
|
LPWSTR lpClass,
|
||
|
LPDWORD lpcbClass,
|
||
|
PFILETIME lpftLastWriteTime
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegOpenKeyA(
|
||
|
HKEY hKey,
|
||
|
LPCSTR lpSubKey,
|
||
|
PHKEY phkResult
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegOpenKeyW(
|
||
|
HKEY hKey,
|
||
|
LPCWSTR lpSubKey,
|
||
|
PHKEY phkResult
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegOpenKeyExA(
|
||
|
HKEY hKey,
|
||
|
LPCSTR lpSubKey,
|
||
|
DWORD dwOptions,
|
||
|
REGSAM samDesired,
|
||
|
PHKEY phkResult
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegOpenKeyExW(
|
||
|
HKEY hKey,
|
||
|
LPCWSTR lpSubKey,
|
||
|
DWORD dwOptions,
|
||
|
REGSAM samDesired,
|
||
|
PHKEY phkResult
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegQueryValueA(
|
||
|
HKEY hKey,
|
||
|
LPCSTR lpSubKey,
|
||
|
LPSTR lpData,
|
||
|
PLONG lpcbData
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegQueryValueW(
|
||
|
HKEY hKey,
|
||
|
LPCWSTR lpSubKey,
|
||
|
LPWSTR lpData,
|
||
|
PLONG lpcbData
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegQueryValueExA(
|
||
|
HKEY hKey,
|
||
|
LPCSTR lpValueName,
|
||
|
LPDWORD lpReserved,
|
||
|
LPDWORD lpdwType,
|
||
|
LPBYTE lpData,
|
||
|
LPDWORD lpcbData
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegQueryValueExW(
|
||
|
HKEY hKey,
|
||
|
LPCWSTR lpValueName,
|
||
|
LPDWORD lpReserved,
|
||
|
LPDWORD lpdwType,
|
||
|
LPBYTE lpData,
|
||
|
LPDWORD lpcbData
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegSetValueA(
|
||
|
HKEY hKey,
|
||
|
LPCSTR lpSubKey,
|
||
|
DWORD dwType,
|
||
|
LPCSTR lpData,
|
||
|
DWORD cbData
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegSetValueW(
|
||
|
HKEY hKey,
|
||
|
LPCWSTR lpSubKey,
|
||
|
DWORD dwType,
|
||
|
LPCWSTR lpData,
|
||
|
DWORD cbData
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegSetValueExA(
|
||
|
HKEY hKey,
|
||
|
LPCSTR lpValueName,
|
||
|
DWORD Reserved,
|
||
|
DWORD dwType,
|
||
|
CONST BYTE* lpData,
|
||
|
DWORD cbData
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegSetValueExW(
|
||
|
HKEY hKey,
|
||
|
LPCWSTR lpValueName,
|
||
|
DWORD Reserved,
|
||
|
DWORD dwType,
|
||
|
CONST BYTE* lpData,
|
||
|
DWORD cbData
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegDeleteValueA(
|
||
|
HKEY hKey,
|
||
|
LPCSTR lpValueName
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegDeleteValueW(
|
||
|
HKEY hKey,
|
||
|
LPCWSTR lpValueName
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegEnumValueA(
|
||
|
HKEY hKey,
|
||
|
DWORD dwIndex,
|
||
|
LPSTR lpValueName,
|
||
|
LPDWORD lpcbValueName,
|
||
|
LPDWORD lpReserved,
|
||
|
LPDWORD lpType,
|
||
|
LPBYTE lpData,
|
||
|
LPDWORD lpcbData
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegEnumValueW(
|
||
|
HKEY hKey,
|
||
|
DWORD dwIndex,
|
||
|
LPWSTR lpValueName,
|
||
|
LPDWORD lpcbValueName,
|
||
|
LPDWORD lpReserved,
|
||
|
LPDWORD lpType,
|
||
|
LPBYTE lpData,
|
||
|
LPDWORD lpcbData
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegQueryMultipleValuesA(
|
||
|
HKEY hKey,
|
||
|
PVALENTA val_list,
|
||
|
DWORD num_vals,
|
||
|
LPSTR lpValueBuf,
|
||
|
LPDWORD ldwTotsize
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegQueryMultipleValuesW(
|
||
|
HKEY hKey,
|
||
|
PVALENTW val_list,
|
||
|
DWORD num_vals,
|
||
|
LPWSTR lpValueBuf,
|
||
|
LPDWORD ldwTotsize
|
||
|
);
|
||
|
|
||
|
WX86DLLAPI
|
||
|
LONG
|
||
|
Wx86RegCloseKey(
|
||
|
HKEY hKey
|
||
|
);
|
||
|
|
||
|
#ifdef UNICODE
|
||
|
|
||
|
#define Wx86RegCreateKey Wx86RegCreateKeyA
|
||
|
#define Wx86RegCreateKeyEx Wx86RegCreateKeyExA
|
||
|
#define Wx86RegDeleteKey Wx86RegDeleteKeyA
|
||
|
#define Wx86RegEnumKey Wx86RegEnumKeyA
|
||
|
#define Wx86RegEnumKeyEx Wx86RegEnumKeyExA
|
||
|
#define Wx86RegOpenKey Wx86RegOpenKeyA
|
||
|
#define Wx86RegOpenKeyEx Wx86RegOpenKeyExA
|
||
|
#define Wx86RegQueryValue Wx86RegQueryValueA
|
||
|
#define Wx86RegQueryValueEx Wx86RegQueryValueExA
|
||
|
#define Wx86RegSetValue Wx86RegSetValueA
|
||
|
#define Wx86RegSetValueEx Wx86RegSetValueExA
|
||
|
#define Wx86RegDeleteValue Wx86RegDeleteValueA
|
||
|
#define Wx86RegEnumValue Wx86RegEnumValueA
|
||
|
#define Wx86RegQueryMultipleValues Wx86RegQueryMultipleValuesA
|
||
|
|
||
|
#else
|
||
|
|
||
|
#define Wx86RegCreateKey Wx86RegCreateKeyW
|
||
|
#define Wx86RegCreateKeyEx Wx86RegCreateKeyExW
|
||
|
#define Wx86RegDeleteKey Wx86RegDeleteKeyW
|
||
|
#define Wx86RegEnumKey Wx86RegEnumKeyW
|
||
|
#define Wx86RegEnumKeyEx Wx86RegEnumKeyExW
|
||
|
#define Wx86RegOpenKey Wx86RegOpenKeyW
|
||
|
#define Wx86RegOpenKeyEx Wx86RegOpenKeyExW
|
||
|
#define Wx86RegQueryValue Wx86RegQueryValueW
|
||
|
#define Wx86RegQueryValueEx Wx86RegQueryValueExW
|
||
|
#define Wx86RegSetValue Wx86RegSetValueW
|
||
|
#define Wx86RegSetValueEx Wx86RegSetValueExW
|
||
|
#define Wx86RegDeleteValue Wx86RegDeleteValueW
|
||
|
#define Wx86RegEnumValue Wx86RegEnumValueW
|
||
|
#define Wx86RegQueryMultipleValues Wx86RegQueryMultipleValuesW
|
||
|
|
||
|
#endif
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#endif // _WX86DLL_
|