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