You have probably noticed it's in the KIPCR, not the KPCR. I could not find KIPCR documented anywhere, but maybe you can give me a hint where to find one.

Thanks,
Timo

Alex Ionescu schrieb:
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