208{
211
212
215
216
217 if (OldThread->NpxState != 0)
218 {
219 KiSaveXState(OldThread->StateSaveArea, OldThread->NpxState);
220 }
221
222
223 if (NewThread->NpxState != 0)
224 {
226 }
227
228
229 OldProcess = OldThread->ApcState.Process;
230 NewProcess = NewThread->ApcState.Process;
231 if (OldProcess != NewProcess)
232 {
233
235
236
237
238 }
239
240
243 {
244
246
247#if defined(_WIN64) && defined(BUILD_WOW64_ENABLED)
249
250 if (ENewProcess->Wow64Process !=
NULL)
251 {
253
256 CmTebEntry->
Bits.LimitHigh = 0xFFFF;
257
259 CmTebEntry->
Bits.BaseMiddle = (
Base & 0xFF0000) >> 16;
260 CmTebEntry->
Bits.BaseHigh = (
Base & 0xFF000000) >> 24;
261
262 KiReloadWow64Fs();
263 }
264#endif
265 }
266
267
269 NewThread->ContextSwitches++;
270
271
273 {
274
279 0);
280 }
281
282
283 OldThread->SwapBusy =
FALSE;
284
285
286 if (NewThread->ApcState.KernelApcPending)
287 {
288
289 if ((NewThread->SpecialApcDisable == 0) &&
290 (ApcBypass == 0))
291 {
292
294 }
295
296
298 }
299
300
302}
FORCEINLINE VOID KiRestoreXState(_In_ PVOID Buffer, _In_ ULONG64 ComponentMask)
FORCEINLINE PKGDTENTRY64 KiGetGdtEntry(PVOID pGdt, USHORT Selector)
FORCEINLINE VOID KiSaveXState(_Out_ PVOID Buffer, _In_ ULONG64 ComponentMask)
DECLSPEC_NORETURN VOID NTAPI KeBugCheckEx(IN ULONG BugCheckCode, IN ULONG_PTR BugCheckParameter1, IN ULONG_PTR BugCheckParameter2, IN ULONG_PTR BugCheckParameter3, IN ULONG_PTR BugCheckParameter4)
VOID FASTCALL HalRequestSoftwareInterrupt(IN KIRQL Irql)
PPC_QUAL void __writemsr(const unsigned long Value)
__INTRIN_INLINE void __writecr3(unsigned int Data)
struct _EPROCESS * PEPROCESS
union _KGDTENTRY64 * GdtBase
ULONG_PTR DirectoryTableBase
struct _KGDTENTRY64::@2538::@2540::@2543 Bits