MiInsertNewCombineBlocks
_QWORD *__fastcall MiInsertNewCombineBlocks(INT64 a1, INT64 a2){
_QWORD *v2;
int v4;
_QWORD *v5;
_QWORD *i;
_QWORD *v7;
struct _KLOCK_QUEUE_HANDLE LockHandle;
v2 = (_QWORD *)a2;
memset(&LockHandle, 0, sizeof(LockHandle));
if( !(unsigned int)MiLockPagedRange(a2, 0xF78ui64) )
return 0i64;
memset((INT64)v2, 0i64);
v4 = 54;
KeAcquireInStackQueuedSpinLock((UINT64 *)(a1 + 88), &LockHandle);
v5 = (_QWORD *)(a1 + 72);
for( i = *(_QWORD **)(a1 + 72); ; i = v7 )
{
v7 = v2;
if( (_QWORD *)i[1] != v5 )
__fastfail(3u);
*v2 = i;
v2[1] = v5;
i[1] = v2;
*v5 = v2;
v2 += 9;
if( !--v4 )
break;
}
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
return v2;
}Referenced by:
MiAllocateCombineProto