PspJobNotificationWorker
VOID __stdcall PspJobNotificationWorker(VOID *Context){
__int64 v1;
__int64 v2;
signed __int32 v3;
_ETHREAD *CurrentThread;
UINT64 MatchingChangeStamp;
UINT64 CheckStamp;
do
{
v1 = _InterlockedExchange64(&PspJobNotificationList, -1i64);
do
{
v2 = *(_QWORD *)(v1 + 968);
_m_prefetchw((const void *)(v1 + 1320));
v3 = _InterlockedAnd((volatile signed __int32 *)(v1 + 1320), 0xFFFDDFFF);
if( (v3 & 0x2000) != 0 )
{
LODWORD(CheckStamp) = 0;
LODWORD(MatchingChangeStamp) = 0;
ZwUpdateWnfStateData(
(const _WNF_STATE_NAME *)(v1 + 880),
0i64,
0i64,
0i64,
0i64,
MatchingChangeStamp,
CheckStamp);
}
if( (v3 & 0x20000) != 0 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
PspLockJobExclusive((_EJOB *)v1, CurrentThread);
if( *(_QWORD *)(v1 + 456) && (*(_DWORD *)(v1 + 876) & 0x1000) != 0 )
PspSendReliableJobNotification((_EJOB *)v1, 0xCui64);
PspUnlockJob((_EJOB *)v1, CurrentThread);
}
ObfDereferenceObjectWithTag((VOID *)v1, 0x6F4E7350ui64);
v1 = v2;
}
while( v2 && v2 != -1 );
}
while( _InterlockedCompareExchange64(&PspJobNotificationList, 0i64, -1i64) != -1 );
}Referenced by:
No references.