typedef struct _TEB
{
    NT_TIB NtTib;
    void *EnvironmentPointer;
    CLIENT_ID ClientId;
    void *ActiveRpcHandle;
    void *ThreadLocalStoragePointer;
    PEB *ProcessEnvironmentBlock;
    unsigned long LastErrorValue;
    unsigned long CountOfOwnedCriticalSections;
    void *CsrClientThread;
    void *Win32ThreadInfo;
    unsigned long User32Reserved[26];
    unsigned long UserReserved[5];
    void *WOW32Reserved;
    unsigned long CurrentLocale;
    unsigned long FpSoftwareStatusRegister;
    void *SystemReserved1[54];
    long ExceptionCode;
    ACTIVATION_CONTEXT_STACK *ActivationContextStackPointer;
    unsigned char SpareBytes[24];
    unsigned long TxFsContext;
    GDI_TEB_BATCH GdiTebBatch;
    CLIENT_ID RealClientId;
    void *GdiCachedProcessHandle;
    unsigned long GdiClientPID;
    unsigned long GdiClientTID;
    void *GdiThreadLocalInfo;
    unsigned __int64 Win32ClientInfo[62];
    void *glDispatchTable[233];
    unsigned __int64 glReserved1[29];
    void *glReserved2;
    void *glSectionInfo;
    void *glSection;
    void *glTable;
    void *glCurrentRC;
    void *glContext;
    unsigned long LastStatusValue;
    UNICODE_STRING StaticUnicodeString;
    wchar_t StaticUnicodeBuffer[261];
    void *DeallocationStack;
    void *TlsSlots[64];
    LIST_ENTRY TlsLinks;
    void *Vdm;
    void *ReservedForNtRpc;
    void *DbgSsReserved[2];
    unsigned long HardErrorMode;
    void *Instrumentation[11];
    GUID ActivityId;
    void *SubProcessTag;
    void *EtwLocalData;
    void *EtwTraceData;
    void *WinSockData;
    unsigned long GdiBatchCount;
    union
    {
        PROCESSOR_NUMBER CurrentIdealProcessor;
        unsigned long IdealProcessorValue;
        struct
        {
            unsigned char ReservedPad0;
            unsigned char ReservedPad1;
            unsigned char ReservedPad2;
            unsigned char IdealProcessor;
        };
    };
    unsigned long GuaranteedStackBytes;
    void *ReservedForPerf;
    void *ReservedForOle;
    unsigned long WaitingOnLoaderLock;
    void *SavedPriorityState;
    unsigned __int64 SoftPatchPtr1;
    void *ThreadPoolData;
    void **TlsExpansionSlots;
    void *DeallocationBStore;
    void *BStoreLimit;
    unsigned long MuiGeneration;
    unsigned long IsImpersonating;
    void *NlsCache;
    void *pShimData;
    unsigned long HeapVirtualAffinity;
    void *CurrentTransactionHandle;
    TEB_ACTIVE_FRAME *ActiveFrame;
    void *FlsData;
    void *PreferredLanguages;
    void *UserPrefLanguages;
    void *MergedPrefLanguages;
    unsigned long MuiImpersonation;
    union
    {
        volatile unsigned short CrossTebFlags;
        unsigned short SpareCrossTebBits : 16;
    };
    union
    {
        unsigned short SameTebFlags;
        struct
        {
            unsigned short SafeThunkCall : 1;
            unsigned short InDebugPrint : 1;
            unsigned short HasFiberData : 1;
            unsigned short SkipThreadAttach : 1;
            unsigned short WerInShipAssertCode : 1;
            unsigned short RanProcessInit : 1;
            unsigned short ClonedThread : 1;
            unsigned short SuppressDebugMsg : 1;
            unsigned short DisableUserStackWalk : 1;
            unsigned short RtlExceptionAttached : 1;
            unsigned short InitialThread : 1;
            unsigned short SpareSameTebBits : 5;
        };
    };
    void *TxnScopeEnterCallback;
    void *TxnScopeExitCallback;
    void *TxnScopeContext;
    unsigned long LockCount;
    unsigned long SpareUlong0;
    void *ResourceRetValue;
} TEB, *PTEB;