MiCreatePartitionNamespace

INT64 __fastcall MiCreatePartitionNamespace(INT64 a1, INT64 a2, WCHAR a3){
  int KernelObjectsSD; 
  void *v5; 
  UINT64 Flags; 
  UINT64 Flagsa; 
  struct _UNICODE_STRING DestinationString; 
  __int128 SecurityDescriptor[2]; 
  __int64 v11; 
  OBJECT_ATTRIBUTES ObjectAttributes; 
  *(&ObjectAttributes.Length + 1) = 0;
  *(&ObjectAttributes.Attributes + 1) = 0;
  DestinationString = 0i64;
  v11 = 0i64;
  memset(SecurityDescriptor, 0, sizeof(SecurityDescriptor));
  RtlInitUnicodeString(&DestinationString, 0i64, a3);
  ObjectAttributes.RootDirectory = 0i64;
  ObjectAttributes.SecurityQualityOfService = 0i64;
  ObjectAttributes.ObjectName = &DestinationString;
  ObjectAttributes.SecurityDescriptor = (void *)SePublicDefaultUnrestrictedSd;
  ObjectAttributes.Length = 48;
  ObjectAttributes.Attributes = 576;
  LODWORD(Flags) = 2;
  KernelObjectsSD = ZwCreateDirectoryObjectEx((PVOID *)(a1 + 232), 0xF000Fui64, &ObjectAttributes, 0i64, Flags);
  if( KernelObjectsSD >= 0 )
  {
    KernelObjectsSD = ObCreateKernelObjectsSD(SecurityDescriptor);
    if( KernelObjectsSD >= 0 )
    {
      v5 = *(void **)(a1 + 232);
      ObjectAttributes.SecurityQualityOfService = 0i64;
      LODWORD(Flagsa) = 0;
      ObjectAttributes.RootDirectory = v5;
      ObjectAttributes.Length = 48;
      ObjectAttributes.ObjectName = (_UNICODE_STRING *)&MiKernelObjectsDirectoryName;
      ObjectAttributes.SecurityDescriptor = SecurityDescriptor;
      ObjectAttributes.Attributes = 576;
      KernelObjectsSD = ZwCreateDirectoryObjectEx((PVOID *)(a1 + 240), 0xF000Fui64, &ObjectAttributes, 0i64, Flagsa);
    }
  }
  ObCleanupSecurityDescriptor(SecurityDescriptor);
  return(unsigned int)KernelObjectsSD;
}

Referenced by:

MiInitializeMemoryEvents