ObInitServerSilo

NTSTATUS __stdcall ObInitServerSilo(_EJOB *Silo){
  _EJOB *v2; 
  _ESERVERSILO_GLOBALS *ServerSiloGlobals; 
  _OBJECT_NAMESPACE_LOOKUPTABLE *p_PrivateNamespaceLookupTable; 
  __int64 v5; 
  NTSTATUS result; 
  int v7; 
  _ADAPTER_OBJECT *v8; 
  _OBJECT_TYPE *ObjectType; 
  _KPROCESSOR_MODE AccessMode; 
  _OBJECT_ATTRIBUTES ObjectAttributes; 
  UINT64 Handle; 
  PVOID ReturnedSiloContext; 
  PADAPTER_OBJECT a7; 

  a7 = 0i64;
  *(&ObjectAttributes.Length + 1) = 0;
  *(&ObjectAttributes.Attributes + 1) = 0;
  Handle = 0i64;
  ReturnedSiloContext = 0i64;
  ServerSiloGlobals = PsGetServerSiloGlobals(Silo);
  ServerSiloGlobals->ObSiloState.DeviceMapLock._bf_0 = 0i64;
  p_PrivateNamespaceLookupTable = &ServerSiloGlobals->ObSiloState.PrivateNamespaceLookupTable;
  ServerSiloGlobals->ObSiloState.PrivateNamespaceLookupTable.Lock._bf_0 = 0i64;
  v5 = 37i64;
  do
  {
    p_PrivateNamespaceLookupTable->HashBuckets[0].Blink = (_LIST_ENTRY *)p_PrivateNamespaceLookupTable;
    p_PrivateNamespaceLookupTable->HashBuckets[0].Flink = (_LIST_ENTRY *)p_PrivateNamespaceLookupTable;
    p_PrivateNamespaceLookupTable = (_OBJECT_NAMESPACE_LOOKUPTABLE *)((char *)p_PrivateNamespaceLookupTable + 16);
    --v5;
  }
  while( v5 );
  if( PsIsHostSilo(v2) )
    return 0;
  result = PsGetPermanentSiloContext(Silo, (unsigned int)PsObjectDirectorySiloContextSlot, &ReturnedSiloContext);
  if( result >= 0 )
  {
    LOBYTE(AccessMode) = 0;
    result = ObOpenObjectByPointer(ReturnedSiloContext, 0x240ui64, 0i64, 2, DmaAdapter, AccessMode, (VOID **)&Handle);
    if( result >= 0 )
    {
      ObjectAttributes.RootDirectory = (void *)Handle;
      ObjectAttributes.Length = 48;
      ObjectAttributes.ObjectName = (_UNICODE_STRING *)&ObpGlobalDirectoryName;
      ObjectAttributes.Attributes = 576;
      LOBYTE(ObjectType) = 0;
      *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
      v7 = ObReferenceObjectByNameEx(&ObjectAttributes, 0i64, (_OBJECT_TYPE *)2, (CHAR)DmaAdapter, ObjectType, 0i64);
      ZwClose(Handle);
      if( v7 < 0 )
        return v7;
      v8 = a7;
      ServerSiloGlobals->ObSiloState.SystemDeviceMap = (_DEVICE_MAP *)a7->MapRegisterMdlLock;
      HalPutDmaAdapter(v8);
      return 0;
    }
  }
  return result;
}

Referenced by:

ObInitSystem
PspInitializeServerSiloDeferred