ExpWnfNotifySubscription

VOID __fastcall ExpWnfNotifySubscription(INT64 a1, INT64 a2, UINT64 a3, UINT64 a4){
  UINT64 *v4; 
  unsigned int v5; 
  unsigned int v7; 
  __int64 v8; 
  _BYTE *v9; 
  __int64 v10; 
  _BYTE *v11; 
  struct _KEVENT *v12; 
  v4 = (UINT64 *)(a1 + 112);
  v5 = a3;
  v7 = a4;
  v8 = 0i64;
  LODWORD(v9) = KeAbPreAcquire((PVOID)(a1 + 112), 0i64, 0i64);
  v11 = v9;
  if( _InterlockedCompareExchange64((volatile signed __int64 *)v4, 17i64, 0i64) )
    ExfAcquirePushLockSharedEx(v4, v9, v4);
  if( v11 )
    v11[26] |= 1u;
  if( *(_QWORD *)(a2 + 48) && (unsigned int)ExpWnfInsertSubscriptionInPendingQueue(a2, v5, v10) )
    v8 = *(_QWORD *)(a2 + 40);
  if( _InterlockedCompareExchange64((volatile signed __int64 *)v4, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared((INT64 *)v4);
  KeAbPostRelease(v4);
  if( v8 )
  {
    if( PsInitialSystemProcess == (PEPROCESS)v8 )
    {
      ExpWnfStartKernelDispatcher(v7);
    }
    else
    {
      v12 = *(struct _KEVENT **)(*(_QWORD *)(v8 + 2152) + 128i64);
      if( v12 )
        KeSetEvent(v12, 1);
    }
  }
}

Referenced by:

ExpWnfSubscribeWnfStateChange