PfCheckDeprioritizeFile
UINT64 __stdcall PfCheckDeprioritizeFile(UINT64 ImagePathHash, UINT64 FileKey, UINT64 EndPageOffset, INT64 a4){
unsigned int v6;
unsigned int v7;
__int64 v8;
__int64 v9;
UINT64 v10;
__int64 v11;
__int64 v12;
unsigned __int64 v13;
__int64 v15;
__int64 v16;
UINT64 v17;
v6 = ImagePathHash;
v7 = 0;
if( !FileKey || !(unsigned int)PfLockSharedTryAcquire(&stru_140C500C8) )
return v7;
v8 = qword_140C500A8;
if( FileKey != *(_QWORD *)(qword_140C500A8 + 8) )
{
v9 = -1i64 << (dword_140C5009C & 0x1F);
v10 = FileKey & v9;
if( dword_140C5009C < 0x20u )
goto LABEL_31;
v17 = FileKey & v9;
v8 = qword_140C500A0
+ 8i64
* ((37
* (BYTE6(v17)
+ 37
* (BYTE5(v17)
+ 37
* (BYTE4(v17)
+ 37 * (BYTE3(v17) + 37 * (BYTE2(v17) + 37 * (BYTE1(v17) + 37 * ((unsigned __int8)v10 + 11623883)))))))
+ HIBYTE(v17)) & (unsigned int)((dword_140C5009C >> 5) - 1));
while( 1 )
{
v8 = *(_QWORD *)v8;
if( (v8 & 1) != 0 )
break;
if( v10 == (v9 & *(_QWORD *)(v8 + 8)) )
goto LABEL_8;
}
v8 = 0i64;
LABEL_8:
if( !v8 )
{
LABEL_31:
if( _InterlockedCompareExchange64(&stru_140C500C8._bf_0, 0i64, 17i64) != 17 )
ExfReleasePushLockShared(&stru_140C500C8);
KeAbPostRelease(&stru_140C500C8);
KeLeaveCriticalRegion();
return v7;
}
qword_140C500A8 = v8;
}
v11 = *(_QWORD *)(v8 + 16);
if( _InterlockedCompareExchange64(&stru_140C500C8._bf_0, 0i64, 17i64) != 17 )
ExfReleasePushLockShared(&stru_140C500C8);
KeAbPostRelease(&stru_140C500C8);
KeLeaveCriticalRegion();
if( qword_140C500E8 == v11 )
goto LABEL_20;
if( (unsigned int)PfLockSharedTryAcquire(&stru_140C500F0) )
{
if( !(_DWORD)qword_140C500DC )
goto LABEL_16;
v12 = 0i64;
v13 = (37
* (BYTE6(v11)
+ 37
* (BYTE5(v11)
+ 37
* (BYTE4(v11)
+ 37 * (BYTE3(v11) + 37 * (BYTE2(v11) + 37 * (BYTE1(v11) + 37 * ((unsigned __int8)v11 + 11623883)))))))
+ HIBYTE(v11)) & (unsigned int)(qword_140C500DC - 1);
if( !*(_QWORD *)((v13 << dword_140C500D8) + qword_140C500D0) )
goto LABEL_16;
v15 = *(_QWORD *)((v13 << dword_140C500D8) + qword_140C500D0);
do
{
v16 = v15;
if( v15 == v11 )
break;
if( !v12 )
{
v12 = 2654435761i64 * v11 + 1;
if( ((-79 * (_BYTE)v11) & 1) != 0 )
v12 = 2654435761i64 * v11;
}
v13 = (unsigned int)(qword_140C500DC - 1) & (v12 + v13);
v16 = *(_QWORD *)((v13 << dword_140C500D8) + qword_140C500D0);
v15 = v16;
}
while( v16 );
if( v16 )
{
qword_140C500E8 = v11;
}
else
{
LABEL_16:
v7 = 1;
qword_140C50128 = KUSER_SHARED_DATA.TickCountQuad;
}
if( _InterlockedCompareExchange64(&stru_140C500F0._bf_0, 0i64, 17i64) != 17 )
ExfReleasePushLockShared(&stru_140C500F0);
KeAbPostRelease(&stru_140C500F0);
KeLeaveCriticalRegion();
LABEL_20:
PfpRpLogDeprioEvent(FileKey, v6, EndPageOffset & -(__int64)(v7 != 0));
}
return v7;
}Referenced by:
CcUnmapVacb
MiDeprioritizeVad
MiUnmapVad