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