PopFxActivateDevicesForSx
VOID __stdcall PopFxActivateDevicesForSx(UINT64 MaxLevel){
_ETHREAD *CurrentThread;
unsigned int v2;
__int64 **i;
__int64 *v4;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v2 = MaxLevel;
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockSharedEx((_EX_PUSH_LOCK *)&stru_140C23628 + 489, 0i64);
for( i = (__int64 **)*(&stru_140C23628 + 485); i != (__int64 **)((char *)&stru_140C23628 + 3880); i = (__int64 **)*i )
{
v4 = i[6];
if( v4 && *((unsigned __int8 *)v4 + 216) < v2 && ((_DWORD)i[103] & 1) == 0 )
{
PopFxActivateDevice((_DEVICE_OBJECT *)v4[4], 0);
_InterlockedOr((volatile signed __int32 *)v4 + 74, 0x1000u);
}
}
if( _InterlockedCompareExchange64((_QWORD *)&stru_140C23628 + 489, 0i64, 17i64) != 17 )
ExfReleasePushLockShared((_EX_PUSH_LOCK *)&stru_140C23628 + 489);
KeAbPostRelease((char *)&stru_140C23628 + 3912);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
}Referenced by:
PoBroadcastSystemState
PopFxPrepareDevicesForShutdown