diff options
Diffstat (limited to 'sal/systools/win32/uwinapi/win95sys.h')
-rw-r--r-- | sal/systools/win32/uwinapi/win95sys.h | 350 |
1 files changed, 350 insertions, 0 deletions
diff --git a/sal/systools/win32/uwinapi/win95sys.h b/sal/systools/win32/uwinapi/win95sys.h new file mode 100644 index 000000000000..f5500fc7ea9c --- /dev/null +++ b/sal/systools/win32/uwinapi/win95sys.h @@ -0,0 +1,350 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +#pragma once + +//Kernel32 objects + +#define K32OBJ_SEMAPHORE 0x1 +#define K32OBJ_EVENT 0x2 +#define K32OBJ_MUTEX 0x3 +#define K32OBJ_CRITICAL_SECTION 0x4 +#define K32OBJ_PROCESS 0x5 +#define K32OBJ_THREAD 0x6 +#define K32OBJ_FILE 0x7 +#define K32OBJ_CHANGE 0x8 +#define K32OBJ_CONSOLE 0x9 +#define K32OBJ_SCREEN_BUFFER 0xA +#define K32OBJ_MEM_MAPPED_FILE 0xB +#define K32OBJ_SERIAL 0xC +#define K32OBJ_DEVICE_IOCTL 0xD +#define K32OBJ_PIPE 0xE +#define K32OBJ_MAILSLOT 0xF +#define K32OBJ_TOOLHELP_SNAPSHOT 0x10 +#define K32OBJ_SOCKET 0x11 + + +//Process Database flags + +#define fDebugSingle 0x00000001 +#define fCreateProcessEvent 0x00000002 +#define fExitProcessEvent 0x00000004 +#define fWin16Process 0x00000008 +#define fDosProcess 0x00000010 +#define fConsoleProcess 0x00000020 +#define fFileApisAreOem 0x00000040 +#define fNukeProcess 0x00000080 +#define fServiceProcess 0x00000100 +#define fLoginScriptHack 0x00000800 + + +//Thread Database flags + +#define fCreateThreadEvent 0x00000001 +#define fCancelExceptionAbort 0x00000002 +#define fOnTempStack 0x00000004 +#define fGrowableStack 0x00000008 +#define fDelaySingleStep 0x00000010 +#define fOpenExeAsImmovableFile 0x00000020 +#define fCreateSuspended 0x00000040 +#define fStackOverflow 0x00000080 +#define fNestedCleanAPCs 0x00000100 +#define fWasOemNowAnsi 0x00000200 +#define fOKToSetThreadOem 0x00000400 + +#ifdef _MSC_VER +#pragma warning(disable:4103) +#endif +#pragma pack(1) + + +//MODREF and IMTE structures + +typedef struct _MODREF { + struct _MODREF *pNextModRef; // 00h + DWORD un1; // 04h + DWORD un2; // 08h + DWORD un3; // 0Ch + WORD mteIndex; // 10h + WORD un4; // 12h + DWORD un5; // 14h + PVOID ppdb; // 18h Pointer to process database + DWORD un6; // 1Ch + DWORD un7; // 20h + DWORD un8; // 24h +} MODREF, *PMODREF; + +typedef struct _IMTE { + DWORD un1; // 00h + PIMAGE_NT_HEADERS pNTHdr; // 04h + DWORD un2; // 08h + PSTR pszFileName; // 0Ch + PSTR pszModName; // 10h + WORD cbFileName; // 14h + WORD cbModName; // 16h + DWORD un3; // 18h + DWORD cSections; // 1Ch + DWORD un5; // 20h + DWORD baseAddress; // 24h + WORD hModule16; // 28h + WORD cUsage; // 2Ah + DWORD un7; // 2Ch + PSTR pszFileName2; // 30h + WORD cbFileName2; // 34h + DWORD pszModName2; // 36h + WORD cbModName2; // 3Ah +} IMTE, *PIMTE; + + +//Process Database structure + +typedef struct _ENVIRONMENT_DATABASE { +PSTR pszEnvironment; // 00h Pointer to Environment +DWORD un1; // 04h +PSTR pszCmdLine; // 08h Pointer to command line +PSTR pszCurrDirectory; // 0Ch Pointer to current directory +LPSTARTUPINFOA pStartupInfo;// 10h Pointer to STARTUPINFOA struct +HANDLE hStdIn; // 14h Standard Input +HANDLE hStdOut; // 18h Standard Output +HANDLE hStdErr; // 1Ch Standard Error +DWORD un2; // 20h +DWORD InheritConsole; // 24h +DWORD BreakType; // 28h +DWORD BreakSem; // 2Ch +DWORD BreakEvent; // 30h +DWORD BreakThreadID; // 34h +DWORD BreakHandlers; // 38h +} ENVIRONMENT_DATABASE, *PENVIRONMENT_DATABASE; + +typedef struct _KERNEL_OBJECT { +DWORD Type; // 00h KERNEL32 object type (5) +DWORD cReference; // 04h Number of references to process +} KERNEL_OBJECT, *PKERNEL_OBJECT; + +typedef struct _HANDLE_TABLE_ENTRY { + DWORD flags; // Valid flags depend on what type of object this is + PKERNEL_OBJECT pObject; // Pointer to the object that the handle refers to +} HANDLE_TABLE_ENTRY, *PHANDLE_TABLE_ENTRY; + +typedef struct _HANDLE_TABLE { + DWORD cEntries; // Max number of handles in table + HANDLE_TABLE_ENTRY array[1]; // An array (number is given by cEntries) +} HANDLE_TABLE, *PHANDLE_TABLE; + + +typedef struct _PROCESS_DATABASE { +DWORD Type; // 00h KERNEL32 object type (5) +DWORD cReference; // 04h Number of references to process +DWORD un1; // 08h +DWORD someEvent; // 0Ch An event object (What's it used for???) +DWORD TerminationStatus; // 10h Returned by GetExitCodeProcess +DWORD un2; // 14h +DWORD DefaultHeap; // 18h Address of the process heap +DWORD MemoryContext; // 1Ch pointer to the process's context +DWORD flags; // 20h + // 0x00000001 - fDebugSingle + // 0x00000002 - fCreateProcessEvent + // 0x00000004 - fExitProcessEvent + // 0x00000008 - fWin16Process + // 0x00000010 - fDosProcess + // 0x00000020 - fConsoleProcess + // 0x00000040 - fFileApisAreOem + // 0x00000080 - fNukeProcess + // 0x00000100 - fServiceProcess + // 0x00000800 - fLoginScriptHack +DWORD pPSP; // 24h Linear address of PSP? +WORD PSPSelector; // 28h +WORD MTEIndex; // 2Ah +WORD cThreads; // 2Ch +WORD cNotTermThreads; // 2Eh +WORD un3; // 30h +WORD cRing0Threads; // 32h number of ring 0 threads +HANDLE HeapHandle; // 34h Heap to allocate handle tables out of + // This seems to always be the KERNEL32 heap +HTASK W16TDB; // 38h Win16 Task Database selector +DWORD MemMapFiles; // 3Ch memory mapped file list (?) +PENVIRONMENT_DATABASE pEDB; // 40h Pointer to Environment Database +PHANDLE_TABLE pHandleTable; // 44h Pointer to process handle table +struct _PROCESS_DATABASE *ParentPDB; // 48h Parent process database +PMODREF MODREFlist; // 4Ch Module reference list +DWORD ThreadList; // 50h Threads in this process +DWORD DebuggeeCB; // 54h Debuggee Context block? +DWORD LocalHeapFreeHead; // 58h Head of free list in process heap +DWORD InitialRing0ID; // 5Ch +CRITICAL_SECTION crst; // 60h +DWORD un4[3]; // 78h +DWORD pConsole; // 84h Pointer to console for process +DWORD tlsInUseBits1; // 88h // Represents TLS indices 0 - 31 +DWORD tlsInUseBits2; // 8Ch // Represents TLS indices 32 - 63 +DWORD ProcessDWORD; // 90h +struct _PROCESS_DATABASE *ProcessGroup; // 94h +DWORD pExeMODREF; // 98h pointer to EXE's MODREF +DWORD TopExcFilter; // 9Ch Top Exception Filter? +DWORD BasePriority; // A0h Base scheduling priority for process +DWORD HeapOwnList; // A4h Head of the list of process heaps +DWORD HeapHandleBlockList;// A8h Pointer to head of heap handle block list +DWORD pSomeHeapPtr; // ACh normally zero, but can a pointer to a + // moveable handle block in the heap +DWORD pConsoleProvider; // B0h Process that owns the console we're using? +WORD EnvironSelector; // B4h Selector containing process environment +WORD ErrorMode; // B6H SetErrorMode value (also thunks to Win16) +DWORD pevtLoadFinished; // B8h Pointer to event LoadFinished? +WORD UTState; // BCh +} PROCESS_DATABASE, *PPROCESS_DATABASE; + + +//TIB (Thread Information Block) structure + +typedef struct _SEH_record { + struct _SEH_record *pNext; + FARPROC pfnHandler; +} SEH_record, *PSEH_record; + +// This is semi-documented in the NTDDK.H file from the NT DDK +typedef struct _TIB { +PSEH_record pvExcept; // 00h Head of exception record list +PVOID pvStackUserTop; // 04h Top of user stack +PVOID pvStackUserBase; // 08h Base of user stack +WORD pvTDB; // 0Ch TDB +WORD pvThunksSS; // 0Eh SS selector used for thunking to 16 bits +DWORD SelmanList; // 10h +PVOID pvArbitrary; // 14h Available for application use +struct _tib *ptibSelf; // 18h Linear address of TIB structure +WORD TIBFlags; // 1Ch +WORD Win16MutexCount; // 1Eh +DWORD DebugContext; // 20h +DWORD pCurrentPriority; // 24h +DWORD pvQueue; // 28h Message Queue selector +PVOID *pvTLSArray; // 2Ch Thread Local Storage array +} TIB, *PTIB; + + +//TDBX structure + +typedef struct _TDBX { + DWORD ptdb; // 00h // PTHREAD_DATABASE + DWORD ppdb; // 04h // PPROCESDS_DATABASE + DWORD ContextHandle; // 08h + DWORD un1; // 0Ch + DWORD TimeOutHandle; // 10h + DWORD WakeParam; // 14h + DWORD BlockHandle; // 18h + DWORD BlockState; // 1Ch + DWORD SuspendCount; // 20h + DWORD SuspendHandle; // 24h + DWORD MustCompleteCount; // 28h + DWORD WaitExFlags; // 2Ch + // 0x00000001 - WAITEXBIT + // 0x00000002 - WAITACKBIT + // 0x00000004 - SUSPEND_APC_PENDING + // 0x00000008 - SUSPEND_TERMINATED + // 0x00000010 - BLOCKED_FOR_TERMINATION + // 0x00000020 - EMULATE_NPX + // 0x00000040 - WIN32_NPX + // 0x00000080 - EXTENDED_HANDLES + // 0x00000100 - FROZEN + // 0x00000200 - DONT_FREEZE + // 0x00000400 - DONT_UNFREEZE + // 0x00000800 - DONT_TRACE + // 0x00001000 - STOP_TRACING + // 0x00002000 - WAITING_FOR_CRST_SAFE + // 0x00004000 - CRST_SAFE + // 0x00040000 - BLOCK_TERMINATE_APC + DWORD SyncWaitCount; // 30h + DWORD QueuedSyncFuncs; // 34h + DWORD UserAPCList; // 38h + DWORD KernAPCList; // 3Ch + DWORD pPMPSPSelector; // 40h + DWORD BlockedOnID; // 44h + DWORD un2[7]; // 48h + DWORD TraceRefData; // 64h + DWORD TraceCallBack; // 68h + DWORD TraceEventHandle; // 6Ch + WORD TraceOutLastCS; // 70h + WORD K16TDB; // 72h + WORD K16PDB; // 74h + WORD DosPDBSeg; // 76h + WORD ExceptionCount; // 78h +} TDBX, *PTDBX; + + +//Thread Database structure + +typedef struct _THREAD_DATABASE { +DWORD Type; // 00h +DWORD cReference; // 04h +PPROCESS_DATABASE pProcess; // 08h +DWORD someEvent; // 0Ch An event object (What's it used for???) +DWORD pvExcept; // 10h This field through field 3CH is a TIB + // structure (see TIB.H) +DWORD TopOfStack; // 14h +DWORD StackLow; // 18h +WORD W16TDB; // 1Ch +WORD StackSelector16; // 1Eh Used when thunking down to 16 bits +DWORD SelmanList; // 20h +DWORD UserPointer; // 24h +PTIB pTIB; // 28h +WORD TIBFlags; // 2Ch TIBF_WIN32 = 1, TIBF_TRAP = 2 +WORD Win16MutexCount; // 2Eh +DWORD DebugContext; // 30h +PDWORD pCurrentPriority; // 34h +DWORD MessageQueue; // 38h +DWORD pTLSArray; // 3Ch +PPROCESS_DATABASE pProcess2;// 40h Another copy of the thread's process??? +DWORD Flags; // 44h + // 0x00000001 - fCreateThreadEvent + // 0x00000002 - fCancelExceptionAbort + // 0x00000004 - fOnTempStack + // 0x00000008 - fGrowableStack + // 0x00000010 - fDelaySingleStep + // 0x00000020 - fOpenExeAsImmovableFile + // 0x00000040 - fCreateSuspended + // 0x00000080 - fStackOverflow + // 0x00000100 - fNestedCleanAPCs + // 0x00000200 - fWasOemNowAnsi + // 0x00000400 - fOKToSetThreadOem +DWORD TerminationStatus; // 48h Returned by GetExitCodeThread +WORD TIBSelector; // 4Ch +WORD EmulatorSelector; // 4Eh +DWORD cHandles; // 50h +DWORD WaitNodeList; // 54h +DWORD un4; // 58h +DWORD Ring0Thread; // 5Ch +PTDBX pTDBX; // 60 +DWORD StackBase; // 64h +DWORD TerminationStack; // 68h +DWORD EmulatorData; // 6Ch +DWORD GetLastErrorCode; // 70h +DWORD DebuggerCB; // 74h +DWORD DebuggerThread; // 78h +PCONTEXT ThreadContext; // 7Ch // register context defined in WINNT.H +DWORD Except16List; // 80h +DWORD ThunkConnect; // 84h +DWORD NegStackBase; // 88h +DWORD CurrentSS; // 8Ch +DWORD SSTable; // 90h +DWORD ThunkSS16; // 94h +DWORD TLSArray[64]; // 98h +DWORD DeltaPriority; // 198h + +// The retail version breaks off somewhere around here. +// All the remaining fields are most likely only in the debug version + +DWORD un5[7]; // 19Ch +DWORD pCreateData16; // 1B8h +DWORD APISuspendCount; // 1BCh # of times SuspendThread has been called +DWORD un6; // 1C0h +DWORD WOWChain; // 1C4h +WORD wSSBig; // 1C8h +WORD un7; // 1CAh +DWORD lp16SwitchRec; // 1CCh +DWORD un8[6]; // 1D0h +DWORD pSomeCritSect1; // 1E8h +DWORD pWin16Mutex; // 1ECh +DWORD pWin32Mutex; // 1F0h +DWORD pSomeCritSect2; // 1F4h +DWORD un9; // 1F8h +DWORD ripString; // 1FCh +DWORD LastTlsSetValueEIP[64]; // 200h (parallel to TlsArray, contains EIP + // where TLS value was last set from) +} THREAD_DATABASE, *PTHREAD_DATABASE; + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |