PnpMultiSzDeleteString

char __fastcall PnpMultiSzDeleteString(void *a1, wchar_t *Str2){
  wchar_t *v3; 
  int v4; 
  __int64 v5; 
  wchar_t *v6; 
  unsigned int v8; 
  unsigned int v9; 
  UINT8 *PoolWithTag; 
  UINT8 *v11; 
  v3 = (wchar_t *)a1;
  if( a1 && Str2 )
  {
    if( !*(_WORD *)a1 )
      return 1;
    while( 1 )
    {
      v4 = wcsicmp(v3, Str2);
      v5 = -1i64;
      do
        ++v5;
      while( v3[v5] );
      if( !v4 )
        break;
      v3 += v5 + 1;
      if( !*v3 )
        return 1;
    }
    v6 = &v3[v5];
    if( !v6[1] )
    {
      *(_DWORD *)v3 = 0;
      return 1;
    }
    v8 = 2 * PnpMultiSzGetLen(v6 + 1);
    if( v8 )
    {
      v9 = v8;
      PoolWithTag = (UINT8 *)ExAllocatePoolWithTag(PagedPool, v8, 0x52504E50ui64);
      v11 = PoolWithTag;
      if( PoolWithTag )
      {
        memmove(PoolWithTag, (UINT8 *)v6 + 2, v9);
        memmove((UINT8 *)v3, v11, v9);
        ExFreePoolWithTag(v11, 0);
        return 1;
      }
    }
  }
  return 0;
}

Referenced by:

CmGetDeviceSiblings