PiDrvDbResolveKeyFilePaths

NTSTATUS __stdcall PiDrvDbResolveKeyFilePaths(_HANDLE Handle){
  INT64 v1; 
  int Node; 
  unsigned __int16 Length; 
  wchar_t *Buffer; 
  unsigned __int64 v5; 
  const wchar_t *v6; 
  int v7; 
  __int64 v8; 
  int NodeSystemRoot; 
  _UNICODE_STRING *v10; 
  _UNICODE_STRING DestinationString; 
  _UNICODE_STRING String2; 
  _UNICODE_STRING *v14; 

  v1 = *(_QWORD *)&Handle;
  v14 = 0i64;
  DestinationString = 0i64;
  String2 = 0i64;
  RtlInitUnicodeString(&DestinationString, 0i64);
  Node = IopQueryRegistryKeySystemPath(v1, &DestinationString);
  if( Node >= 0 )
  {
    Length = DestinationString.Length;
    Buffer = DestinationString.Buffer;
    if( DestinationString.Length >= 2u )
    {
      v5 = (unsigned __int64)DestinationString.Length >> 1;
      if( DestinationString.Buffer[v5 - 1] == 92 )
      {
        DestinationString.Buffer[v5 - 1] = 0;
        Buffer = DestinationString.Buffer;
        Length = DestinationString.Length - 2;
        DestinationString.Length -= 2;
      }
    }
    if( Length <= 0x1Cu
      || !(unsigned __int8)RtlPrefixUnicodeString(&PiDrvDbDriverStoresRoot, &DestinationString, 1u)
      || (v6 = Buffer + 14, Buffer[13] != 92) )
    {
      v6 = L"SYSTEM";
    }
    RtlInitUnicodeString(&String2, v6);
    Node = PiDrvDbFindNode(&String2);
    if( Node >= 0 )
    {
      if( (MEMORY[0x1EC] & 1) != 0 )
      {
        v7 = CmIsStateSeparationEnabled() ? 2 : 0;
        NodeSystemRoot = PiDrvDbGetNodeSystemRoot(v8, &v14);
        v10 = v14;
        if( NodeSystemRoot < 0 )
          v10 = 0i64;
        Node = PiDrvDbResolveFilePathKeyValues(v1, v7 + 1, &DestinationString, v10);
      }
      else
      {
        Node = 0;
      }
    }
  }
  RtlFreeAnsiString(&DestinationString);
  return Node;
}

Referenced by:

PiDevCfgInitResolveContext