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