ObpInitializeRootNamespace
NTSTATUS __stdcall ObpInitializeRootNamespace(_EJOB *Silo, VOID *RootDirectory, VOID *DosDevicesShadowDirectory){
UINT8 IsHostSilo;
int KernelObjectsSD;
bool v8;
PVOID *Object;
VOID *DirectoryHandle;
VOID *ShadowDirectoryHandle;
_OBJECT_ATTRIBUTES ObjectAttributes;
PVOID v14;
__int128 SecurityDescriptor[2];
__int64 v16;
int SymbolicLinkInformation;
SymbolicLinkInformation = 0;
DirectoryHandle = 0i64;
ShadowDirectoryHandle = 0i64;
memset(&ObjectAttributes, 0, sizeof(ObjectAttributes));
IsHostSilo = PsIsHostSilo(Silo);
v16 = 0i64;
memset(SecurityDescriptor, 0, sizeof(SecurityDescriptor));
KernelObjectsSD = ObCreateKernelObjectsSD(SecurityDescriptor);
if( KernelObjectsSD >= 0 )
{
if( IsHostSilo
|| (ObjectAttributes.RootDirectory = 0i64,
ObjectAttributes.ObjectName = (_UNICODE_STRING *)&ObpKernelObjectsPathString,
ObjectAttributes.Length = 48,
ObjectAttributes.Attributes = 592,
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64,
KernelObjectsSD = ZwOpenDirectoryObject(&ShadowDirectoryHandle, 983055, &ObjectAttributes),
KernelObjectsSD >= 0) )
{
ObjectAttributes.SecurityQualityOfService = 0i64;
LODWORD(Object) = 0;
ObjectAttributes.ObjectName = (_UNICODE_STRING *)&ObpKernelObjectsNameString;
ObjectAttributes.Length = 48;
ObjectAttributes.SecurityDescriptor = SecurityDescriptor;
ObjectAttributes.RootDirectory = RootDirectory;
ObjectAttributes.Attributes = 592;
KernelObjectsSD = ZwCreateDirectoryObjectEx(
&DirectoryHandle,
0xF000Fui64,
&ObjectAttributes,
ShadowDirectoryHandle,
(UINT64)Object);
if( KernelObjectsSD >= 0 )
{
ZwClose((_HANDLE)DirectoryHandle);
DirectoryHandle = 0i64;
ObjectAttributes.ObjectName = (_UNICODE_STRING *)&ObpObjectTypesNameString;
ObjectAttributes.Length = 48;
ObjectAttributes.RootDirectory = RootDirectory;
ObjectAttributes.Attributes = 592;
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
if( IsHostSilo )
{
KernelObjectsSD = ZwCreateDirectoryObject(&DirectoryHandle, 983055, &ObjectAttributes);
if( KernelObjectsSD < 0 )
goto LABEL_9;
v14 = 0i64;
KernelObjectsSD = ObReferenceObjectByHandle(DirectoryHandle, 0i64, DmaAdapter, 0, &v14, 0i64);
Directory = (PADAPTER_OBJECT)v14;
v8 = KernelObjectsSD < 0;
}
else
{
KernelObjectsSD = ZwCreateSymbolicLinkObject(
&DirectoryHandle,
983041,
&ObjectAttributes,
(_UNICODE_STRING *)&ObpObjectTypesPathString);
if( KernelObjectsSD < 0 )
goto LABEL_9;
KernelObjectsSD = ZwSetInformationSymbolicLink(
DirectoryHandle,
SymbolicLinkGlobalInformation,
&SymbolicLinkInformation,
4ui64);
v8 = KernelObjectsSD < 0;
}
if( !v8 )
KernelObjectsSD = ObpCreateDosDevicesDirectory(Silo, RootDirectory, DosDevicesShadowDirectory);
}
}
}
LABEL_9:
if( DirectoryHandle )
ZwClose((_HANDLE)DirectoryHandle);
if( ShadowDirectoryHandle )
ZwClose((_HANDLE)ShadowDirectoryHandle);
ObCleanupSecurityDescriptor(SecurityDescriptor);
return KernelObjectsSD;
}Referenced by:
ObCreateSiloRootDirectory
ObInitSystem