VslFinalizeLiveDumpInSk

INT64 __fastcall VslFinalizeLiveDumpInSk(_QWORD *a1, _QWORD *a2, INT64 a3){
  char *v6; 
  unsigned int v7; 
  __int64 v8; 
  PHYSICAL_ADDRESS PhysicalAddress; 
  NTSTATUS v10; 
  INT64 result; 
  unsigned int v13; 
  __int64 v14[2]; 
  int v15; 
  INT64 a4[14]; 
  memset((INT64)&result, 0i64);
  v6 = *(char **)(a3 + 32);
  v7 = *(_DWORD *)(a3 + 8) >> 12;
  v13 = v7;
  if( ((unsigned __int16)v6 & 0xFFF) != 0 || v6 != *(char **)a3 || (*(_DWORD *)(a3 + 40) & 0xFFF) != 0 || v7 > 0xB )
  {
    v10 = -1073741811;
  }
  else
  {
    v8 = 0i64;
    if( v7 )
    {
      do
      {
        PhysicalAddress = MmGetPhysicalAddress(v6);
        v6 += 4096;
        v14[v8] = (unsigned __int64)PhysicalAddress.QuadPart >> 12;
        v8 = (unsigned int)(v8 + 1);
      }
      while( (unsigned int)v8 < v13 );
    }
    v10 = VslpEnterIumSecureMode(2u, 57, 0i64, (INT64)&result);
    if( v10 < 0 )
      goto LABEL_11;
    *a1 = v14[0];
    *a2 = v14[1];
    *(_DWORD *)(a3 + 40) = v15;
  }
  if( v10 < 0 )
  {
LABEL_11:
    memset((INT64)a4, 0i64);
    VslpEnterIumSecureMode(2u, 58, 0i64, (INT64)a4);
  }
  return(unsigned int)v10;
}

Referenced by:

IopLiveDumpCaptureMemoryPages