windows-nt/Source/XPSP1/NT/published/sdk/inc/wx86dll.h
2020-09-26 16:20:57 +08:00

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_