ViRemoveChannelWcb
INT64 __fastcall ViRemoveChannelWcb(INT64 a1, INT64 a2, INT64 a3){
char v6;
UINT64 *v8;
unsigned __int8 v9;
unsigned __int64 v10;
INT64 v11;
__int64 i;
INT64 v13;
__int64 v14;
_QWORD *v15;
v6 = 0;
if( a2 && a3 )
return 0i64;
v8 = (UINT64 *)(a1 + 144);
KeAcquireSpinLockRaiseToDpc((UINT64 *)(a1 + 144), a2);
v10 = v9;
v11 = a1 + 128;
for( i = *(_QWORD *)(a1 + 128); ; i = *(_QWORD *)(v13 + 72) )
{
v13 = i - 72;
if( v11 == v13 + 72 )
break;
if( a2 && (*(_QWORD *)(v13 + 96) == a2 || *(_QWORD *)(v13 + 88) == a2)
|| a3 && *(_QWORD *)(v13 + 40) == a3
|| *(_DWORD *)(v13 + 52) <= 1u )
{
v14 = *(_QWORD *)(v13 + 72);
v15 = *(_QWORD **)(v13 + 80);
if( *(_QWORD *)(v14 + 8) != v13 + 72 || *v15 != v13 + 72 )
__fastfail(3u);
*v15 = v14;
v6 = 1;
*(_QWORD *)(v14 + 8) = v15;
break;
}
}
KxReleaseSpinLock(v8);
__writecr8(v10);
if( v6 != 1 )
return 0i64;
return v13;
}Referenced by:
VfCancelAdapterChannel
VfFreeAdapterChannel
VfFreeMapRegisters