diff --git a/xtoskrnl/includes/amd64/kei.h b/xtoskrnl/includes/amd64/kei.h index 976eace..de0da65 100644 --- a/xtoskrnl/includes/amd64/kei.h +++ b/xtoskrnl/includes/amd64/kei.h @@ -21,6 +21,10 @@ XTAPI PKPROCESSOR_CONTROL_BLOCK KeGetCurrentProcessorControlBlock(VOID); +XTAPI +ULONG +KeGetCurrentProcessorNumber(VOID); + XTAPI PKTHREAD KeGetCurrentThread(VOID); diff --git a/xtoskrnl/includes/i686/kei.h b/xtoskrnl/includes/i686/kei.h index 379735a..5d37e6f 100644 --- a/xtoskrnl/includes/i686/kei.h +++ b/xtoskrnl/includes/i686/kei.h @@ -21,6 +21,10 @@ XTAPI PKPROCESSOR_CONTROL_BLOCK KeGetCurrentProcessorControlBlock(VOID); +XTAPI +ULONG +KeGetCurrentProcessorNumber(VOID); + XTAPI PKTHREAD KeGetCurrentThread(VOID); diff --git a/xtoskrnl/ke/amd64/proc.c b/xtoskrnl/ke/amd64/proc.c index 0f275ce..04b7ca6 100644 --- a/xtoskrnl/ke/amd64/proc.c +++ b/xtoskrnl/ke/amd64/proc.c @@ -38,6 +38,20 @@ KeGetCurrentProcessorControlBlock(VOID) return (PKPROCESSOR_CONTROL_BLOCK)ArReadGSQuadWord(FIELD_OFFSET(KPROCESSOR_BLOCK, CurrentPrcb)); } +/** + * Gets the number of the currently executing processor. + * + * @return This routine returns the zero-indexed processor number. + * + * @since XT 1.0 + */ +XTAPI +ULONG +KeGetCurrentProcessorNumber(VOID) +{ + return (ULONG)ArReadGSQuadWord(FIELD_OFFSET(KPROCESSOR_BLOCK, CpuNumber)); +} + /** * Gets the current thread running on the currently executing processor. * diff --git a/xtoskrnl/ke/i686/proc.c b/xtoskrnl/ke/i686/proc.c index f08f097..e7bcf21 100644 --- a/xtoskrnl/ke/i686/proc.c +++ b/xtoskrnl/ke/i686/proc.c @@ -38,6 +38,20 @@ KeGetCurrentProcessorControlBlock(VOID) return (PKPROCESSOR_CONTROL_BLOCK)ArReadFSDualWord(FIELD_OFFSET(KPROCESSOR_BLOCK, CurrentPrcb)); } +/** + * Gets the number of the currently executing processor. + * + * @return This routine returns the zero-indexed processor number. + * + * @since XT 1.0 + */ +XTAPI +ULONG +KeGetCurrentProcessorNumber(VOID) +{ + return (ULONG)ArReadFSDualWord(FIELD_OFFSET(KPROCESSOR_BLOCK, CpuNumber)); +} + /** * Gets the current thread running on the currently executing processor. *