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.