diff options
author | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
---|---|---|
committer | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
commit | e611b132f9b8abe35b362e5870b74bce94a1e58e (patch) | |
tree | a5781d2ec0e085eeca33cf350cf878f2efea6fe5 /public/sdk/inc/wownt16.h | |
download | NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2 NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip |
Diffstat (limited to 'public/sdk/inc/wownt16.h')
-rw-r--r-- | public/sdk/inc/wownt16.h | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/public/sdk/inc/wownt16.h b/public/sdk/inc/wownt16.h new file mode 100644 index 000000000..f6520ef74 --- /dev/null +++ b/public/sdk/inc/wownt16.h @@ -0,0 +1,120 @@ +/*++ BUILD Version: 0001 // Increment this if a change has global effects + +Copyright (c) 1995-1996, Microsoft Corporation + +Module Name: + + wownt16.h + +Abstract: + + Procedure declarations for functions in WOW32.DLL callable by + 3rd-party 16-bit thunking code. + +--*/ + +#ifndef _WOWNT16_ +#define _WOWNT16_ + +// +// 16:16 -> 0:32 Pointer translation. +// +// GetVDMPointer32W will convert the passed in 16-bit address +// to the equivalent 32-bit flat pointer. The upper 16 bits +// of the address are treated according to the value passed in +// fMode: if fMode = 1, then the hiword of vp is used as a +// protected mode selector. Otherwise it is used as a real mode +// segment value. +// The lower 16 bits are treated as the offset. +// +// The return value is 0 if the selector is invalid. +// +// NOTE: Limit checking is not performed in the retail build +// of Windows NT. It is performed in the checked (debug) build +// of WOW32.DLL, which will cause 0 to be returned when the +// limit is exceeded by the supplied offset. +// + +DWORD FAR PASCAL GetVDMPointer32W(LPVOID vp, UINT fMode); + + +// +// Win32 module management. +// +// The following routines accept parameters that correspond directly +// to the respective Win32 API function calls that they invoke. Refer +// to the Win32 reference documentation for more detail. + +DWORD FAR PASCAL LoadLibraryEx32W(LPCSTR lpszLibFile, DWORD hFile, DWORD dwFlags); +DWORD FAR PASCAL GetProcAddress32W(DWORD hModule, LPCSTR lpszProc); +DWORD FAR PASCAL FreeLibrary32W(DWORD hLibModule); + +// +// Generic Thunk Routine: +// +// CallProc32W +// +// Transitions to 32 bits and calls specified routine +// +// This routine can pass a variable number of arguments, up to 32, to the +// target 32-bit routine. These arguments are given to CallProc32W following +// the 3 required parameters. +// +// DWORD cParams - Number of optional DWORD parameters (0-32) +// +// LPVOID fAddressConvert - Bit Field, for 16:16 address Convertion. The +// optional parameters can be automatically converted +// from a 16:16 address format to flat by specifying +// a 1 bit in the corresponding position in this mask. +// eg (bit 1 means convert parameter 1 from 16:16 +// to flat address before calling routine) +// +// DWORD lpProcAddress - 32 bit native address to call (use LoadLibraryEx32W +// and GetProcAddress32W to get this address). +// +// Returns: +// What ever the API returned on 32 bit side in AX:DX +// +// Error Returns: +// AX = 0, more than 32 parameters. +// +// +// The function prototype must be declared by the application source code +// in the following format: +// +// DWORD FAR PASCAL CallProc32W( DWORD p1, ... , DWORD lpProcAddress, +// DWORD fAddressConvert, DWORD cParams); +// +// where the value in cParams must match the actual number of optional +// parameters (p1-pn) given AND the "DWORD p1, ..." must be replaced by +// the correct number of parameters being passed. For example, passing 3 +// parameter would simply require the removal of the ... and it insertion of +// "DWORD p2, DWORD p3" instead. The fAddressConvert parameter uses bit 1 +// for the last parameter (p3 in our example), with bit 2 for the next to last, +// etc. +// +// Generic Thunk Routine: +// +// CallProcEx32W +// +// Transitions to 32 bits and calls specified routine +// +// Similar to the CallProc32W function, the CallProcEx32W is an equivalent +// function that is C calling convention and allows easier and more flexible +// prototyping. See the prototype below. The fAddressConvert parameter uses +// bit 1 for the 1st parameter, bit 2 for the 2nd parameter, etc. +// +// Both CallProc32W and CallProcEx32W accept a flag OR'd with the parameter +// count to indicate the calling convention of the function in 32 bits. +// For example, to call a cdecl function in 32-bits with 1 parameter, it would +// look like this: +// +// dwResult = CallProcEx32W( CPEX_DEST_CDECL | 1, 0, dwfn32, p1 ); +// + +DWORD FAR CDECL CallProcEx32W( DWORD, DWORD, DWORD, ... ); + +#define CPEX_DEST_STDCALL 0x00000000L +#define CPEX_DEST_CDECL 0x80000000L + +#endif /* !_WOWNT16_ */ |