MiCreatePartitionNamespace

NTSTATUS __stdcall MiCreatePartitionNamespace(){
  __int64 v0; 
  __int64 v1; 
  int KernelObjectsSD; 
  void *v3; 
  UINT64 Flags; 
  UINT64 Flagsa; 
  _UNICODE_STRING DestinationString; 
  __int128 SecurityDescriptor[2]; 
  __int64 v9; 
  _OBJECT_ATTRIBUTES ObjectAttributes; 

  *(&ObjectAttributes.Length + 1) = 0;
  *(&ObjectAttributes.Attributes + 1) = 0;
  v1 = v0;
  DestinationString = 0i64;
  v9 = 0i64;
  memset(SecurityDescriptor, 0, sizeof(SecurityDescriptor));
  RtlInitUnicodeString(&DestinationString, 0i64);
  ObjectAttributes.RootDirectory = 0i64;
  ObjectAttributes.SecurityQualityOfService = 0i64;
  ObjectAttributes.ObjectName = &DestinationString;
  ObjectAttributes.SecurityDescriptor = (void *)SePublicDefaultUnrestrictedSd;
  ObjectAttributes.Length = 48;
  ObjectAttributes.Attributes = 576;
  LODWORD(Flags) = 2;
  KernelObjectsSD = ZwCreateDirectoryObjectEx((VOID **)(v1 + 232), 0xF000Fui64, &ObjectAttributes, 0i64, Flags);
  if( KernelObjectsSD >= 0 )
  {
    KernelObjectsSD = ObCreateKernelObjectsSD(SecurityDescriptor);
    if( KernelObjectsSD >= 0 )
    {
      v3 = *(void **)(v1 + 232);
      ObjectAttributes.SecurityQualityOfService = 0i64;
      LODWORD(Flagsa) = 0;
      ObjectAttributes.RootDirectory = v3;
      ObjectAttributes.Length = 48;
      ObjectAttributes.ObjectName = (_UNICODE_STRING *)&MiKernelObjectsDirectoryName;
      ObjectAttributes.SecurityDescriptor = SecurityDescriptor;
      ObjectAttributes.Attributes = 576;
      KernelObjectsSD = ZwCreateDirectoryObjectEx((VOID **)(v1 + 240), 0xF000Fui64, &ObjectAttributes, 0i64, Flagsa);
    }
  }
  ObCleanupSecurityDescriptor(SecurityDescriptor);
  return KernelObjectsSD;
}

Referenced by:

MiInitializeMemoryEvents