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