Thread Control Block for OS/2 Warp V3.0 with Fix-Pack

See: Fix pack 09 for details of the change introduced in this fix-pack.

┌──────────────────┬──────┬──────┬────┬────────────────────────────────────────┐
│Field NameOffsetLengthTypeDescription                             │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│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  │10    │S   │Timeout/Starvation Timeout element      │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBCheckedSig     │+1a4  │1     │B   │Used by the loader                      │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBfSwapping      │+1a5  │1     │B   │status of swapping                      │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBVolIONest      │+1a6  │1     │B   │nesting level of FSH_DoVolIO            │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBReqPktFlg      │+1a7  │1     │B   │Flag to indicate if request pkt in use  │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBReqPkt         │+1a8  │4     │D   │I/O request packet for thread           │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSysTime        │+1ac  │4     │D   │time spent in system code               │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBUserTime       │+1b0  │4     │D   │time spent in user code                 │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_pPVDBThd      │+1b4  │4     │D   │Ptr to Perfview Data Block for this     │
│                  │      │      │    │thread (pvdb_thd_s).                    │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_flDbg         │+1b8  │4     │D   │                                        │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBCpl2_ESP       │+1bc  │4     │D   │Saved TSS CPL2 stack pointer.           │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBCpl2_SS        │+1c0  │2     │W   │Saved TSS CPL2 stack segment.           │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBNewFlags       │+1c2  │1     │B   │Value copied from ptda_NewFiles         │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBEntryActions   │+1c3  │1     │B   │Kernel entry force flags                │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSig_pend       │+1c4  │2     │W   │bit vector of pending signals           │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSig_holding    │+1c6  │2     │W   │bit vector of postponed signals         │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSig_cur        │+1c8  │2     │W   │bit vec of signals being processed      │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBXcptRepRec     │+1ca  │4     │D   │report record of active exception       │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSig_termtid    │+1ce  │2     │W   │tid of terminator -75797                │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSecbits        │+1d0  │1     │B   │Security bits 54735                     │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBspbytes        │+1d1  │1     │B   │To keep size 4*N 54735                  │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_ulSRIndex     │+1d2  │4     │D   │Last semaphore cleared in MUX 72485     │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBMiscFlags      │+1d6  │1     │B   │Used for hard error processing          │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBModeFlags      │+1d7  │2     │W   │Mode flags for OPEN - for WhatVolume    │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSpareFlags     │+1d9  │1     │B   │Spare flags                             │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBLibiFlags      │+1da  │1     │B   │84537                                   │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBFiller         │+1db  │1     │B   │To keep size 4*N                        │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_ProcNameBuf   │+1dc  │4     │D   │Pointer to procedure name               │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_ObjNameBuf    │+1e0  │4     │D   │Pointer to object name buffer           │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_TmpNameBuf    │+1e4  │4     │D   │aka TCB_TgtModNameBuf                   │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_SrcModNameBuf │+1e8  │4     │D   │Used by loader                          │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_FaultBuf      │+1ec  │4     │D   │                                        │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_ObjNameBufL   │+1f0  │2     │W   │Length of object name buffer            │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_TmpNameBufL   │+1f2  │2     │W   │                                        │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_SrcModNameBufL│+1f4  │2     │W   │                                        │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCB_FaultBufL     │+1f6  │2     │W   │                                        │
├──────────────────┼──────┼──────┼────┼────────────────────────────────────────┤
│TCBSecchild       │+1f8  │4     │D   │Child Security data 54735               │
└──────────────────┴──────┴──────┴────┴────────────────────────────────────────┘

TCBLibiFlags flag definitions:

┌──────────────────────┬────────┬────────────────────────────────────────┐
│Name                  │Bit Mask│Description                             │
├──────────────────────┼────────┼────────────────────────────────────────┤
│INIT_ROUTINE_FAILED   │(0x01)  │84537 Set if dll init routine failed    │
└──────────────────────┴────────┴────────────────────────────────────────┘


[Back: Thread Control Block for OS/2 Warp V3.0]
[Next: Thread Control Block for OS/2 Warp V3.0 with Fix-Pack 11 or Later]