HalpAllocateKInterrupt

CHAR *__stdcall HalpAllocateKInterrupt(INT64 a1, INT64 a2){
  CHAR *v2; 
  int v3; 
  VOID **PoolWithTag; 
  unsigned __int64 v6; 

  v2 = (char *)&stru_140CF2E80 + 64;
  v3 = a1;
  PoolWithTag = (VOID **)((char *)&stru_140CF2E80 + 288 * dword_140C5079C + 64);
  while( v2 < (CHAR *)PoolWithTag )
  {
    if( *((_DWORD *)v2 + 24) == (_DWORD)a1 && *((_DWORD *)v2 + 22) == (_DWORD)a2 )
      return v2;
    v2 += 288;
  }
  v6 = qword_140C507A8;
  if( qword_140C507A8 )
  {
    while( v6 < qword_140C507A8 + 288 * (unsigned __int64)dword_140C507A0 )
    {
      if( *(_DWORD *)(v6 + 96) == v3 && *(_DWORD *)(v6 + 88) == (_DWORD)a2 )
        return(CHAR *)v6;
      v6 += 288i64;
    }
  }
  if( dword_140C5079C < 0x10 )
  {
    ++dword_140C5079C;
  }
  else if( dword_140C507A0 >= dword_140C507A4 )
  {
    PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x120ui64, 543973704i64);
  }
  else
  {
    PoolWithTag = (VOID **)(qword_140C507A8 + 288i64 * dword_140C507A0++);
  }
  if( !PoolWithTag )
    *(&CmpDummyThreadEvent + 1789) = 30;
  return(CHAR *)PoolWithTag;
}

Referenced by:

No references.