PnpMultiSzAppend
NTSTATUS __fastcall PnpMultiSzAppend(WCHAR *pszMultiSz, UINT64 *pulSize, WCHAR *pszString){
unsigned __int64 *v3;
WCHAR v4;
unsigned __int64 v5;
unsigned __int64 *v6;
__int64 v10;
unsigned __int64 v11;
unsigned int v12;
WCHAR *v13;
__int64 v14;
UINT64 v15;
__int64 v16;
WCHAR *v17;
UINT64 dwFlags;
v4 = *pszMultiSz;
v5 = *(unsigned int *)pulSize;
v6 = v3;
if( *pszMultiSz )
{
v13 = pszMultiSz;
if( (_DWORD)v5 )
{
do
{
if( v4 )
{
do
++v13;
while( *v13 );
}
v4 = *++v13;
}
while( *v13 && 2 * (unsigned __int64)(unsigned int)(v13 - pszMultiSz) < v5 );
}
v14 = -1i64;
v15 = *(unsigned int *)pulSize;
v16 = -1i64;
do
++v16;
while( pszString[v16] );
v11 = 2 * (v13 - pszMultiSz + v16) + 4;
if( v11 <= v5 )
{
LODWORD(dwFlags) = 2304;
LODWORD(v11) = RtlStringCbCopyExW(v13, v15, pszString, 0i64, 0i64, dwFlags);
if( (v11 & 0x80000000) == 0i64 )
{
do
++v14;
while( pszString[v14] );
v17 = &v13[v14 + 1];
*v17 = 0;
LODWORD(v11) = 2 * (v17 - pszMultiSz) + 2;
*(_DWORD *)pulSize = v11;
if( v6 )
*v6 = (unsigned __int64)v17;
goto LABEL_21;
}
}
LABEL_22:
LOBYTE(v11) = 0;
return v11;
}
v10 = -1i64;
v11 = -1i64;
do
++v11;
while( pszString[v11] );
v12 = 2 * v11 + 4;
if( v12 > (unsigned int)v5 )
goto LABEL_22;
LODWORD(dwFlags) = 2304;
LODWORD(v11) = RtlStringCbCopyExW(pszMultiSz, *(unsigned int *)pulSize, pszString, 0i64, 0i64, dwFlags);
if( (v11 & 0x80000000) != 0i64 )
goto LABEL_22;
do
++v10;
while( pszMultiSz[v10] );
*(_DWORD *)pulSize = v12;
v11 = (unsigned __int64)&pszMultiSz[v10 + 1];
*(_WORD *)v11 = 0;
if( v6 )
*v6 = v11;
LABEL_21:
LOBYTE(v11) = 1;
return v11;
}Referenced by:
CmAppendDeclarativeDefaultFilters
CmAppendDeclarativeFilterLevel
CmGetDeviceChildren
CmMergeFilterLists