CmFcManagerNotifyFeatureUsage
__int64 __fastcall CmFcManagerNotifyFeatureUsage(__int64 a1, _QWORD *a2){
char v3;
UINT8 CurrentIrql;
_ETHREAD *CurrentThread;
__int64 v6;
_INTERRUPT_VECTOR_DATA *v7;
unsigned __int32 *v8;
int v9;
v3 = 0;
CurrentIrql = ObGetCurrentIrql();
if( CurrentIrql < 2u )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
v3 = 1;
}
v6 = (unsigned int)RtlAcquireSwapReference((INT64 *)&CmpDummyThreadEvent + 174);
v8 = (unsigned __int32 *)*((_QWORD *)&CmpDummyThreadEvent + v6 + 179);
if( v8 )
{
v9 = RtlpFcAddDelayedUsageReportToBuffer(v8, a2);
if( v9 >= 0 )
{
RtlReleaseSwapReference((_KINTERRUPT **)&CmpDummyThreadEvent + 174, (unsigned int)v6, v7);
LODWORD(v6) = -1;
if( *(&CmpDummyThreadEvent + 1424) )
{
if( CurrentIrql >= 2u )
KeInsertQueueDpc((UINT64)&CmpDummyThreadEvent + 1448, 0i64, 0i64);
else
CmFcpWorkItemQueueWork((PWORK_QUEUE_ITEM)((char *)&CmpDummyThreadEvent + 1512));
}
v9 = 0;
}
}
else
{
v9 = -1073741670;
}
if( (_DWORD)v6 != -1 )
RtlReleaseSwapReference((_KINTERRUPT **)&CmpDummyThreadEvent + 174, (unsigned int)v6, v7);
if( v3 )
KeLeaveCriticalRegion();
return(unsigned int)v9;
}Referenced by:
RtlNotifyFeatureUsage