PspInitializeSiloStructures

UINT8 __fastcall PspInitializeSiloStructures(){
  VOID *PoolWithTag; 
  UINT64 v2; 
  struct _DMA_ADAPTER *v3; 
  __int16 result; 
  char result_2; 
  int v6; 
  int v7; 
  int v8; 
  int v9; 
  int v10; 
  int v11; 
  VOID(__stdcall *v12)(PVOID); 
  PoolWithTag = ExAllocatePoolWithTag(NonPagedPoolNx, 0x270ui64, 0x476C6953ui64);
  qword_140D239A8 = (INT64)PoolWithTag;
  if( !PoolWithTag )
    return 0;
  memset((INT64)PoolWithTag, 0i64);
  if( (int)PspSiloInitializeSharedUserSessionId(qword_140D239A8) < 0
    || (int)PspStorageAllocSlot((UINT64)&PsObjectDirectorySiloContextSlot) < 0 )
  {
    return 0;
  }
  if( (int)PspStorageAllocSlot((UINT64)&PsObjectDirectoryTeardownSlot) < 0 )
  {
    v2 = (unsigned int)PsObjectDirectorySiloContextSlot;
LABEL_13:
    PspStorageFreeSlot(v2);
    return 0;
  }
  if( (int)PspStorageAllocSlot((UINT64)&PsSystemRootSiloContextSlot) < 0 )
  {
    PspStorageFreeSlot((unsigned int)PsObjectDirectorySiloContextSlot);
    v2 = (unsigned int)PsObjectDirectoryTeardownSlot;
    goto LABEL_13;
  }
  PspSiloMonitorLock = 0i64;
  qword_140C1DEB8 = (__int64)&PspSiloMonitorList;
  PspSiloMonitorList = (__int64)&PspSiloMonitorList;
  memset((INT64)&result, 0i64);
  result_2 |= 0x84u;
  result = 120;
  v6 = 0x20000;
  v7 = 0x20000;
  v8 = 0x20000;
  v11 = 1;
  v9 = 983040;
  v10 = 983040;
  v12 = PspDeleteSiloContext;
  if( (int)ObCreateObjectType((const UNICODE_STRING *)L"$&", (__int64)&result, 0i64, (__int64)&PsSiloContextPagedType) >= 0 )
  {
    v11 = 512;
    if( (int)ObCreateObjectType(
                (const UNICODE_STRING *)L"*,",
                (__int64)&result,
                0i64,
                (__int64)&PsSiloContextNonPagedType) < 0 )
    {
      v3 = PsSiloContextPagedType;
    }
    else
    {
      if( (int)PspAllocStorage((CHAR **)&qword_140D23990) >= 0 )
        return 1;
      HalPutDmaAdapter(PsSiloContextPagedType);
      v3 = PsSiloContextNonPagedType;
    }
    HalPutDmaAdapter(v3);
  }
  return 0;
}

Referenced by:

PspInitPhase0