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