WbFreeWarbirdProcess
VOID __fastcall WbFreeWarbirdProcess(
_DMA_ADAPTER *DmaAdapter,
UINT64 Length,
_LARGE_INTEGER LogicalAddress,
VOID *VirtualAddress,
UINT8 CacheEnabled){
unsigned int v5;
unsigned int i;
unsigned int j;
_DMA_ADAPTER *v9;
UINT64 *v10;
UINT64 v11;
unsigned int k;
v5 = 0;
if( DmaAdapter )
{
for( i = 0; i < HIDWORD(DmaAdapter[5].DmaOperations); ++i )
sub_14065E6C8(
(INT64)DmaAdapter,
*(_QWORD *)((char *)&DmaAdapter[6].DmaOperations->Size + LODWORD(DmaAdapter[5].DmaOperations) * i));
sub_14064F544((INT64)&DmaAdapter[5].DmaOperations);
for( j = 0; j < HIDWORD(DmaAdapter->DmaOperations); ++j )
sub_14065EF2C(
(__int64)DmaAdapter,
*(_QWORD *)((char *)&DmaAdapter[1].DmaOperations->Size + j * LODWORD(DmaAdapter->DmaOperations)));
sub_14064F544((INT64)&DmaAdapter->DmaOperations);
v9 = DmaAdapter + 4;
while( 1 )
{
v10 = *(UINT64 **)&v9->Version;
if( *(_DMA_ADAPTER **)(*(_QWORD *)&v9->Version + 8i64) != v9 || (v11 = *v10, *(UINT64 **)(*v10 + 8) != v10) )
__fastfail(3u);
*(_QWORD *)&v9->Version = v11;
*(_QWORD *)(v11 + 8) = v9;
if( v10 == (UINT64 *)v9 )
break;
sub_14065EF2C((__int64)DmaAdapter, (__int64)v10);
}
for( k = 0; k < HIDWORD(DmaAdapter[8].DmaOperations); ++k )
WbFreeWarbirdEncryptionSegment(
*(VOID **)((char *)&DmaAdapter[9].DmaOperations->Size + k * LODWORD(DmaAdapter[8].DmaOperations)),
v10);
sub_14064F544((INT64)&DmaAdapter[8].DmaOperations);
if( HIDWORD(DmaAdapter[11].DmaOperations) )
{
do
WbFreeMemoryBlock(*(PVOID **)((char *)&DmaAdapter[12].DmaOperations->Size
+ LODWORD(DmaAdapter[11].DmaOperations) * v5++));
while( v5 < HIDWORD(DmaAdapter[11].DmaOperations) );
}
sub_14064F544((INT64)&DmaAdapter[11].DmaOperations);
ExFreePoolWithTag(DmaAdapter, 0x42524157u);
}
}Referenced by:
sub_14065E8E4