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

Alex Ionescu ionucu at videotron.ca
Fri Aug 1 06:49:29 CEST 2008


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 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
>>
>> _______________________________________________
>> Ros-dev mailing list
>> Ros-dev at reactos.org
>> http://www.reactos.org/mailman/listinfo/ros-dev
>>
>>
>
> _______________________________________________
> Ros-dev mailing list
> Ros-dev at reactos.org
> http://www.reactos.org/mailman/listinfo/ros-dev

Best regards,
Alex Ionescu

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.reactos.org/pipermail/ros-dev/attachments/20080731/6f304e35/attachment-0001.html 


More information about the Ros-dev mailing list