PiDevCfgBuildDriverNodeStrongName
NTSTATUS __stdcall PiDevCfgBuildDriverNodeStrongName(
PI_DEVCFG_DRIVER_NODE *DriverNode,
_UNICODE_STRING *DeviceManufacturer,
_UNICODE_STRING *DeviceDescription,
_UNICODE_STRING *DriverNodeStrongName){
int v7;
int v8;
unsigned int v9;
int v10;
UINT64 v12;
_UNICODE_STRING DestinationString;
UINT64 HashValue;
*(_QWORD *)&DestinationString.Length = 0i64;
DestinationString.Buffer = 0i64;
LODWORD(HashValue) = 0;
v7 = *((unsigned __int16 *)DriverNode + 44);
v8 = *((unsigned __int16 *)DriverNode + 36);
LODWORD(v12) = 0;
v9 = v7 + *((unsigned __int16 *)DriverNode + 20) + v8 + 90;
if( (unsigned __int64)v9 + 2 > 0xFFFE )
{
v10 = -1073741562;
}
else
{
DestinationString.Length = v9;
DestinationString.MaximumLength = v9 + 2;
DestinationString.Buffer = (wchar_t *)ExpAllocateStringRoutine((unsigned __int16)(v9 + 2));
if( DestinationString.Buffer )
{
if( DeviceManufacturer->Buffer )
RtlHashUnicodeString(DeviceManufacturer, 1u, 0i64, &HashValue);
if( DeviceDescription->Buffer )
RtlHashUnicodeString(DeviceDescription, 1u, 0i64, &v12);
v10 = RtlUnicodeStringPrintf(&DestinationString, (WCHAR *)L"%wZ:%08x%08x:%wZ:%u.%u.%u.%u:%wZ");
if( v10 >= 0 )
{
*DriverNodeStrongName = DestinationString;
DestinationString = 0i64;
}
}
else
{
v10 = -1073741670;
}
}
RtlFreeAnsiString(&DestinationString);
return v10;
}Referenced by:
PiDevCfgConfigureDevice