PopPlInitDevice

NTSTATUS __stdcall PopPlInitDevice(INT64 a1, UINT64 *a2, INT64 a3, UINT64 a4, INT64 *a5){
  INT64 v5; 
  NTSTATUS inited; 
  VOID **PoolWithTag; 
  _QWORD *v12; 
  __int64 v13; 

  v5 = 0i64;
  if( (unsigned __int64)a2 + 44 <= a4 )
  {
    PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x58ui64, 1817210704i64);
    v5 = (INT64)PoolWithTag;
    if( PoolWithTag )
    {
      memset(PoolWithTag, 0i64, 0x58u);
      inited = PopPlInitWString((PUNICODE_STRING)v5);
      if( inited < 0 )
        goto LABEL_9;
      *(_QWORD *)(v5 + 16) = a1;
      v12 = (_QWORD *)(v5 + 36);
      v13 = 4i64;
      do
      {
        *v12 = *(_QWORD *)((char *)v12 + (_QWORD)a2 - v5 - 32);
        ++v12;
        --v13;
      }
      while( v13 );
      inited = PopPlInitComponents(
                 v5,
                 (INT128 *)(a3 + *((unsigned int *)a2 + 10)),
                 *((unsigned int *)a2 + 9),
                 a3,
                 a4,
                 v5 + 72,
                 v5 + 80);
      if( inited < 0 )
      {
LABEL_9:
        ExFreePoolWithTag((PVOID)v5, 0x6C506F50u);
        v5 = 0i64;
      }
    }
    else
    {
      inited = -1073741670;
    }
  }
  else
  {
    inited = -1073741306;
  }
  *a5 = v5;
  return inited;
}

Referenced by:

PopPlInitDevices