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