ExpWnfDeleteStateData

VOID __fastcall ExpWnfDeleteStateData(INT64 a1){
  UINT64 *v1; 
  _BYTE *v3; 
  _BYTE *v4; 
  void *v5; 
  v1 = (UINT64 *)(a1 + 80);
  LODWORD(v3) = KeAbPreAcquire((PVOID)(a1 + 80), 0i64, 0i64);
  v4 = v3;
  if( _interlockedbittestandset64((volatile signed __int32 *)v1, 0i64) )
    ExfAcquirePushLockExclusiveEx(v1, v3, v1);
  if( v4 )
    v4[26] |= 1u;
  v5 = *(void **)(a1 + 88);
  *(_QWORD *)(a1 + 88) = 0i64;
  if( (_InterlockedExchangeAdd64((volatile signed __int64 *)v1, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock((volatile INT64 *)v1);
  KeAbPostRelease(v1);
  if( (unsigned __int64)v5 >= 2 )
    ExFreePoolWithTag(v5, 0x20666E57u);
}

Referenced by:

ExpNtDeleteWnfStateData
ExpWnfDeleteNameInstance