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