PnpAllocateMultiSZ
INT64 __stdcall PnpAllocateMultiSZ(WCHAR *InString, UINT64 MaxLength, WCHAR **OutString){
UINT8 **v3;
UINT8 **v4;
NTSTATUS MultiSzLength;
ULONGLONG v7;
UINT8 *PoolWithTag;
__int64 v9;
__int64 v10;
ULONGLONG pullResult;
ULONGLONG ullMultiplicand;
v4 = v3;
ullMultiplicand = 0i64;
pullResult = 0i64;
MultiSzLength = 0;
*v3 = 0i64;
if( InString )
{
MultiSzLength = PnpGetMultiSzLength(InString, MaxLength, &ullMultiplicand);
if( MultiSzLength >= 0 )
{
v7 = ullMultiplicand;
if( ullMultiplicand > 2 )
{
MultiSzLength = RtlULongLongMult(ullMultiplicand, 2ui64, &pullResult);
if( MultiSzLength >= 0 )
{
PoolWithTag = (UINT8 *)ExAllocatePoolWithTag(PagedPool, pullResult, 0x57706E50ui64);
*v4 = PoolWithTag;
if( PoolWithTag )
{
memmove(PoolWithTag, (UINT8 *)InString, pullResult);
v9 = 2 * v7;
v10 = 2i64;
do
{
v9 -= 2i64;
*(_WORD *)&(*v4)[v9] = 0;
--v10;
}
while( v10 );
}
else
{
return(unsigned int)-1073741670;
}
}
}
}
}
return(unsigned int)MultiSzLength;
}Referenced by:
PiSwPdoPnPDispatch
PiSwPnPInfoInit