typedef struct _ETHREAD
{
    KTHREAD Tcb;
    LARGE_INTEGER CreateTime;
    union
    {
        LARGE_INTEGER ExitTime;
        LIST_ENTRY KeyedWaitChain;
    };
    long ExitStatus;
    union
    {
        LIST_ENTRY PostBlockList;
        struct
        {
            void *ForwardLinkShadow;
            void *StartAddress;
        };
    };
    union
    {
        TERMINATION_PORT *TerminationPort;
        ETHREAD *ReaperLink;
        void *KeyedWaitValue;
    };
    unsigned __int64 ActiveTimerListLock;
    LIST_ENTRY ActiveTimerListHead;
    CLIENT_ID Cid;
    union
    {
        KSEMAPHORE KeyedWaitSemaphore;
        KSEMAPHORE AlpcWaitSemaphore;
    };
    PS_CLIENT_SECURITY_CONTEXT ClientSecurity;
    LIST_ENTRY IrpList;
    unsigned __int64 TopLevelIrp;
    DEVICE_OBJECT *DeviceToVerify;
    PSP_CPU_QUOTA_APC *CpuQuotaApc;
    void *Win32StartAddress;
    void *LegacyPowerObject;
    LIST_ENTRY ThreadListEntry;
    EX_RUNDOWN_REF RundownProtect;
    EX_PUSH_LOCK ThreadLock;
    unsigned long ReadClusterSize;
    volatile long MmLockOrdering;
    union
    {
        unsigned long CrossThreadFlags;
        struct
        {
            unsigned long Terminated : 1;
            unsigned long ThreadInserted : 1;
            unsigned long HideFromDebugger : 1;
            unsigned long ActiveImpersonationInfo : 1;
            unsigned long Reserved : 1;
            unsigned long HardErrorsAreDisabled : 1;
            unsigned long BreakOnTermination : 1;
            unsigned long SkipCreationMsg : 1;
            unsigned long SkipTerminationMsg : 1;
            unsigned long CopyTokenOnOpen : 1;
            unsigned long ThreadIoPriority : 3;
            unsigned long ThreadPagePriority : 3;
            unsigned long RundownFail : 1;
            unsigned long NeedsWorkingSetAging : 1;
        };
    };
    union
    {
        unsigned long SameThreadPassiveFlags;
        struct
        {
            unsigned long ActiveExWorker : 1;
            unsigned long ExWorkerCanWaitUser : 1;
            unsigned long MemoryMaker : 1;
            unsigned long ClonedThread : 1;
            unsigned long KeyedEventInUse : 1;
            unsigned long RateApcState : 2;
            unsigned long SelfTerminate : 1;
        };
    };
    union
    {
        unsigned long SameThreadApcFlags;
        struct
        {
            unsigned char Spare : 1;
            volatile unsigned char StartAddressInvalid : 1;
            unsigned char EtwPageFaultCalloutActive : 1;
            unsigned char OwnsProcessWorkingSetExclusive : 1;
            unsigned char OwnsProcessWorkingSetShared : 1;
            unsigned char OwnsSystemCacheWorkingSetExclusive : 1;
            unsigned char OwnsSystemCacheWorkingSetShared : 1;
            unsigned char OwnsSessionWorkingSetExclusive : 1;
            unsigned char OwnsSessionWorkingSetShared : 1;
            unsigned char OwnsProcessAddressSpaceExclusive : 1;
            unsigned char OwnsProcessAddressSpaceShared : 1;
            unsigned char SuppressSymbolLoad : 1;
            unsigned char Prefetching : 1;
            unsigned char OwnsDynamicMemoryShared : 1;
            unsigned char OwnsChangeControlAreaExclusive : 1;
            unsigned char OwnsChangeControlAreaShared : 1;
            unsigned char OwnsPagedPoolWorkingSetExclusive : 1;
            unsigned char OwnsPagedPoolWorkingSetShared : 1;
            unsigned char OwnsSystemPtesWorkingSetExclusive : 1;
            unsigned char OwnsSystemPtesWorkingSetShared : 1;
            unsigned char TrimTrigger : 2;
            unsigned char Spare1 : 2;
            unsigned char PriorityRegionActive;
        };
    };
    unsigned char CacheManagerActive;
    unsigned char DisablePageFaultClustering;
    unsigned char ActiveFaultCount;
    unsigned char LockOrderState;
    unsigned __int64 AlpcMessageId;
    union
    {
        void *AlpcMessage;
        unsigned long AlpcReceiveAttributeSet;
    };
    LIST_ENTRY AlpcWaitListEntry;
    unsigned long CacheManagerCount;
    unsigned long IoBoostCount;
    unsigned __int64 IrpListLock;
    void *ReservedForSynchTracking;
    SINGLE_LIST_ENTRY CmCallbackListHead;
    unsigned long KernelStackReference;
} ETHREAD, *PETHREAD;