ViRemoveChannelWcb
_VF_WAIT_CONTEXT_BLOCK *__stdcall ViRemoveChannelWcb(
_ADAPTER_INFORMATION *AdapterInformation,
_MAP_REGISTER_FILE *MapRegisterFile,
VOID *DmaTransferContext){
char v6;
UINT64 *v8;
unsigned __int64 v9;
_ADAPTER_INFORMATION *v10;
__int64 i;
__int64 v12;
__int64 v13;
_QWORD *v14;
v6 = 0;
if( MapRegisterFile && DmaTransferContext )
return 0i64;
v8 = (UINT64 *)(AdapterInformation + 36);
v9 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc((UINT64 *)AdapterInformation + 18);
v10 = AdapterInformation + 32;
for( i = *((_QWORD *)AdapterInformation + 16); ; i = *(_QWORD *)(v12 + 72) )
{
v12 = i - 72;
if( v10 == (_ADAPTER_INFORMATION *)(v12 + 72) )
break;
if( MapRegisterFile
&& (*(_MAP_REGISTER_FILE **)(v12 + 96) == MapRegisterFile || *(_MAP_REGISTER_FILE **)(v12 + 88) == MapRegisterFile)
|| DmaTransferContext && *(VOID **)(v12 + 40) == DmaTransferContext
|| *(_DWORD *)(v12 + 52) <= 1u )
{
v13 = *(_QWORD *)(v12 + 72);
v14 = *(_QWORD **)(v12 + 80);
if( *(_QWORD *)(v13 + 8) != v12 + 72 || *v14 != v12 + 72 )
__fastfail(3u);
*v14 = v13;
v6 = 1;
*(_QWORD *)(v13 + 8) = v14;
break;
}
}
KxReleaseSpinLock(v8);
__writecr8(v9);
if( v6 != 1 )
return 0i64;
return(_VF_WAIT_CONTEXT_BLOCK *)v12;
}Referenced by:
VfCancelAdapterChannel
VfFreeAdapterChannel
VfFreeMapRegisters