CcIsThereDirtyDataHelper
CHAR __fastcall CcIsThereDirtyDataHelper(INT64 a1, INT64 a2){
UINT64 *v2;
_QWORD *v4;
int v5;
__int64 i;
int v7;
struct _KLOCK_QUEUE_HANDLE LockHandle;
v2 = (UINT64 *)(a1 + 128);
v4 = (_QWORD *)(a1 + 48);
v5 = 0;
memset(&LockHandle, 0, sizeof(LockHandle));
KeAcquireInStackQueuedSpinLock((UINT64 *)(a1 + 128), &LockHandle);
for( i = *v4 - 136i64; ; i = *(_QWORD *)(i + 136) - 136i64 )
{
if( (_QWORD *)(i + 136) == v4 )
{
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
return 1;
}
v7 = *(_DWORD *)(i + 152);
if( (v7 & 0x800) == 0
&& *(_QWORD *)((*(_QWORD *)(i + 96) & 0xFFFFFFFFFFFFFFF0ui64) + 0x10) == *(_QWORD *)a2
&& *(_DWORD *)(i + 112)
&& (*(_DWORD *)((*(_QWORD *)(i + 96) & 0xFFFFFFFFFFFFFFF0ui64) + 0x50) & 0x8000) == 0 )
{
break;
}
if( (unsigned int)++v5 >= 0x14 && (v7 & 0x820) == 0 )
{
*(_DWORD *)(i + 152) |= 0x20u;
++*(_DWORD *)(i + 112);
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
v5 = 0;
KeAcquireInStackQueuedSpinLock(v2, &LockHandle);
*(_DWORD *)(i + 152) &= ~0x20u;
--*(_DWORD *)(i + 112);
}
}
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
*(_BYTE *)(a2 + 8) = 1;
return 0;
}Referenced by:
No references.