diff --git a/xtoskrnl/includes/kepfuncs.h b/xtoskrnl/includes/kepfuncs.h index 99d83ba..d53ee5a 100644 --- a/xtoskrnl/includes/kepfuncs.h +++ b/xtoskrnl/includes/kepfuncs.h @@ -20,6 +20,10 @@ XTAPI PKPROCESSOR_CONTROL_BLOCK KeGetCurrentProcessorControlBlock(VOID); +XTAPI +PKTHREAD +KeGetCurrentThread(VOID); + XTAPI VOID KepArchInitialize(VOID); diff --git a/xtoskrnl/ke/amd64/proc.c b/xtoskrnl/ke/amd64/proc.c index a3684d2..481e5f0 100644 --- a/xtoskrnl/ke/amd64/proc.c +++ b/xtoskrnl/ke/amd64/proc.c @@ -37,3 +37,17 @@ KeGetCurrentProcessorControlBlock(VOID) { return (PKPROCESSOR_CONTROL_BLOCK)ArReadGSQuadWord(FIELD_OFFSET(KPROCESSOR_BLOCK, Prcb)); } + +/** + * Gets address of current kernel's thread object. + * + * @return This routine returns address of current kernel's thread object. + * + * @since XT 1.0 + */ +XTAPI +PKTHREAD +KeGetCurrentThread(VOID) +{ + return (PKTHREAD)ArReadGSQuadWord(FIELD_OFFSET(KPROCESSOR_BLOCK, Prcb.CurrentThread)); +} diff --git a/xtoskrnl/ke/i686/proc.c b/xtoskrnl/ke/i686/proc.c index 840afaf..b7e498b 100644 --- a/xtoskrnl/ke/i686/proc.c +++ b/xtoskrnl/ke/i686/proc.c @@ -37,3 +37,10 @@ KeGetCurrentProcessorControlBlock(VOID) { return (PKPROCESSOR_CONTROL_BLOCK)ArReadFSDualWord(FIELD_OFFSET(KPROCESSOR_BLOCK, Prcb)); } + +XTAPI +PKTHREAD +KeGetCurrentThread(VOID) +{ + return (PKTHREAD)ArReadFSDualWord(FIELD_OFFSET(KPROCESSOR_BLOCK, Prcb.CurrentThread)); +}