PfCheckDeprioritizeImage
UINT64 __stdcall PfCheckDeprioritizeImage(UINT64 ImagePathHash){
__int64 v1;
_ETHREAD *CurrentThread;
__int64 v3;
unsigned __int64 v4;
__int64 v5;
_BOOL8 v6;
__int64 v8;
v1 = (unsigned int)ImagePathHash;
if( !(_DWORD)ImagePathHash )
return 0i64;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockSharedEx((UINT64)&qword_140C50110, 0i64);
if( (_DWORD)qword_140C50104 )
{
v3 = 0i64;
v4 = (37
* (BYTE6(v1)
+ 37
* (BYTE5(v1)
+ 37
* (BYTE4(v1) + 37 * (BYTE3(v1) + 37 * (BYTE2(v1) + 37 * (BYTE1(v1) + 37 * ((unsigned __int8)v1 + 11623883)))))))
+ HIBYTE(v1)) & (unsigned int)(qword_140C50104 - 1);
v5 = *(_QWORD *)((v4 << dword_140C50100) + qword_140C500F8);
if( v5 )
{
v8 = *(_QWORD *)(((unsigned __int64)((37
* (BYTE6(v1)
+ 37
* (BYTE5(v1)
+ 37
* (BYTE4(v1)
+ 37
* (BYTE3(v1)
+ 37
* (BYTE2(v1) + 37 * (BYTE1(v1) + 37 * ((unsigned __int8)v1 + 11623883)))))))
+ HIBYTE(v1)) & (unsigned int)(qword_140C50104 - 1)) << dword_140C50100)
+ qword_140C500F8);
do
{
v5 = v8;
if( v8 == (unsigned int)v1 )
break;
if( !v3 )
{
v3 = 2654435761i64 * (unsigned int)v1 + 1;
if( ((-79 * (_BYTE)v1) & 1) != 0 )
v3 = 2654435761i64 * (unsigned int)v1;
}
v4 = (unsigned int)(qword_140C50104 - 1) & (v3 + v4);
v5 = *(_QWORD *)((v4 << dword_140C50100) + qword_140C500F8);
v8 = v5;
}
while( v5 );
}
}
else
{
v5 = 0i64;
}
v6 = v5 != 0;
if( _InterlockedCompareExchange64((volatile signed __int64 *)&qword_140C50110, 0i64, 17i64) != 17 )
ExfReleasePushLockShared((INT64 *)&qword_140C50110);
KeAbPostRelease(&qword_140C50110);
KeLeaveCriticalRegion();
return v6;
}Referenced by:
CcUnmapVacb
PfProcessCreateNotification