Thread Control Block for OS/2 V2.11
┌──────────────────┬──────┬──────┬────┬────────────────────────────────────────┐
│Field Name │Offset│Length│Type│Description │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBOrdinal │+0 │2 │W │Ordinal number of thread in PTDA │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBNumber │+2 │2 │W │Thread slot number │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBForcedActions │+4 │4 │D │Bit vector of forced actions │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpPTDA │+8 │4 │D │Pointer to the PTDA │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpTSD │+c │4 │D │Pointer to thread swappable data │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBptib │+10 │4 │D │Pointer to thread info block │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpTCBNext │+14 │4 │D │forward link to next (active) TCB │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBcbStackMax │+18 │4 │D │Virtual size of stack object │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBcbStackCur │+1c │4 │D │Committed size of stack object │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpStack │+20 │4 │D │Virtual base of stack │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpStack16Lo │+24 │4 │D │Virtual base of 16-bit stack │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpStack16Hi │+28 │4 │D │Virtual limit of 16-bit stack │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpLibiHead │+2c │4 │D │Link to libi load data area │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpLibiCurr │+30 │4 │D │Link to libi load data area │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpLibiFree │+34 │4 │D │Link to libi free data area │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_pcriFrameType │+38 │4 │D │stack frame type │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_pFrameBase │+3c │4 │D │stack frame base pointer │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_hookheadLocal │+40 │8 │D │local context hook head │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_phookOwnerHead│+48 │4 │D │linked list of hook blocks │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpteKStackTCB0 │+4c │4 │D │KStack page 0 of TCB │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpteKStackTCB1 │+50 │4 │D │KStack page 1 of TCB │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpteKStackTSD │+54 │4 │D │KStack TSD page │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpteKStackPTDA0 │+58 │4 │D │KStack page 0 of PTDA │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpteKStackPTDA1 │+5c │4 │D │KStack page 1 of PTDA │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpteKStackPTDA2 │+60 │4 │D │KStack page 2 of PTDA │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBCurrTCB │+64 │4 │D │SS-relative offset of Current TCB │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBCurrTSD │+68 │4 │D │SS-relative offset of Current TSD │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBBiasTCB │+6c │4 │D │stack-to-flat TCB conversion value │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBBiasTSD │+70 │4 │D │stack-to-flat TSD conversion value │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBDMAAdd │+74 │4 │D │User's I/O transfer address │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSecPos │+78 │4 │D │Position of first sector accessed within│
│ │ │ │ │file │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBThisSFT │+7c │4 │D │pointer to SFT we're working with │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBValSec │+80 │4 │D │Number of valid (previously written) │
│ │ │ │ │sectors │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpRTCB │+84 │4 │D │Redirector TCB (Used by LANMAN) │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBProc_ID │+88 │2 │W │process ID for file sharing checks │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBUser_ID │+8a │2 │W │user ID for file sharing checks │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBfSharing │+8c │1 │B │non-zero ==> no redirection │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSrvAttrib │+8d │1 │B │see SetAttrib/file.asm │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBJfnFlag │+8e │1 │B │JFN flag bits for current fil handle │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBAllowed │+8f │1 │B │Allowed I 24 answers (see allowed_) │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBOpCookie │+90 │4 │D │server's per file cookie │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBOpFlags │+94 │2 │W │whether server wants oplock, etc. │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBCurBuf │+96 │4 │D │currently assigned buffer │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBThishVPB │+9a │2 │W │handle of current VPB │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBNextAdd │+9c │2 │W │ │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBBytSecPos │+9e │2 │W │position of first byte within sector │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBClusNum │+a0 │2 │W │ │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBLastPos │+a2 │2 │W │ │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBBytCnt1 │+a4 │2 │W │Number of bytes in 1st sector │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBBytCnt2 │+a6 │2 │W │# of bytes in last sector │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSecCnt │+a8 │2 │W │number of whole sectors │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSecClusPos │+aa │1 │B │posit of first sector within cluster │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBBufHE │+ab │1 │B │How to handle a HardError │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBactBufHE │+ac │1 │B │action response from user on HardErr │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBfIOLock │+ad │1 │B │NZ if TCBLockHndl is valid │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBLockHndl │+ae │C │S │Lock handle of user mem │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBThisCDS │+ba │4 │D │Address of current CDS │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBThisFSC │+be │4 │D │address of current FSC │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpTmpCDS │+c2 │4 │D │Address of dummycds │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpOpenBuf │+c6 │2 │W │Address of current OpenBuf │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpSearchBuf │+c8 │2 │W │Address of SearchBuf │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBFailErr │+ca │2 │W │NZ if user did FAIL on I 24 │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_SemInfo │+cc │4 │D │16bit addr of the ramsem blocked upon │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_SemDebugAddr │+d0 │4 │D │debugger display address for ksems │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_NPX_Buffer │+d4 │4 │D │ │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpTCBWaitNext │+d8 │4 │D │Next waiting TCB │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpTCBWaitList │+dc │4 │D │Threads waiting for me to die │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBQState │+e0 │1 │B │Scheduler queue location (actual) │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBState │+e1 │1 │B │Current scheduler state (desired) │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBWakeFlags │+e2 │1 │B │TKSleep/TKWakeup Flags │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBcWindowBoost │+e3 │1 │B │Window Boost count │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBPriClass │+e4 │1 │B │Priority Class (user) │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBPriLevel │+e5 │1 │B │Priority Level (user) │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBPriClassMod │+e6 │1 │B │Priority Class modifier bits │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSchFlags │+e7 │1 │B │Misc. Scheduler flags │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBPriority │+e8 │2 │W │Calculated Priority │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBPriorityMin │+ea │2 │W │Minimum Scheduling priority │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBcBoostLock │+ec │4 │D │Kernel Boost Lock nesting count. │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpTCBPriNextQ │+f0 │4 │D │Next priority queue in chain │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpTCBPriPrevQ │+f4 │4 │D │Previous priority queue in chain │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpTCBPriHigher │+f8 │4 │D │Higher priority thread │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpTCBPriLower │+fc │4 │D │Lower priority thread │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpTCBPriNext │+100 │4 │D │Next same-priority thread │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpTCBPriPrev │+104 │4 │D │Prev same-priority thread │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpTCBWakeup │+108 │4 │D │TKQueryWakeup TCB list │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSleepID │+10c │4 │D │Sleep ID this TCB is sleeping on │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBtoe │+110 │14 │S │Timeout/Starvation Timeout element │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBCheckedSig │+124 │1 │B │Used by the loader │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBfSwapping │+125 │1 │B │status of swapping │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBVolIONest │+126 │1 │B │nesting level of FSH_DoVolIO │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBReqPktFlg │+127 │1 │B │Flag to indicate if request pkt in use │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBReqPkt │+128 │4 │D │I/O request packet for thread │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpMemStatCur │+12c │4 │D │Current structure being filled in │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBMemStat │+130 │3C │S │statistics structure │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSysTime │+16c │4 │D │time spent in system code │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBUserTime │+170 │4 │D │time spent in user code │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_pPVDBThd │+174 │4 │D │Ptr to Perfview Data Block for this │
│ │ │ │ │thread (pvdb_thd_s). │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_flDbg │+178 │4 │D │ │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBCpl2_ESP │+17c │4 │D │Saved TSS CPL2 stack pointer. │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBCpl2_SS │+180 │2 │W │Saved TSS CPL2 stack segment. │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBNewFlags │+182 │1 │W │Value copied from ptda_NewFiles │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBEntryActions │+183 │1 │B │Kernel entry force flags │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSig_pend │+184 │2 │W │bit vector of pending signals │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSig_holding │+186 │2 │W │bit vector of postponed signals │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSig_cur │+188 │2 │W │bit vec of signals being processed │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBXcptRepRec │+18a │4 │D │report record of active exception │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSig_termtid │+18e │2 │W │ │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSecbits │+190 │1 │B │Security bits 54735 │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBspbytes │+191 │1 │B │To keep size 4*N 54735 │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_ulSRIndex │+192 │4 │D │ │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBMiscFlags │+196 │1 │D │Used for hard error processing │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBModeFlags │+197 │2 │D │Mode flags for OPEN - for WhatVolume │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSpareFlags │+199 │1 │B │Spare flags │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBLibiFlags │+19a │1 │B │ │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBFiller │+19b │1 │B │ │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_ProcNameBuf │+19c │4 │D │Pointer to procedure name │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_ObjNameBuf │+1a0 │4 │D │Pointer to object name buffer │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_TmpNameBuf │+1a4 │4 │D │aka TCB_TgtModNameBuf │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_SrcModNameBuf │+1a8 │4 │D │Used by loader │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_FaultBuf │+1ac │4 │D │ │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_ObjNameBufL │+1b0 │2 │W │Length of object name buffer │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_TmpNameBufL │+1b2 │2 │W │ │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_SrcModNameBufL│+1b4 │2 │W │ │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_FaultBufL │+1b6 │2 │W │ │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSecchild │+1b8 │4 │D │Child Security data 54735 │
└──────────────────┴──────┴──────┴────┴────────────────────────────────────────┘
[Back: Thread Control Block for OS/2 V2.11 with Fix-Pack 90 or Later]
[Next: Thread Swappable Data for OS/2 Warp V4.0 and OS/2 Warp V3.0 ALLSTRICT kernel]