PiDrvDbResolveKeyFilePaths

INT64 __stdcall PiDrvDbResolveKeyFilePaths(HANDLE Handle){
  WCHAR v1; 
  int Node; 
  WCHAR v4; 
  unsigned __int16 Length; 
  wchar_t *Buffer; 
  unsigned __int64 v7; 
  const WCHAR *v8; 
  int v9; 
  INT64 v10; 
  int NodeSystemRoot; 
  UNICODE_STRING *v12; 
  struct _UNICODE_STRING DestinationString; 
  UNICODE_STRING String2; 
  UNICODE_STRING *a2; 
  a2 = 0i64;
  DestinationString = 0i64;
  String2 = 0i64;
  RtlInitUnicodeString(&DestinationString, 0i64, v1);
  Node = IopQueryRegistryKeySystemPath(Handle, &DestinationString);
  if( Node >= 0 )
  {
    Length = DestinationString.Length;
    Buffer = DestinationString.Buffer;
    if( DestinationString.Length >= 2u )
    {
      v7 = (unsigned __int64)DestinationString.Length >> 1;
      if( DestinationString.Buffer[v7 - 1] == 92 )
      {
        DestinationString.Buffer[v7 - 1] = 0;
        Buffer = DestinationString.Buffer;
        Length = DestinationString.Length - 2;
        DestinationString.Length -= 2;
      }
    }
    if( Length <= 0x1Cu
      || !(unsigned __int8)RtlPrefixUnicodeString((PVOID)&PiDrvDbDriverStoresRoot, (INT64 *)&DestinationString)
      || (v8 = Buffer + 14, Buffer[13] != 92) )
    {
      v8 = L"SYSTEM";
    }
    RtlInitUnicodeString(&String2, v8, v4);
    Node = PiDrvDbFindNode(&String2);
    if( Node >= 0 )
    {
      if( (MEMORY[0x1EC] & 1) != 0 )
      {
        v9 = CmIsStateSeparationEnabled() ? 2 : 0;
        NodeSystemRoot = PiDrvDbGetNodeSystemRoot(v10, &a2);
        v12 = a2;
        if( NodeSystemRoot < 0 )
          v12 = 0i64;
        Node = PiDrvDbResolveFilePathKeyValues((INT64)Handle, (unsigned __int8)v9 + 1, &DestinationString, v12);
      }
      else
      {
        Node = 0;
      }
    }
  }
  RtlFreeAnsiString(&DestinationString);
  return(unsigned int)Node;
}

Referenced by:

PiDevCfgInitResolveContext