PfSnNameRemove
INT64 __fastcall PfSnNameRemove(INT64 a1, UINT64 a2){
INT64 *v2;
unsigned int v5;
KIRQL v6;
INT64 v7;
unsigned __int64 v8;
unsigned __int64 v9;
unsigned __int64 v10;
_QWORD *v12;
unsigned __int64 v13;
v2 = (INT64 *)(a1 + 576);
v5 = 0;
v6 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)(a1 + 576));
v7 = a1 + 520;
v8 = v6;
v9 = *(_QWORD *)(a1 + 520);
if( (*(_BYTE *)(a1 + 528) & 1) != 0 )
{
if( v9 )
v9 ^= v7;
else
v9 = 0i64;
}
while( 1 )
{
if( !v9 )
{
ExReleaseSpinLockExclusiveFromDpcLevel(v2);
__writecr8(v8);
return v5;
}
if( *(_QWORD *)(v9 + 24) > a2 )
{
v10 = *(_QWORD *)v9;
goto LABEL_10;
}
if( *(_QWORD *)(v9 + 24) >= a2 )
break;
v10 = *(_QWORD *)(v9 + 8);
LABEL_10:
if( (*(_BYTE *)(a1 + 528) & 1) != 0 && v10 )
v9 ^= v10;
else
v9 = v10;
}
RtlRbRemoveNode((unsigned __int64 *)v7, v9);
ExReleaseSpinLockExclusiveFromDpcLevel(v2);
__writecr8(v8);
v12 = (_QWORD *)(a1 + 488);
v13 = 0i64;
if( (a1 + 520 >= (unsigned __int64)(a1 + 488) ? 4 : 0) != 0 )
{
do
{
if( *v12 == a2 )
*v12 = 0i64;
++v12;
++v13;
}
while( v13 < (a1 + 520 >= (unsigned __int64)(a1 + 488) ? 4 : 0) );
}
v5 = 1;
ExFreePoolWithTag((PVOID)v9, 0);
return v5;
}Referenced by:
PfSnNameRemoveAll