[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