typedef struct _KPCR                                                            // 36 / 29 elements; 0x4A20 / 0x6BC0 Bytes
{
    union                                                                       // 2 / 2 elements; 0x001C / 0x0038 Bytes
    {
        NT_TIB                  NtTib;                                          // 0x0000 / 0x0000; 0x001C / 0x0038 Bytes
        struct                                                                  // 7 / 7 elements; 0x001C / 0x0038 Bytes
        {
#if defined(_M_X64)
            PKGDTENTRY64        GdtBase;                                        // ------ / 0x0000; ------ / 0x0008 Bytes
            PKTSS64             TssBase;                                        // ------ / 0x0008; ------ / 0x0008 Bytes
            UINT64              UserRsp;                                        // ------ / 0x0010; ------ / 0x0008 Bytes
            PKPCR               Self;                                           // ------ / 0x0018; ------ / 0x0008 Bytes
            PKPRCB              CurrentPrcb;                                    // ------ / 0x0020; ------ / 0x0008 Bytes
            PKSPIN_LOCK_QUEUE   LockArray;                                      // ------ / 0x0028; ------ / 0x0008 Bytes
#else                                                                           // #if defined(_M_X64)
            PEXCEPTION_REGISTRATION_RECORD 
                                Used_ExceptionList;                             // 0x0000 / ------; 0x0004 / ------ Bytes
            PVOID               Used_StackBase;                                 // 0x0004 / ------; 0x0004 / ------ Bytes
            ULONG32             MxCsr;                                          // 0x0008 / ------; 0x0004 / ------ Bytes
            PVOID               TssCopy;                                        // 0x000C / ------; 0x0004 / ------ Bytes
            ULONG32             ContextSwitches;                                // 0x0010 / ------; 0x0004 / ------ Bytes
            ULONG32             SetMemberCopy;                                  // 0x0014 / ------; 0x0004 / ------ Bytes
#endif                                                                          // #if defined(_M_X64)
            PVOID               Used_Self;                                      // 0x0018 / 0x0030; 0x0004 / 0x0008 Bytes
        };
    };
#if defined(_M_X64)
    PKIDTENTRY64                IdtBase;                                        // ------ / 0x0038; ------ / 0x0008 Bytes
    UINT64                      Unused[2];                                      // ------ / 0x0040; ------ / 0x0010 Bytes
#else                                                                           // #if defined(_M_X64)
    PKPCR                       SelfPcr;                                        // 0x001C / ------; 0x0004 / ------ Bytes
    PKPRCB                      Prcb;                                           // 0x0020 / ------; 0x0004 / ------ Bytes
#endif                                                                          // #if defined(_M_X64)
    UINT8                       Irql;                                           // 0x0024 / 0x0050; 0x0001 / 0x0001 Bytes
#if !defined(_M_X64)
    UINT8                       _PADDING0_[3];                                  // 0x0025 / ------; 0x0003 / ------ Bytes
    ULONG32                     IRR;                                            // 0x0028 / ------; 0x0004 / ------ Bytes
    ULONG32                     IrrActive;                                      // 0x002C / ------; 0x0004 / ------ Bytes
    ULONG32                     IDR;                                            // 0x0030 / ------; 0x0004 / ------ Bytes
    PVOID                       KdVersionBlock;                                 // 0x0034 / ------; 0x0004 / ------ Bytes
    PKIDTENTRY                  IDT;                                            // 0x0038 / ------; 0x0004 / ------ Bytes
    PKGDTENTRY                  GDT;                                            // 0x003C / ------; 0x0004 / ------ Bytes
    PKTSS                       TSS;                                            // 0x0040 / ------; 0x0004 / ------ Bytes
    UINT16                      MajorVersion;                                   // 0x0044 / ------; 0x0002 / ------ Bytes
    UINT16                      MinorVersion;                                   // 0x0046 / ------; 0x0002 / ------ Bytes
    ULONG32                     SetMember;                                      // 0x0048 / ------; 0x0004 / ------ Bytes
    ULONG32                     StallScaleFactor;                               // 0x004C / ------; 0x0004 / ------ Bytes
    UINT8                       SpareUnused;                                    // 0x0050 / ------; 0x0001 / ------ Bytes
    UINT8                       Number;                                         // 0x0051 / ------; 0x0001 / ------ Bytes
    UINT8                       Spare0;                                         // 0x0052 / ------; 0x0001 / ------ Bytes
#endif                                                                          // #if !defined(_M_X64)
    UINT8                       SecondLevelCacheAssociativity;                  // 0x0053 / 0x0051; 0x0001 / 0x0001 Bytes
#if defined(_M_X64)
    UINT8                       ObsoleteNumber;                                 // ------ / 0x0052; ------ / 0x0001 Bytes
    UINT8                       Fill0;                                          // ------ / 0x0053; ------ / 0x0001 Bytes
    ULONG32                     Unused0[3];                                     // ------ / 0x0054; ------ / 0x000C Bytes
    UINT16                      MajorVersion;                                   // ------ / 0x0060; ------ / 0x0002 Bytes
    UINT16                      MinorVersion;                                   // ------ / 0x0062; ------ / 0x0002 Bytes
    ULONG32                     StallScaleFactor;                               // ------ / 0x0064; ------ / 0x0004 Bytes
    PVOID                       Unused1[3];                                     // ------ / 0x0068; ------ / 0x0018 Bytes
#else                                                                           // #if defined(_M_X64)
    ULONG32                     VdmAlert;                                       // 0x0054 / ------; 0x0004 / ------ Bytes
#endif                                                                          // #if defined(_M_X64)
#if defined(_M_X64)
    ULONG32                     KernelReserved[15];                             // ------ / 0x0080; ------ / 0x003C Bytes
#else                                                                           // #if defined(_M_X64)
    ULONG32                     KernelReserved[14];                             // 0x0058 / ------; 0x0038 / ------ Bytes
#endif                                                                          // #if defined(_M_X64)
    ULONG32                     SecondLevelCacheSize;                           // 0x0090 / 0x00BC; 0x0004 / 0x0004 Bytes
    ULONG32                     HalReserved[16];                                // 0x0094 / 0x00C0; 0x0040 / 0x0040 Bytes
#if defined(_M_X64)
    ULONG32                     Unused2;                                        // ------ / 0x0100; ------ / 0x0004 Bytes
    UINT8                       _PADDING0_[4];                                  // ------ / 0x0104; ------ / 0x0004 Bytes
    PVOID                       KdVersionBlock;                                 // ------ / 0x0108; ------ / 0x0008 Bytes
    PVOID                       Unused3;                                        // ------ / 0x0110; ------ / 0x0008 Bytes
    ULONG32                     PcrAlign1[24];                                  // ------ / 0x0118; ------ / 0x0060 Bytes
    UINT8                       _PADDING1_[8];                                  // ------ / 0x0178; ------ / 0x0008 Bytes
    KPRCB Prcb;                                                                 // ------ / 0x0180; ------ / 0x6A40 Bytes
#else                                                                           // #if defined(_M_X64)
    ULONG32                     InterruptMode;                                  // 0x00D4 / ------; 0x0004 / ------ Bytes
    UINT8                       Spare1;                                         // 0x00D8 / ------; 0x0001 / ------ Bytes
    UINT8                       _PADDING1_[3];                                  // 0x00D9 / ------; 0x0003 / ------ Bytes
    ULONG32                     KernelReserved2[17];                            // 0x00DC / ------; 0x0044 / ------ Bytes
    KPRCB PrcbData;                                                             // 0x0120 / ------; 0x4900 / ------ Bytes
#endif                                                                          // #if defined(_M_X64)
} KPCR, * PKPCR;

Return to OS-specific structures/unions/enums list.
Return to OS version list.