windows-nt/Source/XPSP1/NT/base/mvdm/meinc/ring0.h
2020-09-26 16:20:57 +08:00

816 lines
36 KiB
C

/*****************************************************************************
* RING0.H
*
* Ring 0 equates to be used with VxDCall#
*
* This file should be replaced by references into the file
* dev\inc\vmmwin32.inc once vmm.h is fixed to allow the No_VxD
* option to include the Begin_Win32_Services macro.
*
* Created:
* 9-Sep-92 [JonT]
* History:
* 25-Sep-92 [FelixA] Added defines and macros for the exported mem funcs
* 25-Sep-92 [JonT] Added equates for VWin32.386
*
****************************************************************************/
// Equates for VCOND functions
#ifdef WOW
#define MEOW_NEED_BOP 0x80000000
#define MEOW_NO_SUSPEND_OTHERS 0x40000000
#else // WOW
#define MEOW_NEED_BOP 0x00000000
#define MEOW_NO_SUSPEND_OTHERS 0x00000000
#endif // else WOW
// VCOMM.386 ID numbers
// (its device ID is 0x002B
#define VCOMM_Device_ID 0x002B
#define VCOMM_GetVersion (VCOMM_Device_ID << 16)
#define VCOMM_OpenComm VCOMM_GetVersion + 1
#define VCOMM_SetupComm VCOMM_OpenComm + 1
#define VCOMM_EscapeCommFunction VCOMM_SetupComm + 1
#define VCOMM_GetCommMask VCOMM_EscapeCommFunction + 1
#define VCOMM_GetCommProp VCOMM_GetCommMask + 1
#define VCOMM_GetCommState VCOMM_GetCommProp + 1
#define VCOMM_GetCommTimeouts VCOMM_GetCommState + 1
#define VCOMM_PurgeComm VCOMM_GetCommTimeouts + 1
#define VCOMM_SetCommMask VCOMM_PurgeComm + 1
#define VCOMM_SetCommState VCOMM_SetCommMask + 1
#define VCOMM_SetCommTimeouts VCOMM_SetCommState + 1
#define VCOMM_TransmitCommChar VCOMM_SetCommTimeouts + 1
#define VCOMM_WaitCommEvent VCOMM_TransmitCommChar + 1
#define VCOMM_GetCommModemStatus VCOMM_WaitCommEvent + 1
#define VCOMM_WriteComm VCOMM_GetCommModemStatus+1
#define VCOMM_ReadComm VCOMM_WriteComm+1
#define VCOMM_ClearCommError VCOMM_ReadComm + 1
#define VCOMM_CloseComm VCOMM_ClearCommError + 1
#define VCOMM_GetLastError VCOMM_CloseComm + 1
#define VCOMM_DequeueRequest VCOMM_GetLastError + 1
#define VCOMM_QueryFriendlyName VCOMM_DequeueRequest + 1
#define VCOMM_GetCommConfig VCOMM_QueryFriendlyName + 1
#define VCOMM_SetCommConfig VCOMM_GetCommConfig + 1
#define VCOMM_GetWin32Error VCOMM_SetCommConfig + 1
#define VCOMM_FlushFileBuffers VCOMM_GetWin32Error + 1
#define VCOMM_DeviceIOControl VCOMM_FlushFileBuffers + 1
#ifndef NTKERN_DEVICE_ID
#define NTKERN_DEVICE_ID 0x004B
#endif
#define NtKern_Get_Version (NTKERN_DEVICE_ID << 16)
#define Nt_CreateFile (NtKern_Get_Version + 1)
#define Nt_CloseHandle (Nt_CreateFile + 1)
#define Nt_WriteFile (Nt_CloseHandle + 1)
#define Nt_ReadFile (Nt_WriteFile + 1)
#define Nt_IoControl (Nt_ReadFile + 1)
#define Nt_FlushBuffersFile (Nt_IoControl + 1)
#define Nt_CancelIo (Nt_FlushBuffersFile + 1)
#define Nt_GetDevnodeFromFileHandle (Nt_CancelIo + 1 )
#define Nt_RequestWakeupLatency (Nt_GetDevnodeFromFileHandle + 1)
//
// Now define calls to ACPI
//
#ifndef ACPI_DEVICE_ID
#define ACPI_DEVICE_ID 0x004c
#endif
#define Acpi_GetVersion (ACPI_DEVICE_ID << 16 )
#define Acpi_SetSystemIndicator ( Acpi_GetVersion + 1 )
#define AcpiGetVersion() VxDCall0( Acpi_GetVersion )
#define AcpiSetSystemIndicator( Indicator, Value )\
VxDCall2( Acpi_SetSystemIndicator, Indicator, Value )
//
// definition for indicator
//
#define SystemStatus 0
#define MessageWaiting 1
#define VCOND_GETVERSION 0x00380000
#define VCOND_EMITSTRING 0x00380001
#define VCOND_CREATECONSOLE 0x00380002
#define VCOND_READCHARINFO 0x00380003
#define VCOND_READCHARS 0x00380004
#define VCOND_READATTRS 0x00380005
#define VCOND_WRITECHARINFO 0x00380006
#define VCOND_WRITECHARS 0x00380007
#define VCOND_WRITEATTRS 0x00380008
#define VCOND_FILLATTRS 0x00380009
#define VCOND_GETCURPOS 0x0038000a
#define VCOND_GETCURATTR 0x0038000b
#define VCOND_SETCURPOS 0x0038000c
#define VCOND_SETCURATTR 0x0038000d
#define VCOND_SETINPUTMODE 0x0038000e
#define VCOND_GETINPUTMODE 0x0038000f
#define VCOND_READINPUT 0x00380010
#define VCOND_PEEKINPUT 0x00380011
#define VCOND_WRITEINPUT 0x00380012
#define VCOND_ATTACHPROCESS 0x00380013
#define VCOND_DETACHPROCESS 0x00380014
#define VCOND_DELETECONSOLE 0x00380015
#define VCOND_GETNUMBEROFINPUTEVENTS 0x00380016
#define VCOND_POSTMESSAGE 0x00380017
#define VCOND_GETSCREENSIZE 0x00380018
#define VCOND_FILLCHARS 0x00380019
#define VCOND_FLUSHINPUT 0x0038001A
#define VCOND_SETATTRIBUTE 0x0038001B
#define VCOND_GETBUTTONCOUNT 0x0038001C
#define VCOND_SETSCREENSIZE 0x0038001D
#define VCOND_MATCHSCREENSIZE 0x0038001E
#define VCOND_WAITFORNEWCONSOLE 0x0038001F
#define VCOND_SPAWN 0x00380020
#define VCOND_GETENVIRONMENT 0x00380021
#define VCOND_GETLAUNCHINFO 0x00380022
#define VCOND_INITAPCS 0x00380023
#define VCOND_GRBREPAINTRECT 0x00380024
#define VCOND_GRBMOVERECT 0x00380025
#define VCOND_GRBSETWINDOWSIZE 0x00380026
#define VCOND_GRBSETWINDOWORG 0x00380027
#define VCOND_GRBSETSCREENSIZE 0x00380028
#define VCOND_GRBSETCURSORPOSITION 0x00380029
#define VCOND_GRBSETCURSORINFO 0x0038002A
#define VCOND_GRBNOTIFYWOA 0x0038002B
#define VCOND_GRBSYNC 0x0038002C
#define VCOND_GRBTERMINATE 0x0038002D
#define VCOND_DP32_CREATE 0x0038002E
#define VCOND_DP32_GETWORK 0x0038002F
#define VCOND_DP32_TERMINATE 0x00380030
#define VCOND_DP32_WAITWORK 0x00380031
#define VCOND_REDIRECTIONCOMPLETE 0x00380032
#define VCOND_DP32_DESTROY 0x00380033
#define VCOND_UNBLOCKRING3WITHFAILURE 0x00380034
#ifdef BILINGUAL_CONSOLE
#define VCOND_GETCP 0x00380035
#endif
// Special "exit-code" value for VCOND_Detach: This value means
// "do not set the exit code."
#define VCD_NOEXITCODE ((DWORD)0xffffffff)
// Equates for VMM virtual memory functions
#define W32_PageReserve 0x00010000
#define W32_PageCommit 0x00010001
#define W32_PageDecommit 0x00010002
#define W32_PagerRegister 0x00010003
#define W32_PagerQuery 0x00010004
#define W32_HeapAllocate 0x00010005
#define W32_ContextCreate 0x00010006
#define W32_ContextDestroy 0x00010007
#define W32_PageAttach 0x00010008
#define W32_PageFlush 0x00010009
#define W32_PageFree 0x0001000a
#define W32_ContextSwitch 0x0001000b
#define W32_HeapReAllocate 0x0001000c
#define W32_PageModifyPermissions 0x0001000d
#define W32_PageQuery 0x0001000e
#define W32_GetCurrentContext 0x0001000f
#define W32_HeapFree 0x00010010
#define W32_RegOpenKey 0x00010011
#define W32_RegCreateKey 0x00010012
#define W32_RegCloseKey 0x00010013
#define W32_RegDeleteKey 0x00010014
#define W32_RegSetValue 0x00010015
#define W32_RegDeleteValue 0x00010016
#define W32_RegQueryValue 0x00010017
#define W32_RegEnumKey 0x00010018
#define W32_RegEnumValue 0x00010019
#define W32_RegQueryValueEx 0x0001001a
#define W32_RegSetValueEx 0x0001001b
#define W32_RegFlushKey 0x0001001c
#define W32_RegQueryInfoKey16 0x0001001d
#define W32_GetDemandPageInfo 0x0001001e
#define W32_BlockOnID 0x0001001f
#define W32_SignalID 0x00010020
#define W32_RegLoadKey 0x00010021
#define W32_RegUnLoadKey 0x00010022
#define W32_RegSaveKey 0x00010023
#define W32_RegRemapPreDefKey 0x00010024
#define W32_PageChangePager 0x00010025
#define W32_RegQueryMultipleValues 0x00010026
#define W32_RegReplaceKey 0x00010027
#define W32_BoostFileCache 0x00010028
#ifdef GANGLOAD
#define W32_CacheAndDecommitPages (W32_BoostFileCache+1)
#define W32_RegNotifyChangeKeyValue (W32_CacheAndDecommitPages+1)
#else
#define W32_RegNotifyChangeKeyValue (W32_BoostFileCache+1)
#endif
#define W32_PageOutPages (W32_RegNotifyChangeKeyValue+1)
#define W32_mmSetCacheMidPoint (W32_PageOutPages+1)
#ifdef WRITE_WATCH
#define W32_mmGetWriteWatch (W32_mmSetCacheMidPoint+1)
#define W32_mmResetWriteWatch (W32_mmGetWriteWatch+1)
#endif // WRITE_WATCH
// DEBUG Win32 API (debug device id is 0x0002)
#define DEBUG_WIN32_FAULT 0x00020000
// REBOOT.386 Win32 API (reboot device id is 0x0009)
#define REBOOT_WIN32_INIT 0x00090000
#define REBOOT_CHANGE_PHASE 0x00090001
// VWIN32.386 ID numbers (vwin32 device ID is 0x002a)
#define VW32_GetVersion 0x002A0000
#define VW32_GetPager 0x002A0001
#define VW32_GetTickCount 0x002A0002
#define VW32_EnableExceptions 0x002A0003
#define VW32_AllocSyncPrimitive 0x002A0006
#define VW32_CreateThread (0x002A0008+MEOW_NEED_BOP)
#define VW32_BlockThread 0x002A0009
#define VW32_WakeThread 0x002A000A
#define VW32_TerminateThread 0x002A000B
#define VW32_Initialize 0x002A000C
#define VW32_QueueUserAPC 0x002A000D
#define VW32_CleanAPCList 0x002A000E
#define VW32_QueueKernelAPC 0x002A000F
#define VW32_Int21Dispatch (0x002A0010+MEOW_NO_SUSPEND_OTHERS)
#define VW32_IFSMGR_DupHandle 0x002A0011
#define VW32_AdjustThreadPri 0x002A0013
#define VW32_GetThreadContext 0x002A0014
#define VW32_SetThreadContext 0x002A0015
#define VW32_ReadProcessMemory 0x002A0016
#define VW32_WriteProcessMemory 0x002A0017
#define VW32_GetCR0State 0x002A0018
#define VW32_SetCR0State 0x002A0019
#define VW32_SuspendThread 0x002A001A
#define VW32_ResumeThread 0x002A001B
#define VW32_DeliverPendingKernelAPCs (0x002A001C+MEOW_NEED_BOP)
#define VW32_WaitCrst 0x002A001D
#define VW32_WakeCrst 0x002A001E
#define VW32_DeviceIOCtl 0x002A001F
#define VW32_GetVMCPDVersion 0x002A0020
#define VW32_SetWin32Priority 0x002A0021
#define VW32_AttachThreadToGroup 0x002A0026
#define VW32_Int31Dispatch 0x002A0029
#define VW32_Int41Dispatch (0x002A002A+MEOW_NO_SUSPEND_OTHERS)
#define VW32_BlockForTermination 0x002A002B
#define VW32_TerminationHandler2 (0x002A002C+MEOW_NEED_BOP)
#define VW32_BlockThreadEx 0x002A002D
#define VW32_ReleaseSyncObject 0x002A0030
#define VW32_UndoCrst 0x002A0032
#ifndef WOW
#define VW32_Ring0ThreadStart 0x002A0034
#endif // ndef WOW
#define VW32_EnableAPCService 0x002A0036
#define VW32_FaultPop 0x002A0037
#define VW32_ForceCrsts 0x002A0038
#define VW32_RestoreCrsts 0x002A0039
#define VW32_FreezeAllThreads 0x002A003A
#define VW32_UnFreezeAllThreads 0x002A003B
#define VW32_IFSMGR_CloseHandle 0x002A003C
#define VW32_AttachConappThreadToVM 0x002A003D
#define VW32_ActiveTimeBiasSet 0x002A003E
#define VW32_ModifyPagePermission 0x002A003F
#define VW32_QueryPage 0x002A0040
#define VW32_ForceLeaveCrst 0x002A0041
#define VW32_ForceEnterCrst 0x002A0042
#define VW32_Get_FP_Instruction_Size 0x002A0043
#define VW32_QueryPerformanceCounter 0x002A0044
#define VW32_SetDeviceFocus 0x002A0045
#define VW32_UnFreezeThread 0x002A0046
#define VW32_VMM_Replace_Global_Env 0x002A0047
#define VW32_SendKernelShutdown 0x002A0048
#define VW32_RestoreSysCrst 0x002A0049
#define VW32_AddSysCrst 0x002A004A
#define VW32_SetTimeOut 0x002A004B
#define VW32_CancelTimeOut 0x002A004C
#define VW32_ThrowException 0x002A004D
#define VW32_SimCtrlC 0x002A004E
#define VW32_VMM_SystemControl 0x002A004F
#define VW32_SetTimer 0x002A0050
#define VW32_CancelTimer 0x002A0051
#define VW32_GetNextResumeDueTime 0x002A0052
#define VW32_BiosSupportsResumeTimers 0x002A0053
#define VW32_SetResumeTimer 0x002A0054
#define VW32_QueueUserApcEx 0x002A0055
#define VW32_DisposeObject 0x002A0056
#define VW32_DuplicateObject 0x002A0057
#define VW32_UnuseTdbx 0x002A0058
#define VW32_InterlockedAdd386 0x002A0059
#define VW32_InterlockedCmpxchg386 0x002A005A
#define VW32_InterlockedXadd386 0x002A005B
#define VW32_WaitSingleObject 0x002A005C
#define VW32_WaitMultipleObjects 0x002A005D
#define VW32_ReleaseSem 0x002A005E
#define VW32_ReleaseMutex 0x002A005F
#define VW32_SetEvent 0x002A0060
#define VW32_PulseEvent 0x002A0061
#define VW32_ResetEvent 0x002A0062
#define VW32_DisposeTimerR3Apc 0x002A0063
#define VW32_SetWin32PriorityClass 0x002A0064
#ifdef WOW
#define MEOWService(dwID) ((dwID & 0x3FFF0000)==0x3FFF0000)
#define MEOW_SetSelector 0x3FFF0000
#define MEOW_LoadLibrary 0x3FFF0001
#define MEOW_GetProcAddress 0x3FFF0002
#define MEOW_FreeLibrary 0x3FFF0003
#endif // def WOW
// Allows use of MM* rather than VxDCall#( ..k
#if !defined(WINBASEAPI)
#if !defined(_KERNEL32_)
#define WINBASEAPI __declspec(dllimport)
#else
#define WINBASEAPI
#endif
#endif
extern WINBASEAPI DWORD __stdcall VxDCall0( ULONG );
extern WINBASEAPI DWORD __stdcall VxDCall1( ULONG ,ULONG );
extern WINBASEAPI DWORD __stdcall VxDCall2( ULONG ,ULONG ,ULONG );
extern WINBASEAPI DWORD __stdcall VxDCall3( ULONG ,ULONG ,ULONG ,ULONG );
extern WINBASEAPI DWORD __stdcall VxDCall4( ULONG ,ULONG ,ULONG ,ULONG ,ULONG );
extern WINBASEAPI DWORD __stdcall VxDCall5( ULONG ,ULONG ,ULONG ,ULONG ,ULONG ,ULONG );
extern WINBASEAPI DWORD __stdcall VxDCall6( ULONG ,ULONG ,ULONG ,ULONG ,ULONG ,ULONG ,ULONG );
extern WINBASEAPI DWORD __stdcall VxDCall7( ULONG ,ULONG ,ULONG ,ULONG ,ULONG ,ULONG ,ULONG ,ULONG );
extern WINBASEAPI DWORD __stdcall VxDCall8( ULONG ,ULONG ,ULONG ,ULONG ,ULONG ,ULONG ,ULONG ,ULONG ,ULONG );
extern WINBASEAPI DWORD __stdcall VxDCall9( ULONG ,ULONG ,ULONG ,ULONG ,ULONG ,ULONG ,ULONG ,ULONG ,ULONG, ULONG );
extern WINBASEAPI DWORD __stdcall VxDCall10( ULONG ,ULONG ,ULONG ,ULONG ,ULONG ,ULONG ,ULONG ,ULONG ,ULONG, ULONG, ULONG );
extern WINBASEAPI DWORD __stdcall VxDCall11( ULONG ,ULONG ,ULONG ,ULONG ,ULONG ,ULONG ,ULONG ,ULONG ,ULONG, ULONG, ULONG, ULONG );
/* ASM
VxDCall0 PROTO STDCALL, :DWORD
VxDCall1 PROTO STDCALL, :DWORD, :DWORD
VxDCall2 PROTO STDCALL, :DWORD, :DWORD, :DWORD
VxDCall3 PROTO STDCALL, :DWORD, :DWORD, :DWORD, :DWORD
VxDCall4 PROTO STDCALL, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
VxDCall5 PROTO STDCALL, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
VxDCall6 PROTO STDCALL, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
VxDCall7 PROTO STDCALL, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
VxDCall8 PROTO STDCALL, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
VxDCall9 PROTO STDCALL, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
VxDCall10 PROTO STDCALL, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
VxDCall11 PROTO STDCALL, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
*/
#define PageReserve(page, npages, flags) VxDCall3(W32_PageReserve,page, npages, flags)
#ifdef WRITE_WATCH
#define R0GetWriteWatch( ulFlags, pBaseAddr, dwRegionSize, pulAddr, pdwCount, pdwGranularity) \
VxDCall6( W32_mmGetWriteWatch, ulFlags, pBaseAddr, dwRegionSize, pulAddr, pdwCount, pdwGranularity)
#define R0ResetWriteWatch( pBaseAddr, dwRegionSize ) \
VxDCall2( W32_mmResetWriteWatch, pBaseAddr, dwRegionSize )
#endif // WRITEWATCH
extern BOOL PageCommit(ULONG page, ULONG npages, ULONG hpd, ULONG pagerdata, ULONG flags);
#define PageDecommit(page, npages, flags) VxDCall3(W32_PageDecommit, page, npages, flags)
#define PagerRegister(ppd) VxDCall1(W32_PagerRegister, (ULONG)ppd)
#define PagerQuery(hpd, ppd) VxDCall2(W32_PagerQuery, (ULONG)hpd, (ULONG)ppd)
#define PageChangePager(page, npages, hpd, pagerdata, flags) \
VxDCall5(W32_PageChangePager, (ULONG)page, (ULONG)npages, (ULONG)hpd, \
(ULONG)pagerdata, (ULONG)flags)
#define ContextCreate() VxDCall0(W32_ContextCreate)
#define GetCurrentContext() VxDCall0(W32_GetCurrentContext)
#define VMMHeapFree(p, f) VxDCall2(W32_HeapFree, (ULONG)(p), f)
#define VMMHeapAllocate(p, f) VxDCall2(W32_HeapAllocate, (ULONG)(p), f)
#define VMMHeapReAllocate(p, cb, f) VxDCall3(W32_HeapReAllocate, (ULONG)(p), cb, f)
#define VMMBlockOnID(id, f) VxDCall2(W32_BlockOnID, (ULONG)(id), f)
#define VMMSignalID(id) VxDCall1(W32_SignalID, (ULONG)(id))
#define ContextDestroy(hcd) VxDCall1(W32_ContextDestroy, hcd)
#define ContextSwitch(hcd) VxDCall1(W32_ContextSwitch, hcd)
#define PageQuery(pbase, pmbi, cbmbi) VxDCall3(W32_PageQuery, (ULONG)pbase, (ULONG)pmbi, cbmbi)
#define PageAttach(pagesrc, hcontextsrc, pagedst, cpg) VxDCall4(W32_PageAttach, pagesrc, hcontextsrc, pagedst, cpg)
#define PageFlush(page, npages) VxDCall2(W32_PageFlush, page, npages)
#define PageFree(laddr, flags) VxDCall2(W32_PageFree, (ULONG)laddr, flags)
#define GetDemandPageInfo(laddr, flags) VxDCall2(W32_GetDemandPageInfo, (ULONG)laddr, flags)
#define EnableExceptions(handler, selCS, selDS, hdlr1, hdlr2, hdlr3, hdlr4, thcb) \
VxDCall8(VW32_EnableExceptions, (ULONG)handler, (ULONG)selCS, \
(ULONG)selDS, (ULONG)hdlr1, (ULONG)hdlr2, (ULONG)hdlr3, \
(ULONG)hdlr4, (ULONG)thcb)
#define InitializeWin32VxD(pcdis) \
VxDCall1(VW32_Initialize, (DWORD) pcdis)
#ifdef WOW
#define W32CreateThread(ThreadHandle, ProcessHandle, ContextHandle, \
ThreadFlags, regEIP, pContext, dwStackSize, \
ppStackTop, pptib, ppTDBX ) \
VxDCall10(VW32_CreateThread, (ULONG)ThreadHandle, (ULONG)ProcessHandle, \
(ULONG) ContextHandle, (ULONG) ThreadFlags, \
(ULONG) regEIP, (ULONG) pContext, (ULONG) dwStackSize, \
(ULONG) ppStackTop, (ULONG) pptib, (ULONG) ppTDBX )
#else // WOW
#define W32CreateThread(ThreadHandle, ProcessHandle, ContextHandle, \
ThreadFlags, regCS, regEIP, regSS, regESP, ppTDBX ) \
VxDCall9(VW32_CreateThread, (ULONG)ThreadHandle, (ULONG)ProcessHandle, \
(ULONG) ContextHandle, (ULONG) ThreadFlags, (ULONG) regCS, \
(ULONG) regEIP, (ULONG) regSS, (ULONG) regESP, (ULONG) ppTDBX )
#endif // else WOW
#define VxDTerminateThread(ThreadHandle, ApcData) \
VxDCall2(VW32_TerminateThread, (DWORD) ThreadHandle, (DWORD) ApcData)
#define VxDSuspendThread(ThreadHandle) \
VxDCall1(VW32_SuspendThread, (DWORD) ThreadHandle)
#define VxDResumeThread(ThreadHandle) \
VxDCall1(VW32_ResumeThread, (DWORD) ThreadHandle)
#define VW32DeliverPendingKernelAPCs() \
VxDCall0(VW32_DeliverPendingKernelAPCs)
// Registry Macros
#define W32RegOpenKey(hKey,SubKey,lphKey) VxDCall3(W32_RegOpenKey,(ULONG)hKey,(ULONG)SubKey,(ULONG)lphKey)
#define W32RegCreateKey(hKey,SubKey,lphKey) VxDCall3(W32_RegCreateKey,(ULONG)hKey,(ULONG)SubKey,(ULONG)lphKey)
#define W32RegCloseKey(hKey) VxDCall1(W32_RegCloseKey,(ULONG)hKey)
#define W32RegFlushKey(hKey) VxDCall1(W32_RegFlushKey,(ULONG)hKey)
#define W32RegDeleteKey(hKey,SubKey) VxDCall2(W32_RegDeleteKey,(ULONG)hKey,(ULONG)SubKey)
#define W32RegDeleteValue(hKey,ValName) VxDCall2(W32_RegDeleteValue,(ULONG)hKey,(ULONG)ValName)
#define W32RegEnumKey(hKey,dwIdx,lpbBuf,dwcbBuf) VxDCall4(W32_RegEnumKey,(ULONG)hKey,dwIdx,(ULONG)lpbBuf,dwcbBuf)
#define W32RegQueryValue(hKey,szSubKey,lpszVal,lpcbVal) VxDCall4(W32_RegQueryValue,(ULONG)hKey,(ULONG)szSubKey,(ULONG)lpszVal,(ULONG)lpcbVal)
#define W32RegSetValue(hKey,szSubKey,dwType,lpszVal,cbVal) VxDCall5(W32_RegSetValue,(ULONG)hKey,(ULONG)szSubKey,dwType,(ULONG)lpszVal,cbVal)
#define W32RegEnumValue(hKey,iVal,lpszVal,lpcbVal,lpdwRes,lpdwType,lpbData,lpcbData) \
VxDCall8(W32_RegEnumValue,(ULONG)hKey,(ULONG)iVal,(ULONG)lpszVal,(ULONG)lpcbVal,(ULONG)lpdwRes,(ULONG)lpdwType,(ULONG)lpbData,(ULONG)lpcbData)
#define W32RegQueryValueEx(hKey,lpszVal,lpdwRes,lpdwType,lpbData,lpcbData) \
VxDCall6(W32_RegQueryValueEx,(ULONG)hKey,(ULONG)lpszVal,(ULONG)lpdwRes,(ULONG)lpdwType,(ULONG)lpbData,(ULONG)lpcbData)
#define W32RegSetValueEx(hKey,lpszVal,dwRes,dwType,lpbData,lpcbData) \
VxDCall6(W32_RegSetValueEx,(ULONG)hKey,(ULONG)lpszVal,dwRes,dwType,(ULONG)lpbData,(ULONG)lpcbData)
#define W32RegQueryInfoKey( hKey, lpcSubKeys, lpcbMaxSubKeyLen, \
lpcValues, lpcbMaxValueNameLen, lpcbMaxValueLen) \
VxDCall6(W32_RegQueryInfoKey16, (ULONG)hKey,(ULONG) lpcSubKeys, \
(ULONG) lpcbMaxSubKeyLen,(ULONG) lpcValues, \
(ULONG) lpcbMaxValueNameLen,(ULONG) lpcbMaxValueLen)
#define W32RegLoadKey(hKey, lpszSubKey, lpszFile) \
VxDCall3(W32_RegLoadKey, (ULONG)hKey, (ULONG)lpszSubKey, (ULONG)lpszFile)
#define W32RegUnLoadKey(hKey, lpszSubKey) \
VxDCall2(W32_RegUnLoadKey, (ULONG)hKey, (ULONG)lpszSubKey)
#define W32RegSaveKey(hKey, lpszFile, lpsa) \
VxDCall3(W32_RegSaveKey, (ULONG)hKey, (ULONG)lpszFile, (ULONG)lpsa)
#define W32RegRemapPreDefKey(hKey,hkRootKey) VxDCall2(W32_RegRemapPreDefKey,(ULONG)hKey,(ULONG)hkRootKey)
#define W32RegQueryMultipleValues(hKey, val_list, num_vals, \
lpValueBuf, ldwTotsize)\
VxDCall5(W32_RegQueryMultipleValues, (ULONG)hKey, (ULONG)val_list, \
(ULONG)num_vals, (ULONG)lpValueBuf, (ULONG)ldwTotsize)
#define W32RegReplaceKey(hKey, lpszSubKey, lpszReplaceFile, lpszBackupFile) \
VxDCall4(W32_RegReplaceKey, (ULONG)hKey, (ULONG)lpszSubKey, \
(ULONG)lpszReplaceFile, (ULONG)lpszBackupFile)
#define W32BoostFileCache() VxDCall0(W32_BoostFileCache)
#define W32RegNotifyChangeKeyValue(hKey, fWatchSubtree, dwNotifyFilter, hEvent) \
VxDCall4(W32_RegNotifyChangeKeyValue, (ULONG)hKey, (ULONG)fWatchSubtree, \
(ULONG)dwNotifyFilter, (ULONG)hEvent)
// low level APC function interface
#define W32CleanAPCList() VxDCall0( VW32_CleanAPCList )
#define W32QueueUserAPC( pfnRing3APC, dwParam, ThreadHandle ) \
VxDCall3( VW32_QueueUserAPC, (ULONG)(pfnRing3APC), \
(ULONG)(dwParam), (ULONG)(ThreadHandle) )
#define W32QueueKernelAPC( pfnRing0APC, dwParam, ThreadHandle, ulFlags ) \
VxDCall4( VW32_QueueKernelAPC, (ULONG)pfnRing0APC, dwParam, \
(ULONG)ThreadHandle, ulFlags )
#define W32QueueUserApcEx( pfnRing3APC, dwParam, ThreadHandle, R0RunDown ) \
VxDCall4( VW32_QueueUserApcEx, (ULONG)(pfnRing3APC), \
(ULONG)(dwParam), (ULONG)(ThreadHandle), (ULONG)(R0RunDown))
// Thread priority adjusting
#define AdjustThreadPriority( R0ThreadHandle, PriBoost ) \
VxDCall2(VW32_AdjustThreadPri,R0ThreadHandle,(DWORD)(PriBoost))
// Way to get to IFSMGR's Win32_DupHandle thru vwin32
#define W32_IFSMGR_DupHandle(pdbSrc, pdbDst, phandle, flags, \
bogusnetxattachhandle, pfSpecialNetxDup) \
VxDCall6(VW32_IFSMGR_DupHandle, pdbSrc, pdbDst, phandle, \
flags, bogusnetxattachhandle, pfSpecialNetxDup)
// Close a ring0 file handle
#define W32_IFSMGR_CloseHandle(handle) \
VxDCall1(VW32_IFSMGR_CloseHandle, handle)
// Prototype #define's for VWin32 functions
#define VWIN32GetVersion() \
((USHORT)VxDCall0(VW32_GetVersion))
#define FVW32GetPager(pR0_dwWaitSingleObject, \
pR0_bSetPevt, \
pR0_EnterCrst, pR0_LeaveCrst, \
pR0_BlockOnID, pR0_SignalID, \
pR0_OpenFile, pR0_CloseDosFileHandle, pmmfPageOut, \
ppfmdArray) \
VxDCall10(VW32_GetPager, pR0_dwWaitSingleObject, \
pR0_bSetPevt, \
pR0_EnterCrst, pR0_LeaveCrst, \
pR0_BlockOnID, pR0_SignalID, \
pR0_OpenFile, pR0_CloseDosFileHandle, pmmfPageOut, \
ppfmdArray)
#define PageModifyPermissions(page, npages, permand, permor) VxDCall4(W32_PageModifyPermissions, page, npages, permand, permor)
#define ModifyPagePermission(R0Thread, lpvAddr, cbSize, fperAnd, fperOr) \
VxDCall5(VW32_ModifyPagePermission, \
(DWORD)R0Thread, \
(DWORD)lpvAddr, \
cbSize, \
fperAnd, \
fperOr)
#define VWIN32QueryPage(R0Thread, lpvAddr, lpvBuffer, cbSize) \
VxDCall4(VW32_QueryPage, \
(DWORD)R0Thread, \
(DWORD)lpvAddr, \
(DWORD)lpvBuffer, \
cbSize)
#define VxDBlockForTermination() \
VxDCall0(VW32_BlockForTermination)
#define VxDTerminationHandler2(ptermdata) \
VxDCall1(VW32_TerminationHandler2, (ULONG)(ptermdata))
// Defines for Win32 VxD debug api support services
#define VxDGetThreadContext(ptcb, pcontext) \
VxDCall2(VW32_GetThreadContext, (DWORD)(ptcb), (DWORD)(pcontext))
#define VxDSetThreadContext(ptcb, pcontext) \
VxDCall2(VW32_SetThreadContext, (DWORD)(ptcb), (DWORD)(pcontext))
#define VxDReadProcessMemory(ptcb, pBaseAddress, pBuffer, cbRead, pcbRead) \
VxDCall5(VW32_ReadProcessMemory, (ptcb), \
(ULONG)(pBaseAddress), (ULONG)(pBuffer), (cbRead), \
(ULONG)(pcbRead))
#define VxDWriteProcessMemory(ptcb, pBaseAddress, pBuffer, cbWrite, pcbWritten)\
VxDCall5(VW32_WriteProcessMemory, (ptcb), \
(ULONG)(pBaseAddress), (ULONG)(pBuffer), (cbWrite), \
(ULONG)(pcbWritten))
// Defines for floating point Cr0 flag support (EM, MP)
#define GetCR0State(ptcb) \
VxDCall1(VW32_GetCR0State, (ptcb))
#define SetCR0State(ptcb, state) \
VxDCall2(VW32_SetCR0State, (ptcb), (state))
#define WaitCrst( pcrst ) VxDCall1( VW32_WaitCrst, (DWORD)pcrst )
#define WakeCrst( pcrst ) VxDCall1( VW32_WakeCrst, (DWORD)pcrst )
#define UndoCrst( pcrst ) VxDCall1( VW32_UndoCrst, (DWORD)pcrst )
// support for DeviceIOControl API; go to ring0 with this
#define DeviceIOCtl(VxdDDB, dwIoControlCode, lpvInBuffer, \
cbInBuffer, lpvOutBuffer, cbOutBuffer, \
lpcbBytesReturned, lpoOverlapped, hDevice,\
ppdb, lpDDBName) \
VxDCall11(VW32_DeviceIOCtl, (DWORD) VxdDDB, \
(DWORD) dwIoControlCode, (DWORD) lpvInBuffer, \
(DWORD) cbInBuffer, (DWORD) lpvOutBuffer, \
(DWORD) cbOutBuffer, (DWORD) lpcbBytesReturned, \
(DWORD) lpoOverlapped, (DWORD)hDevice,\
(DWORD) ppdb, lpDDBName)
#define SetWin32Priority( r0ThHandle, PriVal ) \
VxDCall2( VW32_SetWin32Priority, (DWORD)r0ThHandle, (DWORD)PriVal )
#define SetWin32PriorityClass( ThreadArray, NumOfElements ) \
VxDCall2( VW32_SetWin32PriorityClass, (DWORD)(ThreadArray), (DWORD)(NumOfElements) )
#define AttachThreadToGroup( r0ThToAttach, r0ThInGroup ) \
VxDCall2( VW32_AttachThreadToGroup, (DWORD)r0ThToAttach, (DWORD) r0ThInGroup )
#define VW32BlockThread( Timeout ) \
VxDCall1( VW32_BlockThread, Timeout)
#define VW32BlockThreadEx( Timeout, Alertable ) \
VxDCall2( VW32_BlockThreadEx, Timeout, Alertable )
#define ReleaseSyncObj( pSyncObj, bAbandoned ) \
VxDCall2( VW32_ReleaseSyncObject, (DWORD)pSyncObj, bAbandoned )
#ifndef WOW
#define Ring0ThreadStart( R0TParmBlk ) VxDCall1( VW32_Ring0ThreadStart, (DWORD)R0TParmBlk )
#endif // ndef WOW
#define EnableAPCService( KSvcR0Handle ) VxDCall1( VW32_EnableAPCService, KSvcR0Handle )
#define VW32FaultPop(pcontext, ulExceptionNumber, fDebug) \
VxDCall3(VW32_FaultPop, (DWORD)pcontext, ulExceptionNumber, fDebug)
#define VW32ForceCrsts() \
VxDCall0(VW32_ForceCrsts)
#define VW32RestoreCrsts(h, ptdb) \
VxDCall2(VW32_RestoreCrsts, (DWORD)(h), (DWORD)(ptdb))
#define VW32FreezeAllThreads() \
VxDCall0(VW32_FreezeAllThreads)
#define VW32UnFreezeAllThreads() \
VxDCall0(VW32_UnFreezeAllThreads)
#define VW32ForceLeaveCrst(pcrst, ptdb) \
VxDCall2(VW32_ForceLeaveCrst, (DWORD)pcrst, (DWORD)ptdb)
#define VW32ForceEnterCrst(pcrst, ptdb, recur) \
VxDCall3(VW32_ForceEnterCrst, (DWORD)pcrst, (DWORD)ptdb, (DWORD)recur)
extern Get_FP_Instruction_Size(ULONG, ULONG);
#define AttachConappThreadToVM( R0ThreadHandle, hVM ) \
VxDCall2( VW32_AttachConappThreadToVM, (DWORD)R0ThreadHandle, (DWORD)hVM )
#define ActiveTimeBiasSet() VxDCall0(VW32_ActiveTimeBiasSet)
#define VW32SetDeviceFocus() \
VxDCall0(VW32_SetDeviceFocus)
#define VW32UnFreezeThread(ptcb) \
VxDCall1(VW32_UnFreezeThread, (DWORD)(ptcb))
#define VW32SendKernelShutdown() \
VxDCall0(VW32_SendKernelShutdown)
#define VW32RestoreSysCrst(pcrst, ptdb, count) \
VxDCall3(VW32_RestoreSysCrst, (DWORD)pcrst, (DWORD)ptdb, (DWORD)count)
#define VW32AddSysCrst(plcrst, order) \
VxDCall2(VW32_AddSysCrst, (DWORD)(plcrst), (DWORD)(order))
#define VW32SetTimeOut(pfn, ms, data) \
VxDCall3(VW32_SetTimeOut, (DWORD)(pfn), (DWORD)(ms), (DWORD)(data))
#define VW32CancelTimeOut(hto) \
VxDCall1(VW32_CancelTimeOut, (DWORD)(hto))
#define VW32ThrowException(type) \
VxDCall1(VW32_ThrowException, (DWORD)(type))
#define VW32VMMSystemControl(dwControlMsg, dwEDXParam, dwESIParam, dwEDIParam) \
VxDCall4(VW32_VMM_SystemControl, (DWORD)(dwControlMsg), (DWORD)(dwEDXParam), (DWORD)(dwESIParam), (DWORD)(dwEDIParam))
#define VW32SetTimer(lpTimerDb, lpDueTime, lPeriod, pfnCompletion, lpCompletionArg, fResume) \
VxDCall6(VW32_SetTimer, (DWORD)(lpTimerDb), (DWORD)(lpDueTime), (DWORD)(lPeriod), (DWORD)(pfnCompletion), (DWORD)(lpCompletionArg), (DWORD)(fResume))
#define VW32CancelTimer(lpTimerDb) \
VxDCall1(VW32_CancelTimer, (DWORD)(lpTimerDb))
#define VW32GetNextResumeDueTime(lpFileTime) \
VxDCall1(VW32_GetNextResumeDueTime, (DWORD)(lpFileTime))
#define VW32BiosSupportsResumeTimers() \
VxDCall0(VW32_BiosSupportsResumeTimers)
#define VW32SetResumeTimer(lpSystemTime) \
VxDCall1(VW32_SetResumeTimer, (DWORD)(lpSystemTime))
#define VW32DisposeObject(pobj) \
VxDCall1(VW32_DisposeObject, (DWORD)(pobj))
#define VW32DuplicateObject(pobj, ppdbSrc, ppdbDest) \
VxDCall3(VW32_DuplicateObject, (DWORD)(pobj), (DWORD)(ppdbSrc), (DWORD)(ppdbDest))
#define VW32InterlockedAdd386(paddend, quantity) \
VxDCall2(VW32_InterlockedAdd386,(DWORD)(paddend),(DWORD)(quantity))
#define VW32InterlockedCmpxchg386(pdest, exchange, comperand) \
VxDCall3(VW32_InterlockedCmpxchg386,(DWORD)(pdest),(DWORD)(exchange),(DWORD)(comperand))
#define VW32InterlockedXadd386(paddend, exchange) \
VxDCall2(VW32_InterlockedXadd386,(DWORD)(paddend),(DWORD)(exchange))
#define VW32UnuseTdbx(ptdbx) \
VxDCall1(VW32_UnuseTdbx, (DWORD)(ptdbx))
#define VW32WaitSingleObject(pObj, dwTimeout, fAlertable) \
VxDCall3(VW32_WaitSingleObject, (DWORD)(pObj),(dwTimeout),(fAlertable))
#define VW32WaitMultipleObjects(cObj, paObj, dwTimeout, dwFlags, fAlertable) \
VxDCall5(VW32_WaitMultipleObjects, (cObj), (DWORD)(paObj), (dwTimeout), (dwFlags), (fAlertable))
#define VW32ReleaseSem(psem, cRel, plPrev) \
VxDCall3(VW32_ReleaseSem, (DWORD)(psem), (DWORD)(cRel), (DWORD)(plPrev))
#define VW32ReleaseMutex(pmutx) \
VxDCall1(VW32_ReleaseMutex, (DWORD)(pmutx))
#define VW32SetEvent(pevt) \
VxDCall1(VW32_SetEvent, (DWORD)(pevt))
#define VW32PulseEvent(pevt) \
VxDCall1(VW32_PulseEvent, (DWORD)(pevt))
#define VW32ResetEvent(pevt) \
VxDCall1(VW32_ResetEvent, (DWORD)(pevt))
#define VW32DisposeTimerR3Apc(ptimerr3apc) \
VxDCall1(VW32_DisposeTimerR3Apc, (DWORD)(ptimerr3apc))
// Send a fault to kernel debugger
#define DEBUG_Win32Fault(faultnum, errorcd, pcontext) \
VxDCall3(DEBUG_WIN32_FAULT, (faultnum), (errorcd), (ULONG)(pcontext))
#define REBOOT_Win32Init(pfnTermDialogBox, thcbFault) \
VxDCall2(REBOOT_WIN32_INIT,(DWORD)(pfnTermDialogBox),(DWORD)(thcbFault))
#define REBOOT_ChangePhase(bPhase, dwData) \
VxDCall2(REBOOT_CHANGE_PHASE,(DWORD)(bPhase),(DWORD)(dwData))
// VCOND interface
#define VCOND_GetLaunchInfo(conID, cmdline, curdir, flag) VxDCall4(VCOND_GETLAUNCHINFO, conID, (ULONG)cmdline, (ULONG)curdir, (ULONG)flag)
#define VCOND_EmitString(conID, pString, len) VxDCall3(VCOND_EMITSTRING, conID, (ULONG)pString, len)
#define VCOND_CreateConsole(hvm, pConsole) VxDCall2(VCOND_CREATECONSOLE, (ULONG) hvm, (ULONG) pConsole)
#define VCOND_ReadCharInfo(conID, bufptr, len, coord) VxDCall4(VCOND_READCHARINFO, conID, (ULONG)bufptr, len, (ULONG)coord)
#define VCOND_ReadChars(conID, bufptr, coord, len) VxDCall4(VCOND_READCHARS, conID, (ULONG)bufptr, (ULONG)coord, len)
#define VCOND_ReadAttrs(conID, bufptr, coord, len, wantbytes) VxDCall5(VCOND_READATTRS, conID, (ULONG)bufptr, (ULONG)coord, len, wantbytes)
#define VCOND_WriteCharInfo(conID, bufptr, len, coord) VxDCall4(VCOND_WRITECHARINFO, conID, (ULONG)bufptr, len, (ULONG)coord)
#define VCOND_WriteChars(conID, bufptr, coord, len) VxDCall4(VCOND_WRITECHARS, conID, (ULONG)bufptr, (ULONG)coord, len)
#define VCOND_WriteAttrs(conID, bufptr, coord, len, wantbytes) VxDCall5(VCOND_WRITEATTRS, conID, (ULONG)bufptr, (ULONG)coord, len, wantbytes)
#define VCOND_FillAttrs(conID, attr, coord, len) VxDCall4(VCOND_FILLATTRS, conID, (ULONG)attr, (ULONG)coord, len)
#define VCOND_GetCurPos(conID) VxDCall1(VCOND_GETCURPOS, conID)
#define VCOND_GetCurAttr(conID) VxDCall1(VCOND_GETCURATTR, conID)
#define VCOND_SetCurPos(conID, coord) VxDCall2(VCOND_SETCURPOS, conID, (ULONG)coord)
#define VCOND_SetCurAttr(conID, attr) VxDCall2(VCOND_SETCURATTR, conID, (ULONG)attr)
#define VCOND_SetInputMode(conID, mode) VxDCall2(VCOND_SETINPUTMODE, conID, (ULONG)mode)
#define VCOND_GetInputMode(conID) VxDCall1(VCOND_GETINPUTMODE, conID)
#define VCOND_ReadInput(conID, lpBuffer, nEvents, bFile) VxDCall4(VCOND_READINPUT, conID, (ULONG)lpBuffer, (ULONG)nEvents, (ULONG)bFile)
#define VCOND_PeekInput(conID, lpBuffer, nEvents, bFile) VxDCall4(VCOND_PEEKINPUT, conID, (ULONG)lpBuffer, (ULONG)nEvents, (ULONG)bFile)
#define VCOND_WriteInput(conID, lpBuffer, nEvents) VxDCall3(VCOND_WRITEINPUT, conID, (ULONG)lpBuffer, (ULONG)nEvents)
#define VCOND_AttachProcess(conID) VxDCall1(VCOND_ATTACHPROCESS, conID)
#define VCOND_DetachProcess(conID, exitCode) VxDCall2(VCOND_DETACHPROCESS, conID, ( (DWORD)(exitCode) ) & 0xff)
#define VCOND_DetachProcess_NoEC(conID) VxDCall2(VCOND_DETACHPROCESS, conID, VCD_NOEXITCODE)
#define VCOND_DeleteConsole(conID) VxDCall1(VCOND_DELETECONSOLE, conID)
#define VCOND_GetNumberOfInputEvents(conID) VxDCall1(VCOND_GETNUMBEROFINPUTEVENTS, conID)
#define VCOND_PostMessage(hvm, msg, wparam) VxDCall3(VCOND_POSTMESSAGE, (ULONG)hvm, (ULONG)msg, (ULONG)wparam)
#define VCOND_InitAPCs(nAPCs, ConAPCs, szPath) VxDCall3(VCOND_INITAPCS, nAPCs, (ULONG)ConAPCs , (ULONG)szPath)
#define VCOND_GetScreenSize(conID) VxDCall1(VCOND_GETSCREENSIZE, conID)
#define VCOND_FillChars(conID, c, coord, len) VxDCall4(VCOND_FILLCHARS, conID, (ULONG)c, (ULONG)coord, len)
#define VCOND_FlushInput(conID) VxDCall1(VCOND_FLUSHINPUT, conID)
#define VCOND_SetAttribute(conID, attr) VxDCall2(VCOND_SETATTRIBUTE, conID, (ULONG)attr)
#define VCOND_GetButtonCount() VxDCall0(VCOND_GETBUTTONCOUNT)
#define VCOND_SetScreenSize(conID, cSize) VxDCall2(VCOND_SETSCREENSIZE, conID, (ULONG)cSize)
#define VCOND_MatchScreenSize(conID, cSize) VxDCall2(VCOND_MATCHSCREENSIZE, conID, (ULONG)cSize)
#define VCOND_WaitForNewConsole() VxDCall0(VCOND_WAITFORNEWCONSOLE)
#define VCOND_UnblockRing3WithFailure() VxDCall0(VCOND_UNBLOCKRING3WITHFAILURE)
//#define VCOND_Spawn(conID, lpszImageName, lpszCurrentDirectory,
// lpszCommandLine, lpszEnvironment, lpdwExitCode
// (line too long...)
#define VCOND_Spawn(a1, a2, a3, a4, a5, a6) \
VxDCall6(VCOND_SPAWN, (ULONG) a1, (ULONG) a2, \
(ULONG) a3, (ULONG) a4, (ULONG) a5, (ULONG) a6)
#define VCOND_GetEnvironment(conID, pEnv, len) VxDCall3(VCOND_GETENVIRONMENT, conID, (ULONG) pEnv, len)
#define VCOND_GrbRepaintRect(conID, lpConsoleWindow) VxDCall2(VCOND_GRBREPAINTRECT, conID, (ULONG) lpConsoleWindow)
#define VCOND_GrbMoveRect(conID, psrSrcRect, cDestOrg) VxDCall3(VCOND_GRBMOVERECT, conID, (ULONG) psrSrcRect, (ULONG) cDestOrg)
#define VCOND_GrbSetWindowSize(conID, dwSize) VxDCall2(VCOND_GRBSETWINDOWSIZE, conID, dwSize)
#define VCOND_GrbSetWindowOrg(conID, dwOrg) VxDCall2(VCOND_GRBSETWINDOWORG, conID, dwOrg)
#define VCOND_GrbSetScreenSize(conID, dwSize) VxDCall2(VCOND_GRBSETSCREENSIZE, conID, dwSize)
#define VCOND_GrbSetCursorPosition(conID, dwLoc) VxDCall2(VCOND_GRBSETCURSORPOSITION, conID, (ULONG) dwLoc)
#define VCOND_GrbSetCursorInfo(conID, dwInfo) VxDCall2(VCOND_GRBSETCURSORINFO, conID, dwInfo)
#define VCOND_GrbNotifyWOA(conID) VxDCall1(VCOND_GRBNOTIFYWOA, conID)
#define VCOND_GrbSync(conID) VxDCall1(VCOND_GRBSYNC, conID)
#define VCOND_GrbTerminate(conID) VxDCall1(VCOND_GRBTERMINATE, conID)
#define VCOND_DP32_Create(pExename, pCmdline, pCurdir, pStdxInfo, pspseg) \
VxDCall5(VCOND_DP32_CREATE, (ULONG) pExename, \
(ULONG) pCmdline, (ULONG) pCurdir, (ULONG) pStdxInfo, (ULONG) pspseg)
#define VCOND_DP32_Getwork(pRedir) VxDCall1(VCOND_DP32_GETWORK, (ULONG) pRedir)
#define VCOND_DP32_Terminate(pRedir) VxDCall1(VCOND_DP32_TERMINATE, (ULONG) pRedir)
#define VCOND_DP32_Waitwork(pRedir) VxDCall1(VCOND_DP32_WAITWORK, (ULONG) pRedir)
#define VCOND_RedirectionComplete(conID, redirFlags) VxDCall2(VCOND_REDIRECTIONCOMPLETE, conID, redirFlags)
#define VCOND_DP32_Destroy(pRedir) VxDCall1(VCOND_DP32_DESTROY, (ULONG) pRedir)
#ifdef BILINGUAL_CONSOLE
#define VCOND_GetCP(conID) VxDCall1(VCOND_GETCP, conID)
#endif
#ifdef WOW
#define MEOWLoadLibrary(pszLibraryName) VxDCall1(MEOW_LoadLibrary, (ULONG)pszLibraryName)
#define MEOWGetProcAddress(hModule, pszFunctionName, dwOrdinal) VxDCall3(MEOW_GetProcAddress, (ULONG)hModule, (ULONG)pszFunctionName, (ULONG)dwOrdinal)
#define MEOWFreeLibrary(hModule) VxDCall1(MEOW_FreeLibrary, (ULONG)hModule)
#endif // def WOW