ReactOS 0.4.15-dev-7953-g1f49173
context.c File Reference
#include <ntoskrnl.h>
#include <debug.h>
Include dependency graph for context.c:

Go to the source code of this file.

Macros

#define NDEBUG
 

Functions

VOID NTAPI KiSwapProcess (IN PKPROCESS NewProcess, IN PKPROCESS OldProcess)
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 12 of file context.c.

Function Documentation

◆ KiSwapProcess()

VOID NTAPI KiSwapProcess ( IN PKPROCESS  NewProcess,
IN PKPROCESS  OldProcess 
)

Definition at line 21 of file context.c.

23{
24 PKIPCR Pcr = (PKIPCR)KeGetPcr();
25#ifdef CONFIG_SMP
26 LONG SetMember;
27
28 /* Update active processor mask */
29 SetMember = (LONG)Pcr->SetMember;
30 InterlockedXor((PLONG)&NewProcess->ActiveProcessors, SetMember);
31 InterlockedXor((PLONG)&OldProcess->ActiveProcessors, SetMember);
32#endif
33
34 /* Check for new LDT */
35 if (NewProcess->LdtDescriptor.LimitLow != OldProcess->LdtDescriptor.LimitLow)
36 {
37 if (NewProcess->LdtDescriptor.LimitLow)
38 {
40 ((PULONG)&NewProcess->LdtDescriptor)[0],
41 ((PULONG)&NewProcess->LdtDescriptor)[1]);
42 Ke386SetLocalDescriptorTable(KGDT_LDT);
43 }
44 else
45 {
46 Ke386SetLocalDescriptorTable(0);
47 }
48 }
49
50 /* Update CR3 */
51 __writecr3(NewProcess->DirectoryTableBase[0]);
52
53 /* Clear GS */
54 Ke386SetGs(0);
55
56 /* Update IOPM offset */
57 Pcr->TSS->IoMapBase = NewProcess->IopmOffset;
58}
#define InterlockedXor
Definition: interlocked.h:266
__INTRIN_INLINE void __writecr3(unsigned int Data)
Definition: intrin_x86.h:1794
VOID KeSetGdtSelector(ULONG Entry, ULONG Value1, ULONG Value2)
Definition: ldt.c:107
struct _KIPCR * PKIPCR
#define KeGetPcr()
Definition: ketypes.h:81
#define KGDT_LDT
Definition: ketypes.h:131
long LONG
Definition: pedump.c:60
KAFFINITY SetMember
Definition: ketypes.h:817
struct _KTSS * TSS
Definition: ketypes.h:814
uint32_t * PULONG
Definition: typedefs.h:59
int32_t * PLONG
Definition: typedefs.h:58