IopLiveDumpReleaseResources

VOID __stdcall IopLiveDumpReleaseResources(INT64 a1, INT64 a2, UINT64 a3){
  void *v4; 
  void *v5; 
  void *v6; 
  void *v7; 
  VOID *v8; 
  VOID *v9; 
  VOID *v10; 
  __int64 v11; 
  __int64 v12; 
  __int64 v13; 
  _ADAPTER_OBJECT *v14; 
  VOID *v15; 
  void *v16; 
  unsigned int v17; 
  __int64 v18; 
  void *v19; 
  void *v20; 

  if( a1 )
  {
    IopLiveDumpFreeMappingResources((_LIVEDUMP_CONTEXT *)a1);
    v4 = *(void **)(a1 + 560);
    if( v4 )
    {
      ExFreePoolWithTag(v4, 0x706D644Cu);
      *(_QWORD *)(a1 + 560) = 0i64;
    }
    v5 = *(void **)(a1 + 592);
    if( v5 )
    {
      ExFreePoolWithTag(v5, 0x706D644Cu);
      *(_QWORD *)(a1 + 592) = 0i64;
    }
    v6 = *(void **)(a1 + 648);
    if( v6 )
    {
      ExFreePoolWithTag(v6, 0x706D644Cu);
      *(_QWORD *)(a1 + 648) = 0i64;
    }
    v7 = *(void **)(a1 + 672);
    if( v7 )
    {
      ExFreePoolWithTag(v7, 0x706D644Cu);
      *(_QWORD *)(a1 + 672) = 0i64;
    }
    v8 = *(VOID **)(a1 + 144);
    if( v8 )
    {
      MmFreeIndependentPages(v8, *(unsigned int *)(a1 + 152));
      *(_QWORD *)(a1 + 144) = 0i64;
    }
    v9 = *(VOID **)(a1 + 944);
    if( v9 )
    {
      MmFreeIndependentPages(v9, *(unsigned int *)(a1 + 952));
      *(_QWORD *)(a1 + 944) = 0i64;
    }
    v10 = *(VOID **)(a1 + 896);
    if( v10 )
    {
      MmFreeIndependentPages(v10, *(unsigned int *)(a1 + 904));
      *(_QWORD *)(a1 + 896) = 0i64;
    }
    IopLiveDumpFreeDumpBuffers((_LIVEDUMP_BUFFER_DESCRIPTOR *)(a1 + 680));
    v11 = *(_QWORD *)(a1 + 800);
    if( v11 )
    {
      ZwClose(v11);
      *(_QWORD *)(a1 + 800) = 0i64;
    }
    v12 = *(_QWORD *)(a1 + 808);
    if( v12 )
    {
      ZwClose(v12);
      *(_QWORD *)(a1 + 808) = 0i64;
    }
    v13 = *(_QWORD *)(a1 + 816);
    if( v13 )
    {
      ZwClose(v13);
      *(_QWORD *)(a1 + 816) = 0i64;
    }
    v14 = *(_ADAPTER_OBJECT **)(a1 + 1000);
    if( v14 )
    {
      HalPutDmaAdapter(v14);
      *(_QWORD *)(a1 + 1000) = 0i64;
    }
    v15 = *(VOID **)(a1 + 992);
    if( v15 != (VOID *)-1i64 )
    {
      ObCloseHandle(v15, 0);
      *(_QWORD *)(a1 + 992) = 0i64;
    }
    v16 = *(void **)(a1 + 1016);
    if( v16 )
    {
      v17 = 0;
      if( *(_DWORD *)(a1 + 1008) )
      {
        do
        {
          v18 = v17;
          ExFreePoolWithTag(*(PVOID *)(*(_QWORD *)(a1 + 1016) + 8i64 * v17++), 0x706D644Cu);
          *(_QWORD *)(*(_QWORD *)(a1 + 1016) + 8 * v18) = 0i64;
        }
        while( v17 < *(_DWORD *)(a1 + 1008) );
        v16 = *(void **)(a1 + 1016);
      }
      ExFreePoolWithTag(v16, 0x706D644Cu);
      *(_QWORD *)(a1 + 1016) = 0i64;
      *(_DWORD *)(a1 + 1008) = 0;
    }
    v19 = *(void **)(a1 + 1024);
    if( v19 )
    {
      ExFreePoolWithTag(v19, 0x706D644Cu);
      *(_QWORD *)(a1 + 1024) = 0i64;
    }
    v20 = *(void **)(a1 + 1032);
    if( v20 )
    {
      ExFreePoolWithTag(v20, 0x706D644Cu);
      *(_QWORD *)(a1 + 1032) = 0i64;
    }
  }
}

Referenced by:

DbgkpWerCleanupContext
IoCaptureLiveDump
IoWriteDeferredLiveDumpData
IopLiveDumpAllocAndInitResources