[ros-dev] [ros-diffs] [tkreuzer] 34970: - update KPCR and KIPCR - add KeGetPcr() and update KeGetCurrentProcessorNumber

Alex Ionescu ionucu at videotron.ca
Thu Jul 31 06:55:15 CEST 2008


Kinda curious why you have "unknowns" in a documented structure.

On 30-Jul-08, at 7:17 PM, tkreuzer at svn.reactos.org wrote:

> Author: tkreuzer
> Date: Wed Jul 30 21:16:59 2008
> New Revision: 34970
>
> URL: http://svn.reactos.org/svn/reactos?rev=34970&view=rev
> Log:
> - update KPCR and KIPCR
> - add KeGetPcr() and update KeGetCurrentProcessorNumber
>
> Modified:
>   branches/ros-amd64-bringup/reactos/include/ddk/winddk.h
>   branches/ros-amd64-bringup/reactos/include/ndk/amd64/ketypes.h
>
> Modified: branches/ros-amd64-bringup/reactos/include/ddk/winddk.h
> URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/include/ddk/winddk.h?rev=34970&r1=34969&r2=34970&view=diff
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- branches/ros-amd64-bringup/reactos/include/ddk/winddk.h  
> [iso-8859-1] (original)
> +++ branches/ros-amd64-bringup/reactos/include/ddk/winddk.h  
> [iso-8859-1] Wed Jul 30 21:16:59 2008
> @@ -5516,23 +5516,38 @@
>
> typedef struct _KPCR
> {
> -    NT_TIB NtTib;
> -    struct _KPRCB *CurrentPrcb;
> -    ULONG64 SavedRcx;
> -    ULONG64 SavedR11;
> +    union
> +    {
> +        NT_TIB NtTib;
> +        struct
> +        {
> +            union _KGDTENTRY64 *GdtBase;
> +            struct _KTSS64 *TssBase;
> +            ULONG64 UserRsp;
> +            struct _KPCR *Self;
> +            struct _KPRCB *CurrentPrcb;
> +            PKSPIN_LOCK_QUEUE LockArray;
> +            PVOID Used_Self;
> +        };
> +    };
> +    union _KIDTENTRY64 *IdtBase;
> +    ULONG64 Unused[2];
>    KIRQL Irql;
>    UCHAR SecondLevelCacheAssociativity;
> -    UCHAR Number;
> +    UCHAR ObsoleteNumber;
>    UCHAR Fill0;
> -    ULONG Irr;
> -    ULONG IrrActive;
> -    ULONG Idr;
> +    ULONG Unused0[3];
>    USHORT MajorVersion;
>    USHORT MinorVersion;
>    ULONG StallScaleFactor;
> -    union _KIDTENTRY64 *IdtBase;
> -    union _KGDTENTRY64 *GdtBase;
> -    struct _KTSS64 *TssBase;
> +    PVOID Unused1[3];
> +    ULONG KernelReserved[15];
> +    ULONG SecondLevelCacheSize;
> +    ULONG HalReserved[16];
> +    ULONG Unused2;
> +    PVOID KdVersionBlock;
> +    PVOID Unused3;
> +    ULONG PcrAlign1[24];
> } KPCR, *PKPCR;
>
> typedef struct _KFLOATING_SAVE {
> @@ -5552,10 +5567,17 @@
>    VOID);
>
> FORCEINLINE
> +PKPCR
> +KeGetPcr(VOID)
> +{
> +    return (PKPCR)__readgsqword(FIELD_OFFSET(KPCR, Self));
> +}
> +
> +FORCEINLINE
> ULONG
> KeGetCurrentProcessorNumber(VOID)
> {
> -    return (ULONG)__readgsbyte(FIELD_OFFSET(KPCR, Number));
> +    return (ULONG)__readgsword(0x184);
> }
>
> #elif defined(__PowerPC__)
>
> Modified: branches/ros-amd64-bringup/reactos/include/ndk/amd64/ 
> ketypes.h
> URL: http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/include/ndk/amd64/ketypes.h?rev=34970&r1=34969&r2=34970&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- branches/ros-amd64-bringup/reactos/include/ndk/amd64/ketypes.h  
> [iso-8859-1] (original)
> +++ branches/ros-amd64-bringup/reactos/include/ndk/amd64/ketypes.h  
> [iso-8859-1] Wed Jul 30 21:16:59 2008
> @@ -635,41 +635,42 @@
>        NT_TIB NtTib;
>        struct
>        {
> -            struct _EXCEPTION_REGISTRATION_RECORD  
> *Used_ExceptionList;
> -            PVOID Used_StackBase;
> -            PVOID PerfGlobalGroupMask;
> -            PVOID TssCopy;
> -            ULONG ContextSwitches;
> -            KAFFINITY SetMemberCopy;
> +            union _KGDTENTRY64 *GdtBase;
> +            struct _KTSS64 *TssBase;
> +            ULONG64 UserRsp;
> +            struct _KPCR *Self;
> +            struct _KPRCB *CurrentPrcb;
> +            PKSPIN_LOCK_QUEUE LockArray;
>            PVOID Used_Self;
>        };
>    };
> -    struct _KPCR *Self;
> -    struct _KPRCB *Prcb;
> +    union _KIDTENTRY64 *IdtBase;
> +    ULONG64 Unused[2];
>    KIRQL Irql;
> -    ULONG IRR;
> -    ULONG IrrActive;
> -    ULONG IDR;
> -    PVOID KdVersionBlock;
> -    PKIDTENTRY IDT;
> -    PKGDTENTRY GDT;
> -    struct _KTSS *TSS;
> +    UCHAR SecondLevelCacheAssociativity;
> +    UCHAR ObsoleteNumber;
> +    UCHAR Fill0;
> +    ULONG Unused0[3];
>    USHORT MajorVersion;
>    USHORT MinorVersion;
> -    KAFFINITY SetMember;
>    ULONG StallScaleFactor;
> -    UCHAR SparedUnused;
> -    UCHAR Number;
> -    UCHAR Reserved;
> -    UCHAR L2CacheAssociativity;
> -    ULONG VdmAlert;
> -    ULONG KernelReserved[14];
> +    PVOID Unused1[3];
> +    ULONG KernelReserved[15];
>    ULONG SecondLevelCacheSize;
>    ULONG HalReserved[16];
> -    ULONG InterruptMode;
> -    UCHAR Spare1;
> -    ULONG KernelReserved2[17];
> -    KPRCB PrcbData;
> +    ULONG Unused2;
> +    ULONG Fill1;
> +    PVOID KdVersionBlock; // 0x108
> +    PVOID Unused3;
> +    ULONG PcrAlign1[24];
> +
> +    ULONG Unknown1; // 0x178
> +    ULONG Unknown2;
> +    ULONG Unknown3;
> +    USHORT CpuNumber; // 0x184
> +    // hack:
> +    ULONG ContextSwitches;
> +
> } KIPCR, *PKIPCR;
> #pragma pack(pop)
>
>

Best regards,
Alex Ionescu



More information about the Ros-dev mailing list