HalpDmaRemoveAdapterFromMasterQueue
char __fastcall HalpDmaRemoveAdapterFromMasterQueue(__int64 a1){
__int64 v1;
_QWORD **v3;
_QWORD **v4;
char v5;
_QWORD *v6;
__int64 v7;
_QWORD **v8;
_QWORD *v10;
struct _KLOCK_QUEUE_HANDLE LockHandle;
v1 = *(_QWORD *)(a1 + 152);
memset(&LockHandle, 0, sizeof(LockHandle));
KeAcquireInStackQueuedSpinLock((UINT64 *)(v1 + 120), &LockHandle);
v3 = (_QWORD **)(v1 + 152);
v4 = (_QWORD **)(v1 + 168);
if( !*(_BYTE *)(a1 + 434) )
v4 = v3;
v5 = 0;
v6 = *v4;
if( *v4 != v4 )
{
v7 = a1 + 160;
while( 1 )
{
v8 = (_QWORD **)*v6;
if( v6 == (_QWORD *)v7 )
break;
v6 = (_QWORD *)*v6;
if( v8 == v4 )
goto LABEL_7;
}
v10 = (_QWORD *)v6[1];
if( v8[1] != v6 || (_QWORD *)*v10 != v6 )
__fastfail(3u);
*v10 = v8;
v5 = 1;
v8[1] = v10;
}
LABEL_7:
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
return v5;
}Referenced by:
HalCancelAdapterChannel
HalCancelAdapterChannelThin
HalpAllocateDmaResourcesInternal