KeGetCurrentThread(
VOID);
-NTKERNELAPI
-KPROCESSOR_MODE
-NTAPI
-KeGetPreviousMode(
- VOID);
-
NTKERNELAPI
ULONG
NTAPI
//
#define K0IPCR ((ULONG_PTR)(KIP0PCRADDRESS))
#define PCR ((volatile KPCR * const)K0IPCR)
-#ifdef _WE_USE_THE_SAME_PCR_ADDRESS
+#if !defined(CONFIG_SMP) && !defined(NT_BUILD)
#define KeGetPcr() PCR
#else
#define KeGetPcr() ((volatile KPCR * const)__readfsdword(0x1C))
/*
* @implemented
*/
+#undef ExGetPreviousMode
KPROCESSOR_MODE
NTAPI
ExGetPreviousMode (VOID)
{
- return (KPROCESSOR_MODE)PsGetCurrentThread()->Tcb.PreviousMode;
+ return KeGetPreviousMode();
}
/*
#define ExInitializeRundownProtection _ExInitializeRundownProtection
#define ExWaitForRundownProtectionRelease _ExWaitForRundownProtectionRelease
#define ExRundownCompleted _ExRundownCompleted
+#define ExGetPreviousMode KeGetPreviousMode
/* INITIALIZATION FUNCTIONS *************************************************/
return Priority;\r
}\r
\r
+PRKTHREAD\r
+FORCEINLINE\r
+KeGetCurrentThread(VOID)\r
+{\r
+ /* Return the current thread */\r
+ return ((PKIPCR)KeGetPcr())->PrcbData.CurrentThread;\r
+}\r
+\r
+UCHAR\r
+FORCEINLINE\r
+KeGetPreviousMode(VOID)\r
+{\r
+ /* Return the current mode */\r
+ return KeGetCurrentThread()->PreviousMode;\r
+}\r
#ifdef _NTOSKRNL_
+#define KeGetCurrentThread _KeGetCurrentThread
+#define KeGetPreviousMode _KeGetPreviousMode
+
#include "ke.h"
#include "i386/mm.h"
#include "i386/fpu.h"
KeGetCurrentThread(VOID)\r
{\r
/* Return the current thread on this PCR */\r
- return ((PKIPCR)KeGetPcr())->PrcbData.CurrentThread;\r
+ return _KeGetCurrentThread();\r
}\r
\r
/*\r
* @implemented\r
*/\r
-KPROCESSOR_MODE\r
+#undef KeGetPreviousMode\r
+UCHAR\r
NTAPI\r
KeGetPreviousMode(VOID)\r
{\r
/* Return the previous mode of this thread */\r
- return KeGetCurrentThread()->PreviousMode;\r
+ return _KeGetPreviousMode();\r
}\r
\r
/*\r