Thread Control Block for OS/2 Warp V3.0 with Fix-Pack 11 or Later
┌──────────────────┬──────┬──────┬────┬────────────────────────────────────────┐
│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 │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpDHRetAddr │+74 │4 │D │82818 Pointer to DHRouter return address│
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBTLMA │+78 │80 │D │Thread local memory area │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBDMAAdd │+f8 │4 │D │User's I/O transfer address │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSecPos │+fc │4 │D │Position of first sector accessed within│
│ │ │ │ │file │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBThisSFT │+100 │4 │D │pointer to SFT we're working with │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBValSec │+104 │4 │D │Number of valid (previously written) │
│ │ │ │ │sectors │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpRTCB │+108 │4 │D │Redirector TCB (Used by LANMAN) │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBProc_ID │+10c │2 │W │process ID for file sharing checks │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBUser_ID │+10e │2 │W │user ID for file sharing checks │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBfSharing │+110 │1 │B │non-zero ==> no redirection │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSrvAttrib │+111 │1 │B │see SetAttrib/file.asm │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBJfnFlag │+112 │1 │B │JFN flag bits for current fil handle │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBAllowed │+113 │1 │B │Allowed I 24 answers (see allowed_) │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBOpCookie │+114 │4 │D │server's per file cookie │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBOpFlags │+118 │2 │W │whether server wants oplock, etc. │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBCurBuf │+11a │4 │D │currently assigned buffer │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBThishVPB │+11e │2 │W │handle of current VPB │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBNextAdd │+120 │2 │W │ │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBBytSecPos │+122 │2 │W │position of first byte within sector │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBClusNum │+124 │2 │W │ │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBLastPos │+126 │2 │W │ │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBBytCnt1 │+128 │2 │W │Number of bytes in 1st sector │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBBytCnt2 │+12a │2 │W │# of bytes in last sector │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSecCnt │+12c │2 │W │number of whole sectors │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSecClusPos │+12e │1 │B │posit of first sector within cluster │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBBufHE │+12f │1 │B │How to handle a HardError │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBactBufHE │+130 │1 │B │action response from user on HardErr │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBfIOLock │+131 │1 │B │NZ if TCBLockHndl is valid │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBLockHndl │+132 │C │S │Lock handle of user mem │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBThisCDS │+13e │4 │D │Address of current CDS │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBThisFSC │+142 │4 │D │address of current FSC │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpTmpCDS │+146 │4 │D │Address of dummycds │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpOpenBuf │+14a │2 │W │Address of current OpenBuf │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpSearchBuf │+14c │2 │W │Address of SearchBuf │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBFailErr │+14e │2 │W │NZ if user did FAIL on I 24 │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_SemInfo │+150 │4 │D │16bit addr of the ramsem blocked upon │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_SemDebugAddr │+154 │4 │D │debugger display address for ksems │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_NPX_Buffer │+158 │4 │D │ │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpTCBWaitNext │+15c │4 │D │Next waiting TCB │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpTCBWaitList │+160 │4 │D │Threads waiting for me to die │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBQState │+164 │1 │B │Scheduler queue location (actual) │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBState │+165 │1 │B │Current scheduler state (desired) │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBWakeFlags │+166 │1 │B │TKSleep/TKWakeup Flags │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBcWindowBoost │+167 │1 │B │Window Boost count │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBPriClass │+168 │1 │B │Priority Class (user) │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBPriLevel │+169 │1 │B │Priority Level (user) │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBPriClassMod │+16a │1 │B │Priority Class modifier bits │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSchFlags │+16b │1 │B │Misc. Scheduler flags │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBPriority │+16c │2 │W │Calculated Priority │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBPriorityMin │+16e │2 │W │Minimum Scheduling priority │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBcBoostLock │+170 │4 │D │Kernel Boost Lock nesting count. │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpTCBPriNextQ │+174 │4 │D │Next priority queue in chain │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpTCBPriPrevQ │+178 │4 │D │Previous priority queue in chain │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpTCBPriHigher │+17c │4 │D │Higher priority thread │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpTCBPriLower │+180 │4 │D │Lower priority thread │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpTCBPriNext │+184 │4 │D │Next same-priority thread │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpTCBPriPrev │+188 │4 │D │Prev same-priority thread │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBpTCBWakeup │+18c │4 │D │TKQueryWakeup TCB list │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSleepID │+190 │4 │D │Sleep ID this TCB is sleeping on │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBtoe │+194 │14 │S │Timeout/Starvation Timeout element │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBCheckedSig │+1a8 │1 │B │Used by the loader │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBfSwapping │+1a9 │1 │B │status of swapping │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBVolIONest │+1aa │1 │B │nesting level of FSH_DoVolIO │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBReqPktFlg │+1ab │1 │B │Flag to indicate if request pkt in use │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBReqPkt │+1ac │4 │D │I/O request packet for thread │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSysTime │+1b0 │4 │D │time spent in system code │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBUserTime │+1b4 │4 │D │time spent in user code │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_pPVDBThd │+1b8 │4 │D │Ptr to Perfview Data Block for this │
│ │ │ │ │thread (pvdb_thd_s). │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_flDbg │+1bc │4 │D │ │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBCpl2_ESP │+1c0 │4 │D │Saved TSS CPL2 stack pointer. │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBCpl2_SS │+1c4 │2 │W │Saved TSS CPL2 stack segment. │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBNewFlags │+1c6 │1 │B │Value copied from ptda_NewFiles │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBEntryActions │+1c7 │1 │B │Kernel entry force flags │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSig_pend │+1c8 │2 │W │bit vector of pending signals │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSig_holding │+1ca │2 │W │bit vector of postponed signals │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSig_cur │+1cc │2 │W │bit vec of signals being processed │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBXcptRepRec │+1ce │4 │D │report record of active exception │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSig_termtid │+1d2 │2 │W │tid of terminator -75797 │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSecbits │+1d4 │1 │B │Security bits 54735 │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBspbytes │+1d5 │1 │B │To keep size 4*N 54735 │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_ulSRIndex │+1d6 │4 │D │Last semaphore cleared in MUX 72485 │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBMiscFlags │+1da │1 │B │Used for hard error processing │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBModeFlags │+1db │2 │W │Mode flags for OPEN - for WhatVolume │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSpareFlags │+1dd │1 │B │Spare flags │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBLibiFlags │+1de │1 │B │84537 │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBFiller │+1df │1 │B │To keep size 4*N │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_ProcNameBuf │+1e0 │4 │D │Pointer to procedure name │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_ObjNameBuf │+1e4 │4 │D │Pointer to object name buffer │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_TmpNameBuf │+1e8 │4 │D │aka TCB_TgtModNameBuf │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_SrcModNameBuf │+1ec │4 │D │Used by loader │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_FaultBuf │+1f0 │4 │D │ │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_ObjNameBufL │+1f4 │2 │W │Length of object name buffer │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_TmpNameBufL │+1f6 │2 │W │ │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_SrcModNameBufL│+1f8 │2 │W │ │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_FaultBufL │+1fa │2 │W │ │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSecchild │+1fc │4 │D │Child Security data 54735 │
└──────────────────┴──────┴──────┴────┴────────────────────────────────────────┘
[Back: Thread Control Block for OS/2 Warp V3.0 with Fix-Pack]
[Next: Thread Control Block for OS/2 V2.11 with Fix-Pack 90 or Later]