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