IopLiveDumpCaptureMemoryPages

__int64 __fastcall IopLiveDumpCaptureMemoryPages(__int64 a1){
  INT64 v2; 
  __int64 v3; 
  char v4; 
  bool v5; 
  int v6; 
  NTSTATUS v7; 
  __int64 v8; 
  __int64 v10; 
  __int64 v11; 
  __int64 v12; 
  __int64 v13; 
  __int64 v14; 
  __int64 v15; 
  __int64 v16; 
  __int64 v17[3]; 
  __int128 v18; 
  struct _EVENT_DATA_DESCRIPTOR v19; 
  __int64 *v20; 
  int v21; 
  int v22; 
  __int64 *v23; 
  int v24; 
  int v25; 
  __int64 *v26; 
  int v27; 
  int v28; 
  __int64 *v29; 
  int v30; 
  int v31; 
  __int64 *v32; 
  int v33; 
  int v34; 
  __int64 *v35; 
  int v36; 
  int v37; 
  __int64 *v38; 
  int v39; 
  int v40; 
  v2 = a1 + 304;
  v18 = 0i64;
  v3 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
  v17[0] = (__int64)IopLiveDumpStartMirroringCallback;
  v17[1] = (__int64)IopLiveDumpEndMirroringCallback;
  v17[2] = (__int64)IopLiveDumpMirrorPhysicalMemoryCallback;
  v4 = *(_BYTE *)(a1 + 40) & 4;
  SaveSupervisorState = 1;
  v5 = v4 != 0;
  v6 = *(_DWORD *)(a1 + 80);
  DWORD2(v18) = v5 ? 657 : 593;
  if( (v6 & 0x20) != 0 )
    DWORD2(v18) = (v5 ? 657 : 593) | 0x100;
  v7 = MmDuplicateMemory((__int64)v17);
  if( (*(_DWORD *)(a1 + 80) & 0x80u) != 0 )
    *(_QWORD *)(a1 + 512) = (unsigned __int64)(1000i64 * *(_QWORD *)(a1 + 504)) / PerformanceFrequency.QuadPart;
  if( v7 < 0 || v7 == 258 )
  {
    if( (*(_DWORD *)(v2 + 8) & 1) != 0 )
      IopLiveDumpUncorralProcessors(v2, 1);
    IopLiveDumpTraceMmDuplicateMemoryFailure(a1, (unsigned int)v7);
    if( v7 == 258 )
    {
      *(_DWORD *)(a1 + 80) |= 0x40u;
      v7 = -1073740682;
    }
  }
  else
  {
    if( VslIsSecureKernelRunning() && (*(_QWORD *)(a1 + 696) || *(_QWORD *)(a1 + 704)) )
      VslFinalizeLiveDumpInSk((_QWORD *)(a1 + 192), (_QWORD *)(a1 + 200), a1 + 144);
    *(_QWORD *)(a1 + 480) = (*(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - v3) / 0x2710ui64;
    IopLiveDumpTraceCaptureMemoryPages();
  }
  SaveSupervisorState = 0;
  if( (unsigned int)dword_140C04498 > 5 && tlgKeywordOn((__int64)&dword_140C04498, 0x200000000000i64) )
  {
    v8 = *(_QWORD *)(a1 + 480);
    v22 = 0;
    v25 = 0;
    v28 = 0;
    v31 = 0;
    v34 = 0;
    v37 = 0;
    v40 = 0;
    v10 = v8;
    v20 = &v10;
    v11 = *(_QWORD *)(a1 + 488);
    v23 = &v11;
    v12 = *(_QWORD *)(a1 + 496);
    v26 = &v12;
    v13 = *(_QWORD *)(a1 + 512);
    v29 = &v13;
    v14 = *(_QWORD *)(a1 + 520);
    v32 = &v14;
    v15 = *(_QWORD *)(a1 + 528);
    v35 = &v15;
    v16 = *(_QWORD *)(a1 + 536);
    v38 = &v16;
    v21 = 8;
    v24 = 8;
    v27 = 8;
    v30 = 8;
    v33 = 8;
    v36 = 8;
    v39 = 8;
    tlgWriteTransfer_EtwWriteTransfer(
      (__int64)&dword_140C04498,
      (unsigned __int8 *)&byte_140023C7F,
      (const GUID *)(a1 + 864),
      (const GUID *)(a1 + 848),
      9u,
      &v19);
  }
  return(unsigned int)v7;
}

Referenced by:

IoCaptureLiveDump