302 lines
9 KiB
C
302 lines
9 KiB
C
/*++ BUILD Version: 0001
|
|
*
|
|
* WOW v1.0
|
|
*
|
|
* Copyright (c) 1991, Microsoft Corporation
|
|
*
|
|
* TDB.H
|
|
* 16-bit Kernel Task Data Block
|
|
*
|
|
* History:
|
|
* Created 11-Feb-1992 by Matt Felton (mattfe) - from 16 bit tdb.inc
|
|
* 7-apr-1992 mattfe updated to be win 3.1 compatible
|
|
*
|
|
--*/
|
|
|
|
/* XLATOFF */
|
|
#ifndef __TDB16_H
|
|
#define __TDB16_H
|
|
/* XLATON */
|
|
|
|
/*
|
|
* NewExeHdr struct offsets. WOW32 uses these for getting expected winversion
|
|
* directly from the exehdr.
|
|
*
|
|
*/
|
|
|
|
#define NE_LOWINVER_OFFSET 0x3e
|
|
#define NE_HIWINVER_OFFSET 0x0c
|
|
#define FLAG_NE_PROPFONT 0x2000
|
|
|
|
/*
|
|
* Task Data Block - 16 Bit Kernel Data Structure
|
|
*
|
|
* Contains all 16 bit task specific data.
|
|
*
|
|
*/
|
|
|
|
#define numTaskInts 7
|
|
#define THUNKELEM 8 // (62*8) = 512-16 (low arena overhead)
|
|
#define THUNKSIZE 8
|
|
|
|
/* XLATOFF */
|
|
#pragma pack(2)
|
|
/* XLATON */
|
|
|
|
typedef struct TDB { /* tdb16 */
|
|
|
|
WORD TDB_next ; // next task in dispatch queue
|
|
WORD TDB_taskSP ; // Saved SS:SP for this task
|
|
WORD TDB_taskSS ; //
|
|
WORD TDB_nEvents ; // Task event counter
|
|
BYTE TDB_priority ; // Task priority (0 is highest)
|
|
|
|
#ifdef WOWONLY
|
|
|
|
BYTE TDB_thread_ordinal ; // ordinal number of this thread
|
|
WORD TDB_thread_next ; // next thread
|
|
WORD TDB_thread_tdb ; // the real TDB for this task
|
|
WORD TDB_thread_list ; // list of allocated thread structures
|
|
|
|
#else // WOWONLY
|
|
|
|
BYTE TDB_iMonitor; // USER maintains this field for multiple monitor support
|
|
WORD TDB_Unused2; // BUGBUG - this field was only used for old looking glass (os/2 app support) stuff and should be removed
|
|
DWORD TDB_Unused3; // BUGBUG - this field was only used for old looking glass (os/2 app support) stuff and should be removed
|
|
|
|
#endif // else WOWONLY
|
|
|
|
|
|
DWORD TDB_ptrace_appentry; // used for cvw support to break at app's entry
|
|
|
|
//
|
|
// COMPATIBILITY WARNING: the above field(s) used to be
|
|
//
|
|
// WORD TDB_thread_free ; // free list of availble thread structures
|
|
// WORD TDB_thread_count ; // total count of tread structures
|
|
|
|
WORD TDB_FCW ; // Floating point control word
|
|
BYTE TDB_flags ; // Task flags
|
|
BYTE TDB_filler ; // keep word aligned
|
|
WORD TDB_ErrMode ; // Error mode for this task
|
|
WORD TDB_ExpWinVer ; // Expected Windows version for this task
|
|
WORD TDB_Module ; // Task module handle to free in killtask
|
|
WORD TDB_pModule ; // Pointer to the module database.
|
|
WORD TDB_Queue ; // Task Event Queue pointer
|
|
WORD TDB_Parent ; // TDB of the task that started this up
|
|
|
|
#ifdef WOWONLY
|
|
|
|
WORD TDB_SigAction ; // Action for app task signal
|
|
DWORD TDB_ASignalProc ; // App's Task Signal procedure address
|
|
|
|
#else // WOWONLY
|
|
|
|
WORD TDB_Unused5; // BUGBUG - this field was only used for old looking glass (os/2 app support) stuff and should be removed
|
|
DWORD TDB_Unused6; // BUGBUG - this field was only used for old looking glass (os/2 app support) stuff and should be removed
|
|
|
|
#endif // else WOWONLY
|
|
|
|
DWORD TDB_USignalProc ; // User's Task Signal procedure address
|
|
DWORD TDB_GNotifyProc ; // Task global discard notify proc.
|
|
DWORD TDB_INTVECS[numTaskInts] ; // Task specfic harare interrupts
|
|
WORD TDB_CompatFlags ; // Compatibility flags
|
|
WORD TDB_CompatFlags2 ; // Upper 16 bits
|
|
|
|
//
|
|
// SEVERE COMPATIBILITY WARNING: The following five fields were
|
|
// used by NT WOW, and stomps some MEoW fields, namely:
|
|
// TDB_selTIB, TDB_ThreadHandle, TDB_selHeap32 and TDB_Unused7.
|
|
// Those fields have been put at the end.
|
|
//
|
|
#ifdef WOW
|
|
|
|
WORD TDB_CompatHandle ; // for dBase bug
|
|
WORD TDB_WOWCompatFlagsEx ; // More WOW Compatibility flags
|
|
WORD TDB_WOWCompatFlagsEx2 ; // Upper 16 bits
|
|
BYTE TDB_Free[3] ; // Filler to keep TDB size unchanged
|
|
BYTE TDB_cLibrary ; // tracks add/del of ALL libs in system EMS
|
|
|
|
#else // WOW
|
|
|
|
WORD TDB_selTIB; // Selector to thread/task's TIB
|
|
DWORD TDB_ThreadHandle; // Win32 thread handle
|
|
WORD TDB_selHeap32; // Win32 16-bit heap, for atoms
|
|
WORD TDB_Unused7; // Filler to keep TDB size unchanged
|
|
|
|
#endif // else WOW
|
|
|
|
|
|
DWORD TDB_PHT ; // (HANDLE:OFFSET) to private handle table
|
|
WORD TDB_PDB ; // MSDOS Process Data Block (PDB)
|
|
DWORD TDB_DTA ; // MSDOS Disk Transfer Address
|
|
BYTE TDB_Drive ; // MSDOS current drive
|
|
BYTE TDB_Directory[65] ; // *** not used starting with win95
|
|
// TDB_Directory is not used anymore and is not tracked
|
|
// use TDB_LFNDirectory at end of structure.
|
|
// This field is still kept intact as OLE might be depending on this
|
|
|
|
#ifdef WOWONLY
|
|
|
|
WORD TDB_Validity ; // initial AX to be passed to a task
|
|
|
|
#else // WOWONLY
|
|
|
|
WORD TDB_Unused8; // BUGBUG - this field was only used for old looking glass (os/2 app support) stuff and should be removed
|
|
|
|
#endif // else WOWONLY
|
|
|
|
WORD TDB_Yield_to ; // DirectedYield arg stored here
|
|
WORD TDB_LibInitSeg ; // segment address of libraries to init
|
|
WORD TDB_LibInitOff ; // MakeProcInstance thunks live here.
|
|
WORD TDB_MPI_Sel ; // Code selector for thunks
|
|
WORD TDB_MPI_Thunks[((THUNKELEM*THUNKSIZE)/2)]; //
|
|
BYTE TDB_ModName[8] ; // Name of Module.
|
|
WORD TDB_sig ; // Signature word to detect bogus code
|
|
|
|
#ifndef WOW
|
|
|
|
DWORD TDB_LastError; // Last error
|
|
|
|
#endif // ndef WOW
|
|
|
|
#ifdef WOW
|
|
|
|
DWORD TDB_ThreadID ; // 32-Bit Thread ID for this Task (use TDB_Filler Above)
|
|
DWORD TDB_hThread ; // 32-bit Thread Handle for this task
|
|
WORD TDB_WOWCompatFlags; // WOW Compatibility flags
|
|
WORD TDB_WOWCompatFlags2; // WOW Compatibility flags
|
|
#ifdef FE_SB
|
|
WORD TDB_WOWCompatFlagsJPN; // WOW Compatibility flags for JAPAN
|
|
WORD TDB_WOWCompatFlagsJPN2; // WOW Compatibility flags for JAPAN
|
|
#endif // FE_SB
|
|
DWORD TDB_vpfnAbortProc; // printer AbortProc
|
|
|
|
#endif // def WOW
|
|
|
|
BYTE TDB_LFNDirectory[260]; // Long directory name
|
|
|
|
#ifdef WOW
|
|
#ifndef WOWONLY
|
|
|
|
WORD TDB_selTIB; // Selector to thread/task's TIB
|
|
DWORD TDB_ThreadHandle; // Win32 thread handle
|
|
WORD TDB_selHeap32; // Win32 16-bit heap, for atoms
|
|
WORD TDB_Unused7; // Filler to keep TDB size unchanged
|
|
|
|
#endif // ndef WOWONLY
|
|
#endif // def WOW
|
|
|
|
|
|
} TDB16;
|
|
typedef TDB16 UNALIGNED *PTDB16;
|
|
typedef TDB16 *LPTDB16;
|
|
|
|
#ifndef __KERNEL32_H
|
|
|
|
/*ASM
|
|
|
|
TDBsize = SIZE TDB
|
|
*/
|
|
#endif // ndef__KERNEL32_H
|
|
|
|
|
|
/* XLATOFF */
|
|
|
|
#ifndef __KERNEL32_H
|
|
#ifndef WOW32_EXTENSIONS
|
|
|
|
typedef TDB16 TDB;
|
|
typedef TDB UNALIGNED *PTDB;
|
|
|
|
#endif // ndef WOW32_EXTENSIONS
|
|
#endif // ndef__KERNEL32_H
|
|
|
|
// NEW_EXE1 struc from core\inc\newexe.inc
|
|
|
|
typedef struct tagNEW_EXE1 {
|
|
WORD ne_blah1;
|
|
WORD ne_usage;
|
|
WORD ne_blah2;
|
|
WORD ne_pnextexe;
|
|
WORD ne_pautodata;
|
|
WORD ne_pfileinfo; // OFSTRUCTEX offset in TDB_pModule
|
|
} NEW_EXE1;
|
|
|
|
|
|
// PDB16 comes from core\inc\pdb.inc
|
|
|
|
typedef struct tagPDB16 {
|
|
WORD PDB16_Exit_Call;
|
|
WORD PDB16_block_len;
|
|
BYTE PDB16_pad1;
|
|
BYTE PDB16_CPM_Call[5];
|
|
DWORD PDB16_Exit;
|
|
DWORD PDB16_Ctrl_C;
|
|
DWORD PDB16_Fatal_Abort;
|
|
WORD PDB16_Parent_PID;
|
|
BYTE PDB16_JFN_Table[20];
|
|
WORD PDB16_environ;
|
|
DWORD PDB16_User_stack;
|
|
WORD PDB16_JFN_Length;
|
|
DWORD PDB16_JFN_Pointer;
|
|
DWORD PDB16_Next_PDB;
|
|
BYTE PDB16_InterCon;
|
|
BYTE PDB16_Append;
|
|
BYTE PDB16_Novell_Used[2];
|
|
WORD PDB16_Version;
|
|
WORD PDB16_Chain;
|
|
WORD PDB16_Partition;
|
|
WORD PDB16_NextPDB;
|
|
DWORD PDB16_GlobalHeap;
|
|
DWORD PDB16_Entry_stack;
|
|
BYTE PDB16_Call_system[5];
|
|
BYTE PDB16_PAD2[5];
|
|
WORD PDB16_DupRefCount;
|
|
BYTE PDB16_5C_FCB[0x10];
|
|
BYTE PDB16_6C_FCB[0x14];
|
|
BYTE PDB16_DEF_DTA[0x80];
|
|
} PDB16;
|
|
|
|
/* XLATON */
|
|
|
|
// signature word used to check validity of a TDB
|
|
|
|
#define TDB_SIGNATURE 'DT'
|
|
|
|
// TDB flags
|
|
|
|
// GDI will clear the TDBF_HOOKINT2F bit when enabling/disabling the
|
|
// DISPLAY driver, *dont* change or remove this bit without changing
|
|
// GDI. Toddla
|
|
//
|
|
|
|
#define TDBF_WINOLDAP 01 /* This app is WinOldAp. */
|
|
#define TDBF_EMSSHARE 02 /* This app shares EMS banks with MSDOS EXEC. */
|
|
#define TDBF_CACHECHECK 04 /* Used in CacheCompact to prevent revisitation. */
|
|
#ifdef WOWONLY
|
|
#define TDBF_OS2APP 0x08 // This is an OS/2 app.
|
|
#define TDBF_WIN32S 0x10 // This is Win32S app.
|
|
#else ; WOWONLY
|
|
#define TDBF_NEWTASK 0x08 // This task has not yet been scheduled
|
|
#endif ; WOWONLY
|
|
#define TDBF_KERNEL32 0x10 /* This is a Kernel32 thread */
|
|
#define TDBF_HGCLEANUP 0x20 /* Win32 app has ganged handles to clean up */
|
|
#define TDBF_HOOKINT21 0x40 // app hooks int 21H
|
|
#define TDBF_HOOKINT2F 0x80 // app hooks int 2FH
|
|
|
|
// This bit is defined for the TDB_Drive field
|
|
#define TDB_DIR_VALID 0x80
|
|
|
|
|
|
|
|
// NOTE TDB_ThreadID MUST be DWORD aligned or else it will fail on MIPS
|
|
|
|
/* XLATOFF */
|
|
#pragma pack()
|
|
/* XLATON */
|
|
|
|
/* XLATOFF */
|
|
#endif // ndef __TDB16_H
|
|
/* XLATON */
|