KeSaveStateForHibernate

NTSTATUS __fastcall KeSaveStateForHibernate(INT64 a1, INT64 a2, INT64 a3, INT64 a4){
  NTSTATUS result; 
  void *retaddr; 
  char v7; 

  RtlCaptureContext((PCONTEXT)(a1 + 240));
  *(_WORD *)(a1 + 304) = 43;
  *(_WORD *)(a1 + 302) = 83;
  *(_QWORD *)(a1 + 224) = __readmsr(0xC0000100);
  *(_QWORD *)(a1 + 168) = __readmsr(0xC0000101);
  *(_QWORD *)(a1 + 176) = __readmsr(0xC0000102);
  *(_QWORD *)(a1 + 184) = __readmsr(0xC0000081);
  *(_QWORD *)(a1 + 192) = __readmsr(0xC0000082);
  *(_QWORD *)(a1 + 200) = __readmsr(0xC0000083);
  *(_QWORD *)(a1 + 208) = __readmsr(0xC0000084);
  *(_QWORD *)(a1 + 488) = retaddr;
  *(_QWORD *)(a1 + 392) = &v7;
  KiSaveProcessorControlState((_KPROCESSOR_STATE *)a1);
  *(_QWORD *)(a1 + 16) &= 0xFFFFFFFFFFFFFFFCui64;
  *(_QWORD *)(a1 + 24) &= ~0x800000ui64;
  _fxsave((void *)(a1 + 496));
  return result;
}

Referenced by:

HalpDpOfflineProcessorForReplace
HalpSaveProcessorState
HalpSetupRealModeResume
PopSaveHiberContextWrapper