IopLiveDumpFreeDumpBuffers

void __fastcall IopLiveDumpFreeDumpBuffers(__int64 a1){
  __int64 v2; 
  MDL *v3; 
  __int64 v4; 
  void *v5; 
  void *v6; 
  void *v7; 
  if( a1 )
  {
    if( VslIsSecureKernelRunning() )
      VslAbortLiveDump();
    v2 = 0i64;
    if( *(_QWORD *)(a1 + 64) )
    {
      while( 1 )
      {
        v3 = *(MDL **)(*(_QWORD *)(a1 + 80) + 8 * v2);
        if( v3 )
          break;
        v5 = *(void **)(*(_QWORD *)(a1 + 72) + 8 * v2);
        if( v5 )
        {
          MmFreeIndependentPages(v5, (unsigned int)BufferChunkSizeInBytes);
          v4 = *(_QWORD *)(a1 + 72);
          goto LABEL_9;
        }
LABEL_10:
        if( (unsigned __int64)++v2 >= *(_QWORD *)(a1 + 64) )
          goto LABEL_11;
      }
      MmFreePagesFromMdl(v3);
      ExFreePoolWithTag(*(PVOID *)(*(_QWORD *)(a1 + 80) + 8 * v2), 0);
      v4 = *(_QWORD *)(a1 + 80);
LABEL_9:
      *(_QWORD *)(v4 + 8 * v2) = 0i64;
      goto LABEL_10;
    }
LABEL_11:
    v6 = *(void **)(a1 + 72);
    if( v6 )
    {
      ExFreePoolWithTag(v6, 0x706D644Cu);
      *(_QWORD *)(a1 + 72) = 0i64;
    }
    v7 = *(void **)(a1 + 80);
    if( v7 )
    {
      ExFreePoolWithTag(v7, 0x706D644Cu);
      *(_QWORD *)(a1 + 80) = 0i64;
    }
    *(_QWORD *)(a1 + 64) = 0i64;
    *(_DWORD *)(a1 + 40) = 0;
    *(_QWORD *)a1 = 0i64;
    *(_QWORD *)(a1 + 8) = 0i64;
    *(_QWORD *)(a1 + 16) = 0i64;
    *(_QWORD *)(a1 + 24) = 0i64;
  }
}

Referenced by:

IopLiveDumpAllocateDumpBuffers
IopLiveDumpReleaseResources
IopLiveDumpWriteDumpFile
IopLiveDumpWriteDumpFileWithExtraPages