ExpScanGeneralLookasideList
VOID __stdcall ExpScanGeneralLookasideList(_LIST_ENTRY *ListHead, UINT64 *SpinLock){
unsigned __int8 v4;
_LIST_ENTRY *Flink;
unsigned __int64 v6;
int v7;
unsigned int v8;
int v9;
int Flink_low;
int v11;
unsigned int v12;
unsigned int v13;
v4 = KeAcquireSpinLockRaiseToDpc(SpinLock);
Flink = ListHead->Flink;
v6 = v4;
if( ListHead->Flink != ListHead )
{
while( 1 )
{
v7 = LODWORD(Flink[-3].Blink) - HIDWORD(Flink[1].Flink);
HIDWORD(Flink[1].Flink) = Flink[-3].Blink;
v8 = HIDWORD(Flink[-3].Flink) - LODWORD(Flink[1].Flink);
v9 = WORD1(Flink[-3].Flink);
LODWORD(Flink[1].Flink) = HIDWORD(Flink[-3].Flink);
if( (_WORD)v9 != 0xFFFF )
break;
LABEL_8:
Flink = Flink->Flink;
if( Flink == ListHead )
goto LABEL_9;
}
Flink_low = LOWORD(Flink[-3].Flink);
if( v8 >= 0x4B )
{
v12 = 1000 * v7 / v8;
if( v12 >= 5 )
{
v13 = v12 * (v9 - Flink_low) / 0x7D0 + 5;
if( v13 > 0x1E )
v13 = 30;
v11 = v13 + Flink_low;
if( v11 > v9 )
LOWORD(v11) = v9;
goto LABEL_7;
}
v11 = Flink_low - 1;
}
else
{
v11 = Flink_low - 10;
}
if( v11 < 4 )
LOWORD(v11) = 4;
LABEL_7:
LOWORD(Flink[-3].Flink) = v11;
goto LABEL_8;
}
LABEL_9:
KxReleaseSpinLock(SpinLock);
__writecr8(v6);
}Referenced by:
KeBalanceSetManager