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