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