See: Fix pack 09 for details of the change introduced in this fix-pack.
┌──────────────────┬──────┬──────┬────┬────────────────────────────────────────┐ │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 │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 │ └──────────────────────┴────────┴────────────────────────────────────────┘