PspInitializeSiloStructures
UINT8 __fastcall PspInitializeSiloStructures(){
VOID *PoolWithTag;
UINT64 v2;
struct _DMA_ADAPTER *v3;
__int16 result;
char result_2;
int v6;
int v7;
int v8;
int v9;
int v10;
int v11;
VOID(__stdcall *v12)(PVOID);
PoolWithTag = ExAllocatePoolWithTag(NonPagedPoolNx, 0x270ui64, 0x476C6953ui64);
qword_140D239A8 = (INT64)PoolWithTag;
if( !PoolWithTag )
return 0;
memset((INT64)PoolWithTag, 0i64);
if( (int)PspSiloInitializeSharedUserSessionId(qword_140D239A8) < 0
|| (int)PspStorageAllocSlot((UINT64)&PsObjectDirectorySiloContextSlot) < 0 )
{
return 0;
}
if( (int)PspStorageAllocSlot((UINT64)&PsObjectDirectoryTeardownSlot) < 0 )
{
v2 = (unsigned int)PsObjectDirectorySiloContextSlot;
LABEL_13:
PspStorageFreeSlot(v2);
return 0;
}
if( (int)PspStorageAllocSlot((UINT64)&PsSystemRootSiloContextSlot) < 0 )
{
PspStorageFreeSlot((unsigned int)PsObjectDirectorySiloContextSlot);
v2 = (unsigned int)PsObjectDirectoryTeardownSlot;
goto LABEL_13;
}
PspSiloMonitorLock = 0i64;
qword_140C1DEB8 = (__int64)&PspSiloMonitorList;
PspSiloMonitorList = (__int64)&PspSiloMonitorList;
memset((INT64)&result, 0i64);
result_2 |= 0x84u;
result = 120;
v6 = 0x20000;
v7 = 0x20000;
v8 = 0x20000;
v11 = 1;
v9 = 983040;
v10 = 983040;
v12 = PspDeleteSiloContext;
if( (int)ObCreateObjectType((const UNICODE_STRING *)L"$&", (__int64)&result, 0i64, (__int64)&PsSiloContextPagedType) >= 0 )
{
v11 = 512;
if( (int)ObCreateObjectType(
(const UNICODE_STRING *)L"*,",
(__int64)&result,
0i64,
(__int64)&PsSiloContextNonPagedType) < 0 )
{
v3 = PsSiloContextPagedType;
}
else
{
if( (int)PspAllocStorage((CHAR **)&qword_140D23990) >= 0 )
return 1;
HalPutDmaAdapter(PsSiloContextPagedType);
v3 = PsSiloContextNonPagedType;
}
HalPutDmaAdapter(v3);
}
return 0;
}Referenced by:
PspInitPhase0