MiInitializeDpcGang

NTSTATUS __stdcall MiInitializeDpcGang(INT64 a1, UINT64 a2, CHAR a3){
  unsigned int v4; 
  VOID *Pool; 
  unsigned int v7; 

  v4 = a2;
  LODWORD(Pool) = (unsigned int)memset((VOID *)a1, 0i64, 0x180u);
  if( (a3 & 2) != 0 )
  {
    v7 = 1;
  }
  else
  {
    LODWORD(Pool) = MiComputeIdealDpcGang(a1, v4);
    v7 = (unsigned int)Pool;
  }
  if( (a3 & 1) != 0 )
  {
    *(_DWORD *)(a1 + 184) |= 1u;
    if( v7 > 8 )
    {
      Pool = MiAllocatePool(64i64, 16i64 * v7, 0x6544694Dui64);
      *(_QWORD *)(a1 + 16) = Pool;
    }
    if( !*(_QWORD *)(a1 + 16) )
    {
      LODWORD(Pool) = a1 + 24;
      *(_QWORD *)(a1 + 16) = a1 + 24;
      goto LABEL_13;
    }
  }
  else
  {
    if( v7 > 8 )
    {
      Pool = MiAllocatePool(64i64, 8i64 * v7, 0x6544694Dui64);
      *(_QWORD *)(a1 + 8) = Pool;
    }
    if( !*(_QWORD *)(a1 + 8) )
    {
      LODWORD(Pool) = a1 + 16;
      *(_QWORD *)(a1 + 8) = a1 + 16;
LABEL_13:
      if( v7 > 8 )
        v7 = 8;
    }
  }
  *(_DWORD *)(a1 + 188) = v7;
  return(int)Pool;
}

Referenced by:

MiAllocateFastLargePagesForMdl
MiHugePageOperation
MiInitializeDynamicPfns