KIPCR is the full KPCR including the undocumented fields. CpuNumber, which can be found at position 0x184.is not in the public structure. As I currently don't know the fields in between, there are Unknown fields between the end of the wdk documented structure and the CpuNumber field.
Now can you tell me how those fields are defined or where I can find a documentation?

Timo

Alex Ionescu schrieb:
There is no "KIPCR". It's a ReactOS hack to support the WDK.

On 31-Jul-08, at 12:44 PM, Timo Kreuzer wrote:

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



_______________________________________________
Ros-dev mailing list
Ros-dev@reactos.org
http://www.reactos.org/mailman/listinfo/ros-dev

Best regards,
Alex Ionescu



_______________________________________________ Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev