ViFlushZeroMapRegisterBaseWcbs
VOID __stdcall ViFlushZeroMapRegisterBaseWcbs(_ADAPTER_INFORMATION *AdapterInformation){
UINT64 *v1;
unsigned __int64 v3;
_ADAPTER_INFORMATION *v4;
_ADAPTER_INFORMATION *v5;
__int64 v6;
_ADAPTER_INFORMATION **v7;
v1 = (UINT64 *)(AdapterInformation + 36);
v3 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc((UINT64 *)AdapterInformation + 18);
v4 = (_ADAPTER_INFORMATION *)*((_QWORD *)AdapterInformation + 16);
while( v4 != AdapterInformation + 32 )
{
v5 = v4 - 18;
v4 = *(_ADAPTER_INFORMATION **)v4;
if( !*((_QWORD *)v5 + 11) && !*((_QWORD *)v5 + 12) && v5[13] == 3 )
{
v6 = *((_QWORD *)v5 + 9);
v7 = (_ADAPTER_INFORMATION **)*((_QWORD *)v5 + 10);
if( *(_ADAPTER_INFORMATION **)(v6 + 8) != v5 + 18 || *v7 != v5 + 18 )
__fastfail(3u);
*v7 = (_ADAPTER_INFORMATION *)v6;
*(_QWORD *)(v6 + 8) = v7;
SUBTRACT_MAP_REGISTERS(AdapterInformation, (unsigned int)v5[12]);
ExFreeToNPagedLookasideList(&ViHalWaitBlockLookaside, v5);
break;
}
}
KxReleaseSpinLock(v1);
__writecr8(v3);
}Referenced by:
VfPutDmaAdapter