PiDevCfgBuildDriverConfigurationId

NTSTATUS __stdcall PiDevCfgBuildDriverConfigurationId(
        PI_DEVCFG_DRIVER_NODE *DriverNode,
        _UNICODE_STRING *DriverConfigurationId){
  int v2; 
  unsigned int v4; 
  int v6; 
  unsigned __int16 Length; 
  INT64 Buffer; 
  unsigned __int64 v10; 
  WCHAR *v11; 
  __int16 v12; 
  __int64 v13; 
  const wchar_t *v14; 
  __int64 v15; 
  unsigned __int64 v16; 
  _UNICODE_STRING DestinationString; 
  _UNICODE_STRING RemainingString; 
  _TIME_FIELDS TimeFields; 
  WCHAR *ppszDestEnd; 
  unsigned __int64 pcchRemaining; 
  __int64 pcchNewDestLength; 

  v2 = *((unsigned __int16 *)DriverNode + 20);
  *(_QWORD *)&DestinationString.Length = 0i64;
  v4 = *((unsigned __int16 *)DriverNode + 36) + v2 + 4;
  DestinationString.Buffer = 0i64;
  RemainingString = 0i64;
  TimeFields = 0i64;
  if( *((_QWORD *)DriverNode + 12) )
    v4 += *((unsigned __int16 *)DriverNode + 44) + 2;
  if( !PnpIsNullGuid(DriverNode + 47) )
    v4 += 72;
  if( (unsigned __int64)v4 + 2 > 0xFFFE )
  {
    v6 = -1073741562;
    goto LABEL_13;
  }
  DestinationString.Length = v4;
  DestinationString.MaximumLength = v4 + 2;
  DestinationString.Buffer = (wchar_t *)ExpAllocateStringRoutine((unsigned __int16)(v4 + 2));
  if( !DestinationString.Buffer )
  {
    v6 = -1073741670;
    goto LABEL_13;
  }
  v6 = RtlUnicodeStringPrintfEx(&DestinationString, &RemainingString, 0x800ui64, (WCHAR *)L"%wZ:%wZ");
  if( v6 >= 0 )
  {
    if( *((_QWORD *)DriverNode + 12) )
    {
      v6 = RtlUnicodeStringPrintfEx(&RemainingString, &RemainingString, 0x800ui64, (WCHAR *)L",%wZ");
      if( v6 < 0 )
        goto LABEL_13;
      Length = *((_WORD *)DriverNode + 44) + 2 + DestinationString.Length;
      DestinationString.Length = Length;
    }
    else
    {
      Length = DestinationString.Length;
    }
    if( PnpIsNullGuid(DriverNode + 47) )
    {
LABEL_12:
      *DriverConfigurationId = DestinationString;
      DestinationString = 0i64;
      goto LABEL_13;
    }
    if( *((_QWORD *)DriverNode + 12) )
    {
LABEL_46:
      RtlTimeToTimeFields((INT64 *)DriverNode + 14, (WORD *)&TimeFields, Buffer);
      v6 = RtlUnicodeStringPrintf(&RemainingString, (WCHAR *)L",%02d/%02d/%04d,%u.%u.%u.%u");
      if( v6 < 0 )
        goto LABEL_13;
      DestinationString.Length = RemainingString.Length + Length;
      goto LABEL_12;
    }
    Buffer = 0i64;
    v10 = 0i64;
    v6 = 0;
    if( (RemainingString.Length & 1) != 0
      || (RemainingString.MaximumLength & 1) != 0
      || RemainingString.Length > RemainingString.MaximumLength
      || RemainingString.MaximumLength == 0xFFFF )
    {
      v6 = -1073741811;
LABEL_44:
      if( v6 < 0 )
        goto LABEL_13;
      Length += 2;
      DestinationString.Length = Length;
      goto LABEL_46;
    }
    if( !RemainingString.Buffer && (RemainingString.Length || RemainingString.MaximumLength) )
    {
      v6 = -1073741811;
    }
    else
    {
      Buffer = (INT64)RemainingString.Buffer;
      v10 = (unsigned __int64)RemainingString.MaximumLength >> 1;
    }
    if( v6 >= 0 )
    {
      v11 = (WCHAR *)Buffer;
      v12 = v10;
      v13 = 0i64;
      if( v10 )
      {
        v14 = L",";
        v15 = 0x7FFFi64;
        v16 = v10;
        v6 = 0;
        do
        {
          if( !v15 )
            break;
          if( !*v14 )
            break;
          *(const wchar_t *)((char *)v14 + Buffer - (_QWORD)L",") = *v14;
          --v15;
          ++v14;
          ++v13;
          --v16;
        }
        while( v16 );
        if( !v16 && v15 && *v14 )
          v6 = -2147483643;
        pcchNewDestLength = v13;
        v12 = v10 - v13;
        v11 = (WCHAR *)(Buffer + 2 * v13);
        ppszDestEnd = v11;
        pcchRemaining = v10 - v13;
        if( v6 < 0 )
        {
          RtlUnicodeStringExHandleOtherFlags(
            (WCHAR *)Buffer,
            v10,
            Buffer,
            (size_t *)&pcchNewDestLength,
            &ppszDestEnd,
            (size_t *)&pcchRemaining,
            0x800u);
          v11 = ppszDestEnd;
          v12 = pcchRemaining;
          LOWORD(v13) = pcchNewDestLength;
        }
      }
      else
      {
        Buffer = -Buffer;
        v6 = Buffer != 0 ? -2147483643 : -1073741811;
      }
      RemainingString.Length = 2 * v13;
      if( (int)(v6 + 0x80000000) < 0 || v6 == -2147483643 )
      {
        RemainingString.Length = 0;
        RemainingString.MaximumLength = 2 * v12;
        RemainingString.Buffer = v11;
      }
      goto LABEL_44;
    }
  }
LABEL_13:
  RtlFreeAnsiString(&DestinationString);
  return v6;
}

Referenced by:

PiDevCfgQueryDriverConfiguration