CmFcManagerRegisterFeatureConfigurationChangeNotification

__int64 __fastcall CmFcManagerRegisterFeatureConfigurationChangeNotification(
        __int64 a1,
        VOID *a2,
        unsigned __int64 a3,
        _QWORD *a4,
        _LIST_ENTRY **a5){
  unsigned int v6; 
  _LIST_ENTRY *v7; 
  _ETHREAD *CurrentThread; 
  _LIST_ENTRY *v9; 
  __int64 v10; 

  v6 = 0;
  v7 = CmFcpManagerAllocateChangeSubscription(a1, a2, a3);
  if( v7 )
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    --CurrentThread->Tcb.KernelApcDisable;
    ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)&CmpDummyThreadEvent + 206, 0i64);
    v9 = (_LIST_ENTRY *)*(&CmpDummyThreadEvent + 208);
    if( (_UNKNOWN *)**(&CmpDummyThreadEvent + 208) != (_UNKNOWN *)((char *)&CmpDummyThreadEvent + 1656) )
      __fastfail(3u);
    v7->Flink = (_LIST_ENTRY *)((char *)&CmpDummyThreadEvent + 1656);
    v7->Blink = v9;
    v9->Flink = v7;
    *(&CmpDummyThreadEvent + 208) = v7;
    if( (_InterlockedExchangeAdd64((_QWORD *)&CmpDummyThreadEvent + 206, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
      ExfTryToWakePushLock((_EX_PUSH_LOCK *)&CmpDummyThreadEvent + 206);
    KeAbPostRelease((char *)&CmpDummyThreadEvent + 1648);
    KeLeaveCriticalRegionThread(KeGetCurrentThread());
    if( a4 )
    {
      LODWORD(v10) = MiGetPfnLink((INT64)&CmpDummyThreadEvent + 1112);
      if( v10 != *a4 )
        CmFcpWorkItemQueueWork((PWORK_QUEUE_ITEM)&v7[1]);
    }
    *a5 = v7;
  }
  else
  {
    return(unsigned int)-1073741670;
  }
  return v6;
}

Referenced by:

CmFcRegisterFeatureConfigurationChangeNotification