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