PfSnNameRemove
UINT64 __stdcall PfSnNameRemove(_PFSN_TRACE_HEADER *Trace, UINT64 FileKey){
INT64 *v2;
unsigned int v5;
unsigned __int8 v6;
UINT64 *v7;
unsigned __int64 v8;
UINT64 v9;
UINT64 v10;
_PFSN_TRACE_HEADER *v12;
unsigned __int64 v13;
v2 = (INT64 *)(Trace + 144);
v5 = 0;
v6 = ExAcquireSpinLockExclusive((INT64 *)Trace + 72);
v7 = (UINT64 *)(Trace + 130);
v8 = v6;
v9 = *((_QWORD *)Trace + 65);
if( (Trace[132] & 1) != 0 )
{
if( v9 )
v9 ^= (unsigned __int64)v7;
else
v9 = 0i64;
}
while( 1 )
{
if( !v9 )
{
ExReleaseSpinLockExclusiveFromDpcLevel(v2);
__writecr8(v8);
return v5;
}
if( *(_QWORD *)(v9 + 24) > FileKey )
{
v10 = *(_QWORD *)v9;
goto LABEL_10;
}
if( *(_QWORD *)(v9 + 24) >= FileKey )
break;
v10 = *(_QWORD *)(v9 + 8);
LABEL_10:
if( (Trace[132] & 1) != 0 && v10 )
v9 ^= v10;
else
v9 = v10;
}
RtlRbRemoveNode(v7, v9);
ExReleaseSpinLockExclusiveFromDpcLevel(v2);
__writecr8(v8);
v12 = Trace + 122;
v13 = 0i64;
if( (Trace + 130 >= Trace + 122 ? 4 : 0) != 0 )
{
do
{
if( *(_QWORD *)v12 == FileKey )
*(_QWORD *)v12 = 0i64;
v12 += 2;
++v13;
}
while( v13 < (Trace + 130 >= Trace + 122 ? 4 : 0) );
}
v5 = 1;
ExFreePoolWithTag((PVOID)v9, 0);
return v5;
}Referenced by:
PfSnNameRemoveAll