KiRestoreProcessorControlState

VOID __stdcall KiRestoreProcessorControlState(_KPROCESSOR_STATE *ProcessorState){
  unsigned __int64 KernelDr1; 
  unsigned __int64 KernelDr3; 
  unsigned __int64 KernelDr7; 
  int v5; 
  int v6; 
  unsigned __int64 v7; 

  __writecr0(ProcessorState->SpecialRegisters.Cr0);
  __writecr3(ProcessorState->SpecialRegisters.Cr3);
  __writecr4(ProcessorState->SpecialRegisters.Cr4);
  __writecr8(ProcessorState->SpecialRegisters.Cr8);
  if( !(BYTE5(Mm64BitPhysicalAddress) | (unsigned __int8)VslVsmEnabled) )
  {
    __lgdt(&ProcessorState->SpecialRegisters.Gdtr.Limit);
    __lidt(&ProcessorState->SpecialRegisters.Idtr.Limit);
    _RAX = (char *)ProcessorState->SpecialRegisters.Gdtr.Base + ProcessorState->SpecialRegisters.Tr;
    _RAX[5] &= ~2u;
    __asm { ltr     word ptr [rcx+70h] }
    LOWORD(_RAX) = ProcessorState->SpecialRegisters.Ldtr;
    __asm { lldt    ax }
  }
  _mm_setcsr(ProcessorState->SpecialRegisters._MxCsr);
  __writedr(7u, 0i64);
  KernelDr1 = ProcessorState->SpecialRegisters.KernelDr1;
  __writedr(0, ProcessorState->SpecialRegisters.KernelDr0);
  __writedr(1u, KernelDr1);
  KernelDr3 = ProcessorState->SpecialRegisters.KernelDr3;
  __writedr(2u, ProcessorState->SpecialRegisters.KernelDr2);
  __writedr(3u, KernelDr3);
  KernelDr7 = ProcessorState->SpecialRegisters.KernelDr7;
  v5 = 0;
  __writedr(6u, 0i64);
  __writedr(7u, KernelDr7);
  if( (__readgsbyte(0x8722u) & 2) != 0 && (KernelDr7 & 0x300) != 0 && (KiCpuTracingFlags & 2) == 0 )
  {
    if( (KernelDr7 & 0x200) != 0 )
      v5 = 2;
    if( (KernelDr7 & 0x100) != 0 )
      v5 |= 1u;
    v6 = v5;
    v7 = __readmsr(0x1D9u);
    __writemsr(0x1D9u, __PAIR64__(HIDWORD(v7), v6 | (unsigned int)v7 & 0xFFFFFFFC));
  }
}

Referenced by:

KdpCommandString
KdpReport
KdpSymbol
KiFreezeTargetExecution
KiRestoreProcessorState