CmFcpManagerPublishChangeNotifications

NTSTATUS __fastcall CmFcpManagerPublishChangeNotifications(UINT64 a1, unsigned __int64 a2){
  __int64 *i; 
  NTSTATUS result; 
  UINT64 MatchingChangeStamp; 
  UINT64 CheckStamp; 
  UINT64 BufferSize; 
  unsigned __int64 Buffer; 
  UINT64 ChangeStamp; 
  INT64 v9; 

  Buffer = a2;
  BufferSize = a1;
  LODWORD(ChangeStamp) = 0;
  ExAcquirePushLockSharedEx((_EX_PUSH_LOCK *)&CmpDummyThreadEvent + 206, 0i64);
  for( i = (__int64 *)*(&CmpDummyThreadEvent + 207);
        i != (__int64 *)((char *)&CmpDummyThreadEvent + 1656);
        i = (__int64 *)*i )
  {
    CmFcpWorkItemQueueWork((PWORK_QUEUE_ITEM)(i + 2));
  }
  if( _InterlockedCompareExchange64((_QWORD *)&CmpDummyThreadEvent + 206, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared((_EX_PUSH_LOCK *)&CmpDummyThreadEvent + 206);
  KeAbPostRelease((char *)&CmpDummyThreadEvent + 1648);
  do
  {
    v9 = 0i64;
    LODWORD(BufferSize) = 8;
    result = ZwQueryWnfStateData(
               &WNF_CMFC_FEATURE_CONFIGURATION_CHANGED,
               &CmFcpWnfTypeId,
               0i64,
               &ChangeStamp,
               &v9,
               &BufferSize);
    if( result < 0 )
      break;
    result = Buffer;
    if( v9 >= Buffer )
      break;
    LODWORD(CheckStamp) = 1;
    LODWORD(MatchingChangeStamp) = ChangeStamp;
    result = ZwUpdateWnfStateData(
               &WNF_CMFC_FEATURE_CONFIGURATION_CHANGED,
               &Buffer,
               8ui64,
               &CmFcpWnfTypeId,
               0i64,
               MatchingChangeStamp,
               CheckStamp);
  }
  while( result == -1073741823 );
  return result;
}

Referenced by:

CmFcManagerUpdateFeatureConfigurations
CmFcManagerUpdateFeatureUsageSubscriptions