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