PiOpenDirectoryWithRoot

INT64 __stdcall PiOpenDirectoryWithRoot(PCUNICODE_STRING SourceString, PCUNICODE_STRING a2){
  char v2; 
  _QWORD *v3; 
  CHAR *v4; 
  _QWORD *v5; 
  char v6; 
  int DirectoryPath; 
  NTSTATUS v10; 
  int StateDirectorySecurityObject; 
  __int64 v12; 
  CHAR *v14; 
  struct _IO_STATUS_BLOCK IoStatusBlock; 
  struct _OBJECT_ATTRIBUTES ObjectAttributes; 
  UNICODE_STRING FileHandle; 
  *(_QWORD *)&FileHandle.Length = 0i64;
  v4 = 0i64;
  v14 = 0i64;
  v5 = v3;
  v6 = v2;
  IoStatusBlock = 0i64;
  memset(&ObjectAttributes, 0, sizeof(ObjectAttributes));
  if( !SourceString || !a2 || !v3 )
  {
    DirectoryPath = -1073741811;
    goto LABEL_15;
  }
  if( !(unsigned __int8)RtlPrefixUnicodeString((PVOID)SourceString, (INT64 *)a2) )
    return(unsigned int)-1073741811;
  ObjectAttributes.RootDirectory = 0i64;
  ObjectAttributes.Length = 48;
  ObjectAttributes.Attributes = 576;
  ObjectAttributes.ObjectName = (_UNICODE_STRING *)a2;
  *(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
  v10 = ZwOpenFile(&FileHandle, (PWCHAR)0x100001);
  DirectoryPath = v10;
  if( v10 == -1073741766 )
  {
    if( !v6 )
      goto LABEL_15;
    StateDirectorySecurityObject = PiAuGetStateDirectorySecurityObject(&v14);
    v4 = v14;
    DirectoryPath = StateDirectorySecurityObject;
    if( StateDirectorySecurityObject < 0 )
      goto LABEL_15;
    DirectoryPath = PiCreateDirectoryPath(SourceString);
    if( DirectoryPath < 0 )
      goto LABEL_15;
    DirectoryPath = PiCreateDirectoryPath(a2);
    if( DirectoryPath < 0 )
      goto LABEL_15;
    goto LABEL_13;
  }
  if( v10 >= 0 )
  {
LABEL_13:
    v12 = *(_QWORD *)&FileHandle.Length;
    *(_QWORD *)&FileHandle.Length = 0i64;
    *v5 = v12;
  }
LABEL_15:
  if( *(_QWORD *)&FileHandle.Length )
    ZwClose(*(HANDLE *)&FileHandle.Length);
  if( v4 )
    ExFreePoolWithTag(v4, 0);
  return(unsigned int)DirectoryPath;
}

Referenced by:

PiBuildAndOpenDeviceDirectoryPath
PiGetDriverMutableStateDirectory