PsCreateSiloContext
NTSTATUS __fastcall PsCreateSiloContext(INT64 a1, UINT64 a2, INT64 a3, INT64 a4, INT64 *ReturnedSiloContext){
INT64 *v5;
int v7;
PADAPTER_OBJECT v9;
int v10;
VOID *v11;
INT64 *v12;
VOID *v14;
UINT64 ObjectBodySize;
UINT64 PagedPoolCharge;
UINT64 NonPagedPoolCharge;
VOID *Object;
_OB_EXTENDED_CREATION_INFO ExtendedInfo;
v5 = 0i64;
Object = 0i64;
v7 = a2;
if( (_DWORD)a3 == 1 )
{
v9 = PsSiloContextPagedType;
}
else
{
if( (_DWORD)a3 != 512 )
return -1073741811;
v9 = PsSiloContextNonPagedType;
}
ExtendedInfo.AllowHandleRevocation = 0;
ExtendedInfo.AllowExtendedUserInfo = 1;
LODWORD(NonPagedPoolCharge) = 0;
LODWORD(PagedPoolCharge) = 0;
LODWORD(ObjectBodySize) = v7;
v10 = ObCreateObjectEx(
0i64,
(_OBJECT_TYPE *)v9,
0i64,
0i64,
v14,
ObjectBodySize,
PagedPoolCharge,
NonPagedPoolCharge,
&Object,
&ExtendedInfo);
if( v10 >= 0 )
{
v11 = Object;
if( (*((char *)Object - 22) & 0x40) != 0 )
v5 = (INT64 *)(*(_QWORD *)((char *)Object
- *((unsigned __int8 *)&dword_140C25D60 + (*((char *)Object - 22) & 0x7F))
- 48)
+ 32i64);
v12 = ReturnedSiloContext;
*v5 = a1;
v5[1] = a4;
*v12 = (INT64)v11;
}
return v10;
}Referenced by:
CmpAllocateSiloContext
ObCreateSiloRootDirectory
PspAssignSiloSystemRootPath