PiBuildAndOpenDeviceDirectoryPath

NTSTATUS __fastcall PiBuildAndOpenDeviceDirectoryPath(
        PCUNICODE_STRING SourceString,
        UINT16 *a2,
        INT64 a3,
        CHAR a4,
        INT64 a5){
  __int64 v8; 
  unsigned int v9; 
  int v10; 
  _UNICODE_STRING String; 

  String = 0i64;
  RtlInitUnicodeString(&String, 0i64);
  v8 = -1i64;
  do
    ++v8;
  while( *(_WORD *)(a3 + 2 * v8) );
  v9 = *a2 + SourceString->Length + 20 + 2 * v8;
  if( v9 <= 0xFFFE )
  {
    v10 = IopAllocateUnicodeString(&String, v9);
    if( v10 >= 0 )
    {
      v10 = RtlUnicodeStringPrintfEx(&String, 0i64, 0x800ui64, (WCHAR *)L"%wZ\\%ws\\%wZ\\%ws");
      if( v10 >= 0 )
      {
        v10 = PiOpenDirectoryWithRoot(SourceString, &String);
        if( v10 >= 0 )
          *(_QWORD *)a5 = 0i64;
      }
    }
  }
  else
  {
    v10 = -2147483643;
  }
  RtlFreeAnsiString(&String);
  return v10;
}

Referenced by:

IoGetDeviceDirectory