KeAllocateInterrupt
_KINTERRUPT *__stdcall KeAllocateInterrupt(_KPRCB *Prcb){
union _SLIST_HEADER *v1;
unsigned int v3;
_KINTERRUPT *result;
UINT64 v5;
UINT64 v6;
unsigned int v7;
struct _SLIST_ENTRY *v8;
__int64 v9;
v1 = (union _SLIST_HEADER *)((char *)Prcb + 12416);
v3 = *(unsigned __int16 *)(*((_QWORD *)Prcb + 24) + 146i64);
result = (_KINTERRUPT *)RtlpInterlockedPopEntrySList((PSLIST_HEADER)((char *)Prcb + 12416));
if( result )
{
LABEL_2:
*(_QWORD *)&result[1].Type = Prcb;
}
else
{
v7 = v3;
while( 1 )
{
MmAllocateIndependentPages(0x1000ui64, v7, v5, v6);
v8 = (struct _SLIST_ENTRY *)result;
if( !result )
break;
v9 = 12i64;
do
{
RtlpInterlockedPushEntrySList(v1, v8);
v8 += 20;
--v9;
}
while( v9 );
result = (_KINTERRUPT *)RtlpInterlockedPopEntrySList(v1);
if( result )
goto LABEL_2;
}
}
return result;
}Referenced by:
IopConnectInterrupt