PspInitializeSiloStructures

UINT8 __stdcall PspInitializeSiloStructures(){
  VOID **PoolWithTag; 
  UINT64 v2; 
  _ADAPTER_OBJECT *v3; 
  _OBJECT_TYPE_INITIALIZER ObjectTypeInitializer; 

  PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x270ui64, 1198287187i64);
  qword_140D239A8 = (INT64)PoolWithTag;
  if( !PoolWithTag )
    return 0;
  memset(PoolWithTag, 0i64, 0x270u);
  if( PspSiloInitializeSharedUserSessionId(qword_140D239A8) < 0
    || PspStorageAllocSlot(&PsObjectDirectorySiloContextSlot) < 0 )
  {
    return 0;
  }
  if( PspStorageAllocSlot(&PsObjectDirectoryTeardownSlot) < 0 )
  {
    v2 = (unsigned int)PsObjectDirectorySiloContextSlot;
LABEL_13:
    PspStorageFreeSlot(v2);
    return 0;
  }
  if( PspStorageAllocSlot(&PsSystemRootSiloContextSlot) < 0 )
  {
    PspStorageFreeSlot((unsigned int)PsObjectDirectorySiloContextSlot);
    v2 = (unsigned int)PsObjectDirectoryTeardownSlot;
    goto LABEL_13;
  }
  PspSiloMonitorLock._bf_0 = 0i64;
  qword_140C1DEB8 = (__int64)&PspSiloMonitorList;
  PspSiloMonitorList = (__int64)&PspSiloMonitorList;
  memset(&ObjectTypeInitializer, 0i64, sizeof(ObjectTypeInitializer));
  ObjectTypeInitializer._bf_0 |= 0x84u;
  ObjectTypeInitializer.Length = 120;
  ObjectTypeInitializer.GenericMapping.GenericRead = 0x20000;
  ObjectTypeInitializer.GenericMapping.GenericWrite = 0x20000;
  ObjectTypeInitializer.GenericMapping.GenericExecute = 0x20000;
  ObjectTypeInitializer.PoolType = PagedPool;
  ObjectTypeInitializer.GenericMapping.GenericAll = 983040;
  ObjectTypeInitializer.ValidAccessMask = 983040;
  ObjectTypeInitializer.DeleteProcedure = (void(__fastcall *)(void *))PspDeleteSiloContext;
  if( ObCreateObjectType(
         (_UNICODE_STRING *)&PspSiloStoragePagedTypeName,
         &ObjectTypeInitializer,
         0i64,
         (_OBJECT_TYPE **)&PsSiloContextPagedType) >= 0 )
  {
    ObjectTypeInitializer.PoolType = NonPagedPoolNx;
    if( ObCreateObjectType(
           (_UNICODE_STRING *)&PspSiloStorageNonPagedTypeName,
           &ObjectTypeInitializer,
           0i64,
           (_OBJECT_TYPE **)&PsSiloContextNonPagedType) < 0 )
    {
      v3 = PsSiloContextPagedType;
    }
    else
    {
      if( PspAllocStorage(&Storage) >= 0 )
        return 1;
      HalPutDmaAdapter(PsSiloContextPagedType);
      v3 = PsSiloContextNonPagedType;
    }
    HalPutDmaAdapter(v3);
  }
  return 0;
}

Referenced by:

PspInitPhase0