PopEndMirroring

NTSTATUS __stdcall PopEndMirroring(UINT64 PassNumber){
  unsigned __int64 v1; 
  NTSTATUS v2; 
  int v3; 
  int v4; 
  NTSTATUS v5; 
  bool v6; 
  NTSTATUS v7; 
  VOID *v9; 
  VOID *v10; 
  _GROUP_AFFINITY Affinity; 
  _KAFFINITY_ENUMERATION_CONTEXT Context; 
  _KDPC Dpc; 
  UINT64 ProcIndex; 

  v1 = (unsigned int)PassNumber;
  *(_DWORD *)(&Context.CurrentIndex + 1) = 0;
  *(&Context.CurrentIndex + 3) = 0;
  Affinity = 0i64;
  memset(&Dpc, 0i64, sizeof(Dpc));
  LODWORD(ProcIndex) = 0;
  if( !(_DWORD)v1 )
  {
    if( (BYTE4(xmmword_140CFB490) & 1) != 0 )
      EtwKernelMemoryRundown();
    KeSetEvent(qword_140C50438, 0, 1u);
    KeWaitForSingleObject((UINT64)qword_140C50438 + 24, 0, 0, 0, 0i64);
    v2 = PopBuildMemoryImageHeader(HiberContext, 0i64);
    if( v2 >= 0 )
    {
      Affinity.Reserved[1] = 0;
      *(_DWORD *)&Affinity.Group = (unsigned __int16)((unsigned int)KiProcessorIndexToNumberMappingTable[0] >> 6);
      Affinity.Mask = 1i64 << (KiProcessorIndexToNumberMappingTable[0] & 0x3F);
      Affinity.Reserved[2] = 0;
      KeSetSystemGroupAffinityThread(&Affinity, 0i64);
      KeGetCurrentIrql();
      __writecr8(2ui64);
      memset(&qword_140C503A0, 0i64, 0x50u);
      dword_140C503D0 = KeNumberProcessors_0;
      HIDWORD(qword_140C503D8) = KeNumberProcessors_0;
      LODWORD(qword_140C503D8) = 1;
      if( ((unsigned __int8)&stru_140C503E0 & 0xF) != 0 )
        RtlRaiseStatus(-2147483646);
      stru_140C503E0 = 0i64;
      KeInitializeDpc(&Dpc, PopInvokeStateHandlerTargetProcessor, &qword_140C503A0);
      Context.CurrentMask = KeActiveProcessors.Bitmap[0];
      Context.Affinity = &KeActiveProcessors;
      Dpc.Importance = 2;
      Context.CurrentIndex = 0;
      while( 1 )
      {
        KeEnumerateNextProcessor(&ProcIndex, &Context);
        if( v3 )
          break;
        if( (_DWORD)ProcIndex )
        {
          v4 = dword_140C503D4;
          if( !Dpc.DpcData )
            Dpc.Number = ProcIndex + 1280;
          KeInsertQueueDpc((UINT64)&Dpc, 0i64, 0i64);
          while( v4 == dword_140C503D4 )
            ;
        }
      }
      goto LABEL_19;
    }
    goto LABEL_23;
  }
  if( (_DWORD)v1 != 1 )
  {
    v2 = -1073741823;
    goto LABEL_23;
  }
  v2 = *((_DWORD *)HiberContext + 47);
  if( v2 < 0
    || (v2 = PopInvokeSystemStateHandler(PopHibernatePowerStateHandlerType, (POP_HIBER_CONTEXT *)HiberContext), v2 < 0) )
  {
LABEL_23:
    IoAddTriageDumpDataBlock(&PopAction, (_BYTE *)0x1C8);
    if( qword_140C23298 )
      IoAddTriageDumpDataBlock(qword_140C23298, (_BYTE *)0x1D8);
    if( HiberContext )
    {
      IoAddTriageDumpDataBlock(HiberContext, (_BYTE *)0x1C8);
      v9 = (VOID *)*((_QWORD *)HiberContext + 21);
      if( v9 )
        IoAddTriageDumpDataBlock(v9, (_BYTE *)0x178);
      v10 = (VOID *)*((_QWORD *)HiberContext + 25);
      if( v10 )
        IoAddTriageDumpDataBlock(v10, (_BYTE *)0x3E0);
    }
    KeBugCheckEx(0xA0u, (PVOID)9, (PVOID)v2, (PVOID)v1, 0i64);
  }
  if( PoResumeFromHibernate )
    v2 = 1073742484;
LABEL_19:
  v5 = v2;
  v6 = v2 == 1073742484;
  v7 = 0;
  if( v6 )
    return v5;
  return v7;
}

Referenced by:

No references.