PopFxLowPowerEpochCallback
NTSTATUS __stdcall PopFxLowPowerEpochCallback(GUID *SettingGuid, UINT64 *NewValue, UINT64 ValueLength, PVOID Context){
NTSTATUS v4;
__int64 v5;
_ETHREAD *CurrentThread;
ULONG_PTR *i;
void(__fastcall *v9)(__int64, char *);
char v10[24];
v4 = -1073741811;
v5 = *(_QWORD *)&GUID_LOW_POWER_EPOCH.Data1 - *(_QWORD *)&SettingGuid->Data1;
if( *(_QWORD *)&GUID_LOW_POWER_EPOCH.Data1 == *(_QWORD *)&SettingGuid->Data1 )
v5 = *(_QWORD *)GUID_LOW_POWER_EPOCH.Data4 - *(_QWORD *)SettingGuid->Data4;
if( !v5 && (_DWORD)ValueLength == 4 && NewValue )
{
*(_BYTE *)PopFxLowPowerEpoch = *(_BYTE *)NewValue;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockSharedEx((UINT64)&PopFxPluginLock, 0i64);
for( i = (ULONG_PTR *)PopFxPluginList; i != &PopFxPluginList; i = (ULONG_PTR *)*i )
{
v9 = (void(__fastcall *)(__int64, char *))i[12];
v10[0] = 0;
if( v9 )
{
v10[0] = *(_BYTE *)PopFxLowPowerEpoch;
v9(24i64, v10);
}
}
PopPepLowPowerEpoch = *(_BYTE *)PopFxLowPowerEpoch;
if( _InterlockedCompareExchange64((volatile signed __int64 *)&PopFxPluginLock, 0i64, 17i64) != 17 )
ExfReleasePushLockShared((INT64 *)&PopFxPluginLock);
KeAbPostRelease(&PopFxPluginLock);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
return 0;
}
return v4;
}Referenced by:
No references.