IopLiveDumpAllocateIptBuffers

INT64 __fastcall IopLiveDumpAllocateIptBuffers(INT64 a1){
  unsigned int v1; 
  INT64 *v2; 
  unsigned int v4; 
  INT64 IndependentPages; 
  KEVENT *v6; 
  KEVENT *v7; 
  UINT64 v8; 
  INT64 v9; 
  KEVENT *v10; 
  KEVENT *v11; 
  __int128 v13; 
  v1 = 0;
  *(_DWORD *)(a1 + 956) = 0x10000000;
  v2 = (INT64 *)(a1 + 944);
  *(_QWORD *)(a1 + 976) = 0i64;
  v13 = 0i64;
  (*(void(__fastcall **)(__int64, _QWORD, INT64, __int64))(IptInterface + 40))(2i64, 0i64, a1 + 944, 48i64);
  v4 = *(_DWORD *)(a1 + 984);
  if( v4 )
  {
    if( *(_QWORD *)(a1 + 976) )
    {
      IopLiveDumpDiscardVirtualAddressRange();
      v4 = *(_DWORD *)(a1 + 984);
    }
    *(_QWORD *)(a1 + 976) = 0i64;
    *(_DWORD *)(a1 + 984) = 0;
    *(_DWORD *)(a1 + 952) = 0;
    IndependentPages = MmAllocateIndependentPagesEx(v4, 0xFFFFFFFFi64, 0i64, 0i64);
    *v2 = IndependentPages;
    if( IndependentPages )
    {
      v6 = *(KEVENT **)(a1 + 832);
      v7 = *(KEVENT **)(a1 + 824);
      *(_DWORD *)(a1 + 952) = v4;
      if( IopLiveDumpIsUnderMemoryPressure(v7, v6) )
        return(unsigned int)-1073741248;
      IopLiveDumpDiscardVirtualAddressRange();
      memset(*v2, 0i64);
      if( (*(int(__fastcall **)(__int128 *))(IptInterface + 24))(&v13) >= 0 )
      {
        if( (_QWORD)v13 )
        {
          if( *((_QWORD *)&v13 + 1) )
          {
            IopLiveDumpDiscardVirtualAddressRange();
            v8 = *((_QWORD *)&v13 + 1);
            *(_QWORD *)(a1 + 928) = 0i64;
            *(_DWORD *)(a1 + 936) = 0;
            *(_DWORD *)(a1 + 904) = 0;
            v9 = MmAllocateIndependentPagesEx(v8, 0xFFFFFFFFi64, 0i64, 0i64);
            *(_QWORD *)(a1 + 896) = v9;
            if( v9 )
            {
              v10 = *(KEVENT **)(a1 + 832);
              v11 = *(KEVENT **)(a1 + 824);
              *(_DWORD *)(a1 + 904) = DWORD2(v13);
              if( !IopLiveDumpIsUnderMemoryPressure(v11, v10) )
              {
                IopLiveDumpDiscardVirtualAddressRange();
                memset(*(_QWORD *)(a1 + 896), 0i64);
                return v1;
              }
              return(unsigned int)-1073741248;
            }
          }
        }
      }
    }
  }
  return v1;
}

Referenced by:

IopLiveDumpAllocAndInitResources