PiDevCfgBuildDriverConfigurationId

__int64 __fastcall PiDevCfgBuildDriverConfigurationId(__int64 a1, struct _UNICODE_STRING *a2){
  __int64 v2; 
  int v3; 
  __int64 v4; 
  unsigned int v6; 
  int v8; 
  int v9; 
  int v10; 
  unsigned __int16 Length; 
  wchar_t *Buffer; 
  unsigned __int64 v14; 
  wchar_t *v15; 
  __int16 v16; 
  size_t v17; 
  const wchar_t *v18; 
  __int64 v19; 
  unsigned __int64 v20; 
  int v21; 
  wchar_t **ppszDestEnd; 
  size_t *pcchRemaining; 
  __int64 dwFlags; 
  struct _UNICODE_STRING DestinationString; 
  struct _UNICODE_STRING RemainingString; 
  struct _TIME_FIELDS TimeFields; 
  wchar_t *v28; 
  size_t v29; 
  size_t pcchNewDestLength; 
  v2 = a1 + 40;
  v3 = *(unsigned __int16 *)(a1 + 40);
  v4 = a1 + 72;
  *(_QWORD *)&DestinationString.Length = 0i64;
  v6 = *(unsigned __int16 *)(a1 + 72) + v3 + 4;
  DestinationString.Buffer = 0i64;
  RemainingString = 0i64;
  TimeFields = 0i64;
  if( *(_QWORD *)(a1 + 96) )
    v6 += *(unsigned __int16 *)(a1 + 88) + 2;
  if( !PnpIsNullGuid((GUID *)(a1 + 188)) )
    v6 += 72;
  if( (unsigned __int64)v6 + 2 > 0xFFFE )
  {
    v9 = -1073741562;
    goto LABEL_13;
  }
  DestinationString.Length = v6;
  DestinationString.MaximumLength = v6 + 2;
  DestinationString.Buffer = (wchar_t *)ExpAllocateStringRoutine((unsigned __int16)(v6 + 2));
  if( !DestinationString.Buffer )
  {
    v9 = -1073741670;
    goto LABEL_13;
  }
  HIDWORD(pcchRemaining) = HIDWORD(v4);
  HIDWORD(ppszDestEnd) = HIDWORD(v2);
  RtlUnicodeStringPrintfEx(&DestinationString, &RemainingString, 0x800ui64, L"%wZ:%wZ");
  v9 = v8;
  if( v8 >= 0 )
  {
    if( *(_QWORD *)(a1 + 96) )
    {
      ppszDestEnd = (wchar_t **)(a1 + 88);
      RtlUnicodeStringPrintfEx(&RemainingString, &RemainingString, 0x800ui64, L",%wZ");
      v9 = v10;
      if( v10 < 0 )
        goto LABEL_13;
      Length = *(_WORD *)(a1 + 88) + 2 + DestinationString.Length;
      DestinationString.Length = Length;
    }
    else
    {
      Length = DestinationString.Length;
    }
    if( PnpIsNullGuid((GUID *)(a1 + 188)) )
    {
LABEL_12:
      *a2 = DestinationString;
      DestinationString = 0i64;
      goto LABEL_13;
    }
    if( *(_QWORD *)(a1 + 96) )
    {
LABEL_46:
      RtlTimeToTimeFields((PLARGE_INTEGER)(a1 + 112), &TimeFields);
      LODWORD(dwFlags) = *(unsigned __int16 *)(a1 + 124);
      LODWORD(pcchRemaining) = (unsigned __int16)HIWORD(*(_DWORD *)(a1 + 124));
      LODWORD(ppszDestEnd) = TimeFields.Year;
      RtlUnicodeStringPrintf(
        &RemainingString,
        L",%02d/%02d/%04d,%u.%u.%u.%u",
        (unsigned int)TimeFields.Month,
        (unsigned int)TimeFields.Day,
        ppszDestEnd,
        pcchRemaining,
        dwFlags,
        *(unsigned __int16 *)(a1 + 122),
        *(unsigned __int16 *)(a1 + 120));
      v9 = v21;
      if( v21 < 0 )
        goto LABEL_13;
      DestinationString.Length = RemainingString.Length + Length;
      goto LABEL_12;
    }
    Buffer = 0i64;
    v14 = 0i64;
    v9 = 0;
    if( (RemainingString.Length & 1) != 0
      || (RemainingString.MaximumLength & 1) != 0
      || RemainingString.Length > RemainingString.MaximumLength
      || RemainingString.MaximumLength == 0xFFFF )
    {
      v9 = -1073741811;
LABEL_44:
      if( v9 < 0 )
        goto LABEL_13;
      Length += 2;
      DestinationString.Length = Length;
      goto LABEL_46;
    }
    if( !RemainingString.Buffer && (RemainingString.Length || RemainingString.MaximumLength) )
    {
      v9 = -1073741811;
    }
    else
    {
      Buffer = RemainingString.Buffer;
      v14 = (unsigned __int64)RemainingString.MaximumLength >> 1;
    }
    if( v9 >= 0 )
    {
      v15 = Buffer;
      v16 = v14;
      v17 = 0i64;
      if( v14 )
      {
        v18 = L",";
        v19 = 0x7FFFi64;
        v20 = v14;
        v9 = 0;
        do
        {
          if( !v19 )
            break;
          if( !*v18 )
            break;
          *(const wchar_t *)((char *)v18 + (char *)Buffer - (char *)L",") = *v18;
          --v19;
          ++v18;
          ++v17;
          --v20;
        }
        while( v20 );
        if( !v20 && v19 && *v18 )
          v9 = -2147483643;
        pcchNewDestLength = v17;
        v16 = v14 - v17;
        v15 = &Buffer[v17];
        v28 = v15;
        v29 = v14 - v17;
        if( v9 < 0 )
        {
          RtlUnicodeStringExHandleOtherFlags(Buffer, v14, (size_t)Buffer, &pcchNewDestLength, &v28, &v29, 0x800u);
          v15 = v28;
          v16 = v29;
          LOWORD(v17) = pcchNewDestLength;
        }
      }
      else
      {
        v9 = Buffer != 0i64 ? -2147483643 : -1073741811;
      }
      RemainingString.Length = 2 * v17;
      if( (int)(v9 + 0x80000000) < 0 || v9 == -2147483643 )
      {
        RemainingString.Length = 0;
        RemainingString.MaximumLength = 2 * v16;
        RemainingString.Buffer = v15;
      }
      goto LABEL_44;
    }
  }
LABEL_13:
  RtlFreeAnsiString(&DestinationString);
  return(unsigned int)v9;
}

Referenced by:

PiDevCfgQueryDriverConfiguration