PopEndMirroring

NTSTATUS __stdcall PopEndMirroring(UINT64 PassNumber){
  ULONG_PTR v1; 
  int v2; 
  int v3; 
  NTSTATUS v4; 
  bool v5; 
  NTSTATUS v6; 
  void *v8; 
  void *v9; 
  struct _GROUP_AFFINITY Affinity; 
  unsigned __int16 *v11[2]; 
  __int16 v12; 
  int v13; 
  __int16 v14; 
  struct _KDPC Dpc; 
  int v16; 
  v1 = (unsigned int)PassNumber;
  v13 = 0;
  v14 = 0;
  Affinity = 0i64;
  memset((INT64)&Dpc, 0i64);
  v16 = 0;
  if( !(_DWORD)v1 )
  {
    if( (*((_BYTE *)&PerfGlobalGroupMask + 20) & 1) != 0 )
      EtwKernelMemoryRundown();
    KeSetEvent(PopSleeperHandoff, 0);
    KeWaitForSingleObject(&PopSleeperHandoff[1], Executive, 0, 0, 0i64);
    v2 = PopBuildMemoryImageHeader((_POP_HIBER_CONTEXT *)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((INT64)&PopHibernateSystemContext, 0i64);
      dword_140C503D0 = KeNumberProcessors_0;
      HIDWORD(qword_140C503D8) = KeNumberProcessors_0;
      LODWORD(qword_140C503D8) = 1;
      if( ((unsigned __int8)&xmmword_140C503E0 & 0xF) != 0 )
        RtlRaiseStatus(-2147483646);
      xmmword_140C503E0 = 0i64;
      KeInitializeDpc(&Dpc, PopInvokeStateHandlerTargetProcessor, &PopHibernateSystemContext);
      v11[1] = (unsigned __int16 *)KeActiveProcessors.Bitmap[0];
      v11[0] = (unsigned __int16 *)&KeActiveProcessors;
      Dpc.Importance = 2;
      v12 = 0;
      while( !(unsigned int)KeEnumerateNextProcessor(&v16, v11) )
      {
        if( v16 )
        {
          v3 = dword_140C503D4;
          if( !Dpc.DpcData )
            Dpc.Number = v16 + 1280;
          KeInsertQueueDpc(&Dpc, 0i64, 0i64);
          while( v3 == dword_140C503D4 )
            ;
        }
      }
      goto LABEL_19;
    }
    goto LABEL_23;
  }
  if( (_DWORD)v1 != 1 )
  {
    v2 = -1073741823;
    goto LABEL_23;
  }
  v2 = *(_DWORD *)(HiberContext + 188);
  if( v2 < 0 || (v2 = PopInvokeSystemStateHandler(PopHibernatePowerStateHandlerType, HiberContext), v2 < 0) )
  {
LABEL_23:
    IoAddTriageDumpDataBlock(&PopAction, 0x1C8ui64);
    if( qword_140C23298 )
      IoAddTriageDumpDataBlock(qword_140C23298, 0x1D8ui64);
    if( HiberContext )
    {
      IoAddTriageDumpDataBlock((PVOID)HiberContext, 0x1C8ui64);
      v8 = *(void **)(HiberContext + 168);
      if( v8 )
        IoAddTriageDumpDataBlock(v8, 0x178ui64);
      v9 = *(void **)(HiberContext + 200);
      if( v9 )
        IoAddTriageDumpDataBlock(v9, 0x3E0ui64);
    }
    KeBugCheckEx(0xA0u, 9ui64, v2, v1, 0i64);
  }
  if( PoResumeFromHibernate )
    v2 = 1073742484;
LABEL_19:
  v4 = v2;
  v5 = v2 == 1073742484;
  v6 = 0;
  if( v5 )
    return v4;
  return v6;
}

Referenced by:

No references.