CmFcManagerRegisterFeatureConfigurationChangeNotification
INT64 __fastcall CmFcManagerRegisterFeatureConfigurationChangeNotification(){
_QWORD *v0;
_QWORD *v1;
unsigned int v2;
INT64 v3;
_ETHREAD *CurrentThread;
INT64 *v5;
INT64 *v7;
v1 = v0;
v2 = 0;
v3 = CmFcpManagerAllocateChangeSubscription();
if( v3 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockExclusiveEx((UINT64)&stru_140C480B0, 0i64);
v5 = (INT64 *)qword_140C480C0;
if( *(__int64 **)qword_140C480C0 != &qword_140C480B8 )
__fastfail(3u);
*(_QWORD *)v3 = &qword_140C480B8;
*(_QWORD *)(v3 + 8) = v5;
*v5 = v3;
qword_140C480C0 = v3;
if( (_InterlockedExchangeAdd64((volatile signed __int64 *)&stru_140C480B0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((volatile INT64 *)&stru_140C480B0);
KeAbPostRelease(&stru_140C480B0);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
if( v1 && MiGetPfnLink((INT64)&qword_140C47E98) != *v1 )
CmFcpWorkItemQueueWork((PWORK_QUEUE_ITEM)(v3 + 16));
*v7 = v3;
}
else
{
return(unsigned int)-1073741670;
}
return v2;
}Referenced by:
CmFcRegisterFeatureConfigurationChangeNotification