For PTDA formats for other versions of OS/2 see:
PTDA for OS/2 Warp V4.0 RETAIL kernel
PTDA for OS/2 Warp V3.0 ALLSTRICT kernel
PTDA for OS/2 Warp V3.0 RETAIL kernel
Pointers
CurrTSD points to the current TSD.
pPTDASelf points to the current PTDA.
┌────────────────────┬──────┬──────┬────┬────────────────────────────────────────┐│Field Name │Offset│Length│Type│Description │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │pPTDAParent │+0 │4 │D │Parent PTDA │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │pPTDASelf │+4 │4 │D │This PTDA │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │pPTDAFirstChild │+8 │4 │D │Head of child chain PTDA │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │pPTDAExecChild │+c │4 │D │New Child PTDA (Child being exec'ed) │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │pPTDANextSibling │+10 │4 │D │Next sibling's PTDA │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │pPTDAPrevSibling │+14 │4 │D │Previous sibling's PTDA │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_pszproc │+18 │4 │D │Pointer to the EXE file this process is │ │ │ │ │ │executing. Used by PerfView │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_pTCBHole │+1c │4 │D │some TCB before first Tid 'hole' │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_pTCBHead │+20 │4 │D │Head of list of active TCBs owned by │ │ │ │ │ │this process │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_cTCB │+24 │2 │W │Number of TCBs in use │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_ctib │+26 │2 │W │Count of TIBs allocated │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_avatib │+28 │10 │D │Pointers to TIB arrays │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_pdcb │+38 │4 │D │ │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_flDbg │+3c │4 │D │ │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_ah │+40 │40 │S │Private arena header │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_pgdata │+80 │26 │S │ │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_environ │+a6 │2 │W │handle to process's envt seg │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_pBeginLIBPATH │+a8 │4 │D │ │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_pEndLIBPATH │+ac │4 │D │D75220- support dynamic libpath │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_pgpc │+b0 │240 │S │ │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_pPVDBPrc │+2f0 │4 │D │ │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_pSGSList │+2f4 │4 │D │ │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_pexllist │+2f8 │4 │D │Flat pointer to exit list data │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_cdllterm │+2fc │4 │D │ │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │CDS_Handle │+300 │34 │W │array of current directory handles │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │OEMPtr │+334 │2 │W │Offset to OEM-Added fields │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │VerFlg │+336 │1 │B │Initialize with verify off │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │LCurDrv │+337 │1 │B │Logical current drive - Default A: │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │PCurDrv │+338 │1 │B │physical drive after assign mapping │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │LIS_Fgnd │+339 │1 │B │ │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │FgndOnly │+33a │1 │B │foreground only flag │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_pad1 │+33b │1 │B │ │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_pTCBCritSec │+33c │4 │D │TCB that did enter CritSec │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_pTCBPriQCritSec│+340 │4 │D │TCBs awaiting CritSec wakeup │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_cCritSec │+344 │2 │W │Critical Section Count │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │CurrentPDB │+346 │2 │W │Currently active PDB (V86 segment) │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │seltss │+348 │2 │W │ │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ProcFlag │+34a │2 │W │if == 1 then this is a special process │ │ │ │ │ │(swapper or screen switch); NO removable│ │ │ │ │ │media buffer will be allocated to this │ │ │ │ │ │process. │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_ForcedActions │+34c │4 │D │pending action bits │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_ulExitCode │+350 │4 │D │Exit code of last task │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_ulExitType │+354 │4 │D │Type of exit │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_ulExitTID │+358 │4 │D │Exit Thread ID (32-bit exceptions) │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ThisCDS │+35c │4 │D │Address of current CDS *REDIR* 3.10 │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_pCDS │+360 │2 │W │SS relative pointer to a curdir struct │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │CDSsize │+362 │2 │W │Size of CDS pointed to by ThisCDS ONLY │ │ │ │ │ │used for CDS entries in RMP seg │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │Sattrib │+364 │2 │W │Storage for search attrs *REDIR* 3.10 │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │sPCB │+366 │2 │W │Selector of Profile Control Block │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_pPCB │+368 │4 │D │Pointer to Profile Control Block │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │JFN_Max │+36c │2 │W │highest JFN used so far │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │NextSrchH │+36e │2 │W │Next value to use for search handle │ │ │ │ │ │First value used will be 2. │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │SrchRmp │+370 │4 │D │Handle & Selector for RMP segment we │ │ │ │ │ │keep search handles in. │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │FNotifyLocal_First │+374 │2 │W │ │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │FNotifyLocal_Count │+376 │2 │W │ │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │Sig_ignf │+378 │2 │W │bit vector of ignored signals │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │Sig_hndf │+37a │2 │W │bit vector of handled signals │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │Sig_errf │+37c │2 │W │bit vector of error generating signals │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │Sig_attempted │+37e │2 │W │bit vector of signals we've tried to │ │ │ │ │ │handle with 32-bit exceptions │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │Sig_arg │+380 │10 │W │byte vector of signal arguments │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │Sig_termtid │+390 │2 │W │'Terminator' TID for APTERM. │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │HoldSigCnt │+392 │2 │W │DOSHOLDSIGNAL counter │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │SigFocusCnt │+394 │2 │W │PUBLIB DOS32SETSIGNALEXCEPTIONFOCUS │ │ │ │ │ │count │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │JFN_Table │+396 │28 │W │default handle table │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │JFN_Flags │+3be │14 │B │default JFN flags table │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_rasflag │+3d2 │2 │W │RAS trace indicator │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │SysSemPTDATbl │+3d4 │100 │S │ │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │SavedHardErr │+4d4 │4 │D │ │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_ptdasem │+4d8 │C │S │PTDA semaphore that is, inter-thread │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_DLMsem │+4e4 │C │S │b732954 Edd PTDA semaphore that is, │ │ │ │ │ │inter-thread │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_lidt │+4f0 │6 │W │current IDT limit/base │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │Csid │+4f6 │2 │W │Command Subtree ID │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │Behav_bit │+4f8 │2 │W │program behavior bits │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │MSW │+4fa │2 │W │CPU matching status word │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_rsrclist │+4fc │4 │D │far pointer to local resource list │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_pldrdldHead │+500 │4 │D │loader demand load data list │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │pPrSemTbl │+504 │4 │D │(void * => PSEM) pointer to private │ │ │ │ │ │semaphore table │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ulPrTblSize │+508 │4 │D │size of pPrSemTbl in dwords │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ulPrTotUsed │+50c │4 │D │number of entries in pPrSemTbl │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ulPrNextFree │+510 │4 │D │next free slot in pPrSemTbl │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │hksPrTbl │+514 │4 │D │kernel semaphore handle for private │ │ │ │ │ │semaphore table │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │pShSemBmp │+518 │4 │D │pointer to private bitmap for the shared│ │ │ │ │ │semaphore table │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ulShBmpSize │+51c │4 │D │size of pShSemBmp in bits │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │hksShBmp │+520 │4 │D │kernel semaphore handle for private │ │ │ │ │ │semaphore table │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ulMtxOwned │+524 │4 │D │number of mutex owned by this process in│ │ │ │ │ │the two sem tables │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_TLMA │+528 │4 │D │in use flag and dword copy count │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_TLMABM │+52c │4 │B │thread local memory │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_TLMASizeMap │+530 │20 │B │thread local memory │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │Cons_Loc │+550 │A │S │ │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │SysCallSfcn │+55a │1 │B │Value of AL on system entry │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │SysCall │+55b │1 │B │Last system call processed │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │KBD_Mode │+55c │1 │B │Keyboard input mode │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_NewFiles │+55d │1 │B │If bit one is set, process supports // │ │ │ │ │ │54400 new files (long names) │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │AutoFail │+55e │1 │B │Non-zero if I 24 FAILed magically │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │CP_Flgs │+55f │1 │B │Default is no codepage in system. │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │Sig_vec │+560 │20 │D │signal handlers │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │Exc_vec │+580 │1C │D │OSOLETE exception vectors │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_timerhead │+59c │4 │D │ │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_extsig │+5a0 │1 │B │ │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_pad6 │+5a1 │3 │B │alignment │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │pPvwDataBlk │+5a4 │4 │D │Used by perfview │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_lanman_sec │+5a8 │4 │D │Used by LANMAN & HPFS for security. │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │SigFTerm │+5ac │2 │W │ │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_ppgdata │+5ae │2 │W │offset ptda_pgdata │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_child │+5b0 │2 │W │New child PTDA handle (Child being │ │ │ │ │ │Exec'ed) │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_childalias │+5b2 │2 │W │ │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_handle │+5b4 │2 │W │handle to this segment │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_module │+5b6 │2 │W │program module handle for process │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_ldthandle │+5b8 │2 │W │ │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_ldtpgmap │+5ba │2 │W │Bitmap of valid LDT pages │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_ldtaddr │+5bc │4 │D │ │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │CP_CaseMapTbl │+5c0 │4 │D │ │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │codepage_tag │+5c4 │2 │W │the current code page │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │JFN_Length │+5c6 │2 │W │Size of JFN table in bytes │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │JFN_pTable │+5c8 │4 │D │PM pointer to JFN table │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │JFN_Flg_Ptr │+5cc │4 │D │pointer to JFN flags │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_pad │+5d0 │1 │B │ │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ExtErr_Locus │+5d1 │1 │B │Extended Error Locus *REDIR* 3.10 │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ExtErr │+5d2 │2 │W │Extended Error code *REDIR* 3.10 │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ExtErr_Action │+5d4 │1 │B │Extended Error Action *REDIR* 3.10 │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ExtErr_Class │+5d5 │1 │B │Extended Error Class *REDIR* 3.10 │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_infoseg │+5d6 │24 │S │ │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_vme │+5fa │1 │B │VME Flag │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_pad3 │+5fb │1 │B │alignment │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │CurrTCB │+5fc │2 │W │pointer to current TCB │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │CurrTSD │+5fe │2 │W │pointer to current TSD │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ThisPTDA │+600 │2 │W │Selector for this ptda │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_NPX_em_cs │+602 │2 │W │b726833 NPX emulator CS b726833 │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_NPX_em_eip │+604 │4 │D │b726833 NPX emulator EIP b726833 │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_pad4 │+608 │2 │W │alignment b726833 │ ├────────────────────┼──────┼──────┼────┼────────────────────────────────────────┤ │ptda_signature │+60a │2 │B │must contain "TD" │ └────────────────────┴──────┴──────┴────┴────────────────────────────────────────┘
ptda_ForcedActions flag definitions:
┌─────────────┬──────────┬────────────────────────────────────────┐ │Name │Bit Mask │Description │ ├─────────────┼──────────┼────────────────────────────────────────┤ │TK_FF_BUF │0x00000001│Buffer must be released │ ├─────────────┼──────────┼────────────────────────────────────────┤ │TK_FF_EXIT │0x00000002│Call TKExit (old FF_DES) │ ├─────────────┼──────────┼────────────────────────────────────────┤ │TK_FF_CRITSEC│0x00000004│Enter Per-task critical section │ ├─────────────┼──────────┼────────────────────────────────────────┤ │TK_FF_ICE │0x00000008│Freeze thread │ ├─────────────┼──────────┼────────────────────────────────────────┤ │TK_FF_NPX │0x00000010│NPX Error │ ├─────────────┼──────────┼────────────────────────────────────────┤ │TK_FF_TIB │0x00000020│Update the TIB │ ├─────────────┼──────────┼────────────────────────────────────────┤ │TK_FF_TRC │0x00000040│Enter Debug │ ├─────────────┼──────────┼────────────────────────────────────────┤ │TK_FF_SIG │0x00000080│Signal pending │ ├─────────────┼──────────┼────────────────────────────────────────┤ │TK_FF_CTXH │0x00000100│Pending local context hooks │ ├─────────────┼──────────┼────────────────────────────────────────┤ │TK_FF_STIH │0x00000200│Execute STI hooks │ ├─────────────┼──────────┼────────────────────────────────────────┤ │TK_FF_VDMBP │0x00000400│Execute VDM BP hooks │ ├─────────────┼──────────┼────────────────────────────────────────┤ │TK_FF_RTRY │0x00000800│Retry V86 system call │ ├─────────────┼──────────┼────────────────────────────────────────┤ │TK_FF_PIB │0x00001000│Update the PIB │ ├─────────────┼──────────┼────────────────────────────────────────┤ │TK_FF_SCH │0x00002000│Do Scheuler Processing │ ├─────────────┼──────────┼────────────────────────────────────────┤ │TK_FF_TFBIT │0x00004000│Validate user eflags TF bit │ ├─────────────┼──────────┼────────────────────────────────────────┤ │TK_FF_TIBPRI │0x00008000│Update only the priority fields in TIB │ │ │ │59463 │ └─────────────┴──────────┴────────────────────────────────────────┘