HalpDpOfflineProcessorForReplace

NTSTATUS __stdcall HalpDpOfflineProcessorForReplace(INT64 a1){
  INT64 v1; 
  INT64 v2; 
  __int16 v3; 
  int v5; 
  unsigned __int8 CurrentIrql; 
  _BYTE *v7; 
  INT64 v8; 
  NTSTATUS result; 
  __int16 v10; 
  UINT64 v11; 

  v3 = v10;
  _disable();
  v5 = v3 & 0x200;
  CurrentIrql = KeGetCurrentIrql();
  LODWORD(v1) = KeGetPcr()->Prcb.Number;
  v11 = __rdtsc();
  KeSaveStateForHibernate((INT64)Memory + 1472 * (unsigned int)v1, (unsigned __int64)HIDWORD(v11) << 32, v1, v2);
  if( *(_DWORD *)(a1 + 56) < *(_DWORD *)a1 )
  {
    KeSweepLocalCaches(v8, v7);
    HalpInterruptOfflineProcessor((INT32 *)(a1 + 56));
  }
  HalpDpPostReplaceInitialization((INT64 *)a1, &v11);
  result = CurrentIrql;
  __writecr8(CurrentIrql);
  if( v5 )
    _enable();
  return result;
}

Referenced by:

HalpDpReplaceTarget