PspSiloInitializeUserSharedData
NTSTATUS __stdcall PspSiloInitializeUserSharedData(_EJOB *Silo){
NTSTATUS result;
_ADAPTER_OBJECT *v3;
int v4;
_ESERVERSILO_GLOBALS *ServerSiloGlobals;
_EJOB *v6;
_EJOB *v7;
__int64 v8;
NTSTATUS NtProductTypeFromRegistry;
__int64 v10;
INT64 v11;
_SILO_USER_SHARED_DATA *UserSharedData;
UINT64 v13;
UINT64 v14;
PVOID SectionObject;
VOID *MappedBase;
_LARGE_INTEGER InputMaximumSize;
MappedBase = 0i64;
SectionObject = 0i64;
LODWORD(v14) = 0x8000000;
LODWORD(v13) = 4;
InputMaximumSize.QuadPart = 624i64;
result = MmCreateSection(&SectionObject, 0xF001Fui64, 0i64, &InputMaximumSize, v13, v14, 0i64, 0i64);
if( result >= 0 )
{
v3 = (_ADAPTER_OBJECT *)SectionObject;
InputMaximumSize.QuadPart = 0i64;
v4 = MmMapViewInSystemSpace(SectionObject, &MappedBase, (UINT64 *)&InputMaximumSize.QuadPart);
if( v4 >= 0 )
{
ServerSiloGlobals = PsGetServerSiloGlobals(Silo);
ServerSiloGlobals->UserSharedData = (_SILO_USER_SHARED_DATA *)MappedBase;
ServerSiloGlobals->UserSharedSection = v3;
LODWORD(v6) = PsAttachSiloToCurrentThread((INT64)Silo);
v7 = v6;
ServerSiloGlobals->UserSharedData->ServiceSessionId = -1;
NtProductTypeFromRegistry = PspSiloInitializeSystemRootBuffer((INT64)Silo);
if( NtProductTypeFromRegistry >= 0 )
{
UserSharedData = ServerSiloGlobals->UserSharedData;
LODWORD(SectionObject) = 0;
NtProductTypeFromRegistry = RtlpGetNtProductTypeFromRegistry(&SectionObject, v8, v10, v11);
if( NtProductTypeFromRegistry >= 0 )
UserSharedData->NtProductType = (int)SectionObject;
if( NtProductTypeFromRegistry >= 0 )
{
NtProductTypeFromRegistry = PspSiloInitializeSuiteMask(ServerSiloGlobals->UserSharedData);
if( NtProductTypeFromRegistry >= 0 )
{
ServerSiloGlobals->UserSharedData->SharedUserSessionId = -1;
NtProductTypeFromRegistry = 0;
}
}
}
PsDetachSiloFromCurrentThread(v7);
return NtProductTypeFromRegistry;
}
else
{
HalPutDmaAdapter(v3);
return v4;
}
}
return result;
}Referenced by:
PspInitializeServerSiloDeferred