PiDevCfgBuildDriverNodeStrongName

INT64 __fastcall PiDevCfgBuildDriverNodeStrongName(
        UINT16 *a1,
        UNICODE_STRING *a2,
        UNICODE_STRING *a3,
        UNICODE_STRING *a4){
  UINT16 *v8; 
  int v9; 
  UINT16 *v10; 
  int v11; 
  unsigned int v12; 
  unsigned int v13; 
  int v14; 
  int v15; 
  unsigned int v16; 
  UINT64 v18; 
  struct _UNICODE_STRING DestinationString; 
  UINT64 HashValue; 
  *(_QWORD *)&DestinationString.Length = 0i64;
  DestinationString.Buffer = 0i64;
  LODWORD(HashValue) = 0;
  v8 = a1 + 44;
  v9 = a1[44];
  v10 = a1 + 36;
  v11 = a1[36];
  LODWORD(v18) = 0;
  v12 = v9 + a1[20] + v11 + 90;
  if( (unsigned __int64)v12 + 2 > 0xFFFE )
  {
    v16 = -1073741562;
  }
  else
  {
    DestinationString.Length = v12;
    DestinationString.MaximumLength = v12 + 2;
    DestinationString.Buffer = (wchar_t *)ExpAllocateStringRoutine((unsigned __int16)(v12 + 2));
    if( DestinationString.Buffer )
    {
      if( a2->Buffer && (int)RtlHashUnicodeString(a2, 1u, 0i64, &HashValue) >= 0 )
        v13 = HashValue;
      else
        v13 = 0;
      if( a3->Buffer && (int)RtlHashUnicodeString(a3, 1u, 0i64, &v18) >= 0 )
        v14 = v18;
      else
        v14 = 0;
      RtlUnicodeStringPrintf(
        &DestinationString,
        L"%wZ:%08x%08x:%wZ:%u.%u.%u.%u:%wZ",
        a1 + 20,
        v13,
        v14,
        v8,
        HIWORD(*((_DWORD *)a1 + 31)),
        a1[62],
        a1[61],
        a1[60],
        v10);
      v16 = v15;
      if( v15 >= 0 )
      {
        *a4 = DestinationString;
        DestinationString = 0i64;
      }
    }
    else
    {
      v16 = -1073741670;
    }
  }
  RtlFreeAnsiString(&DestinationString);
  return v16;
}

Referenced by:

PiDevCfgConfigureDevice