ObInitServerSilo

INT64 __stdcall ObInitServerSilo(PEJOB Silo){
  _EJOB *v2; 
  __int64 *ServerSiloGlobals; 
  _QWORD *v4; 
  __int64 v5; 
  INT64 result; 
  int v7; 
  struct _DMA_ADAPTER *v8; 
  POBJECT_TYPE ObjectType; 
  int v10[2]; 
  HANDLE v11; 
  __int64 *v12; 
  int v13; 
  int v14; 
  __int128 v15; 
  HANDLE Handle; 
  PVOID Object; 
  PADAPTER_OBJECT DmaAdapter; 
  DmaAdapter = 0i64;
  v10[1] = 0;
  v14 = 0;
  Handle = 0i64;
  Object = 0i64;
  ServerSiloGlobals = PsGetServerSiloGlobals((__int64)Silo);
  ServerSiloGlobals[15] = 0i64;
  v4 = ServerSiloGlobals + 16;
  ServerSiloGlobals[90] = 0i64;
  v5 = 37i64;
  do
  {
    v4[1] = v4;
    *v4 = v4;
    v4 += 2;
    --v5;
  }
  while( v5 );
  if( PsIsHostSilo(v2) )
    return 0i64;
  LODWORD(result) = PsGetPermanentSiloContext(Silo, (unsigned int)PsObjectDirectorySiloContextSlot, &Object);
  if( (int)result >= 0 )
  {
    LODWORD(result) = ObOpenObjectByPointer(Object, 0x240u, 0i64, 2u, ObpDirectoryObjectType, 0, &Handle);
    if( (int)result >= 0 )
    {
      v11 = Handle;
      v10[0] = 48;
      v12 = &ObpGlobalDirectoryName;
      v13 = 576;
      LOBYTE(ObjectType) = 0;
      v15 = 0i64;
      v7 = ObReferenceObjectByNameEx(
             (__int64)v10,
             0i64,
             2u,
             (__int64)ObpDirectoryObjectType,
             (INT64)ObjectType,
             0i64,
             &DmaAdapter);
      ZwClose(Handle);
      if( v7 < 0 )
        return(unsigned int)v7;
      v8 = DmaAdapter;
      *ServerSiloGlobals = *(_QWORD *)&DmaAdapter[19].Version;
      HalPutDmaAdapter(v8);
      return 0i64;
    }
  }
  return result;
}

Referenced by:

ObInitSystem
PspInitializeServerSiloDeferred