ViCheckAdapterBuffers
VOID **__fastcall ViCheckAdapterBuffers(INT64 a1){
VOID **result;
_QWORD *v2;
UINT16 v3;
UINT64 *v4;
unsigned __int8 v5;
_QWORD *v6;
unsigned __int64 v7;
UINT64 v8;
UINT16 v9;
unsigned __int64 v10;
_QWORD *v11;
_QWORD *v12;
void *retaddr;
result = &retaddr;
v2 = (_QWORD *)(a1 + 80);
v3 = 0;
if( (_QWORD *)*v2 != v2 )
{
v4 = (UINT64 *)(a1 + 96);
v5 = KeAcquireSpinLockRaiseToDpc((UINT64 *)(a1 + 96));
v6 = (_QWORD *)*v2;
v7 = v5;
while( 1 )
{
v11 = v6 - 6;
v12 = v11 + 6;
if( v2 == v11 + 6 )
break;
v8 = *((unsigned int *)v11 + 2);
v9 = v3 | 1;
v10 = v11[3] - v11[2];
if( v10 < 8 )
v9 = v3;
v3 = v9 | 2;
if( v8 + v10 + 8 > *((unsigned int *)v11 + 1) )
v3 = v9;
ViCheckTag((VOID *)v11[3], v8, 0i64, v3);
v6 = (_QWORD *)*v12;
}
KxReleaseSpinLock(v4);
result = (VOID **)(unsigned int)KiIrqlFlags;
__writecr8(v7);
}
return result;
}Referenced by:
VfMapTransfer
VfMapTransferEx