Kinda curious why you have "unknowns" in a documented structure. On 30-Jul-08, at 7:17 PM, tkreuzer@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 _______________________________________________ Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev