208{
211 ULONG64 CurrentCycleTime, ElapsedCycles;
212
213
216
217
218 if (OldThread->NpxState != 0)
219 {
220 KiSaveXState(OldThread->StateSaveArea, OldThread->NpxState);
221 }
222
223
224 if (NewThread->NpxState != 0)
225 {
227 }
228
229
230 OldProcess = OldThread->ApcState.Process;
231 NewProcess = NewThread->ApcState.Process;
232 if (OldProcess != NewProcess)
233 {
234
236
237
238
239 }
240
241
244 ((
PETHREAD)OldThread)->CycleTime += ElapsedCycles;
247
248
251 {
252
254
255#if defined(_WIN64) && defined(BUILD_WOW64_ENABLED)
257
258 if (ENewProcess->Wow64Process !=
NULL)
259 {
261
264 CmTebEntry->
Bits.LimitHigh = 0xFFFF;
265
267 CmTebEntry->
Bits.BaseMiddle = (
Base & 0xFF0000) >> 16;
268 CmTebEntry->
Bits.BaseHigh = (
Base & 0xFF000000) >> 24;
269
270 KiReloadWow64Fs();
271 }
272#endif
273 }
274
275
277 NewThread->ContextSwitches++;
278
279
281 {
282
287 0);
288 }
289
290
291 OldThread->SwapBusy =
FALSE;
292
293
294 if (NewThread->ApcState.KernelApcPending)
295 {
296
297 if ((NewThread->SpecialApcDisable == 0) &&
298 (ApcBypass == 0))
299 {
300
302 }
303
304
306 }
307
308
310}
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)
PPC_QUAL unsigned long long __rdtsc(void)
__INTRIN_INLINE void __writecr3(unsigned int Data)
struct _EPROCESS * PEPROCESS
struct _ETHREAD * PETHREAD
union _KGDTENTRY64 * GdtBase
ULONG_PTR DirectoryTableBase
struct _KGDTENTRY64::@2539::@2541::@2544 Bits