CcScanLogHandleList

VOID __stdcall CcScanLogHandleList(
        UINT64 *TotalPagesToWriteForLoggedStreams,
        UINT64 ReasonForFlush,
        _LARGE_INTEGER *OldestLWSTimeStamp,
        INT64 *a4){
  char *v7; 
  unsigned __int64 *v8; 
  char *v9; 
  __int64 v10; 
  unsigned int *v11; 
  unsigned int *v12; 
  unsigned int v13; 
  unsigned int v14; 
  __int64 v15; 
  _DIRTY_PAGE_STATISTICS *v16; 
  unsigned int v17; 
  unsigned __int64 v18; 
  int v19; 
  int v20; 
  INT64 v21; 
  __int64 v22; 
  char **v23; 
  VOID *v24; 
  _KLOCK_QUEUE_HANDLE LockHandle; 
  _KLOCK_QUEUE_HANDLE v26; 
  unsigned __int16 v28; 
  _DIRTY_PAGE_STATISTICS *DirtyPageStatistics; 

  LODWORD(DirtyPageStatistics) = (_DWORD)OldestLWSTimeStamp;
  *(_QWORD *)&LockHandle.OldIrql = 0i64;
  *(_QWORD *)&v26.OldIrql = 0i64;
  *(_DWORD *)ReasonForFlush = 0;
  *a4 = 0x7FFFFFFFFFFFFFFFi64;
  v28 = 0;
  LockHandle.LockQueue = 0i64;
  v26.LockQueue = 0i64;
  KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)&WheapErrorSourceTable + 189, &LockHandle);
  v7 = (char *)*(&CmpDummyThreadEvent + 366);
  if( (_UNKNOWN *)*(&CmpDummyThreadEvent + 366) != (_UNKNOWN *)((char *)&CmpDummyThreadEvent + 2928) )
  {
    v8 = TotalPagesToWriteForLoggedStreams + 16;
    do
    {
      v9 = v7 - 16;
      ++*((_DWORD *)v7 - 3);
      KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
      __writecr8(LockHandle.OldIrql);
      v10 = *((_QWORD *)v7 + 3);
      if( v10 )
        (*((void(__fastcall **)(__int64, unsigned __int16 *))v9 + 7))(v10, &v28);
      KeAcquireInStackQueuedSpinLock(v8, &v26);
      if( !*((_QWORD *)v9 + 5) )
        goto LABEL_12;
      v11 = (unsigned int *)(v9 + 64);
      v12 = (unsigned int *)(v9 + 112);
      if( *((_QWORD *)v9 + 8) >= 0xFFFFFFFFui64 )
      {
        ++CcDbgForcedLogPercentFull;
        v28 = 0;
      }
      else
      {
        v13 = *v11;
        *v12 = *v11;
        if( v28 )
        {
          v14 = 100 * v13;
          *v12 = v14;
          v15 = v14 / v28;
          goto LABEL_9;
        }
      }
      v15 = *((unsigned int *)v9 + 37);
LABEL_9:
      v16 = (_DIRTY_PAGE_STATISTICS *)(unsigned int)DirtyPageStatistics;
      *((_QWORD *)v9 + 11) = v15;
      *((_QWORD *)v9 + 13) = v15;
      *((_QWORD *)v9 + 12) = v15;
      *v12 = (unsigned int)(3 * v15) >> 2;
      v17 = CcCalculatePagesToWrite(
              (UINT64)TotalPagesToWriteForLoggedStreams,
              v16,
              (_DIRTY_PAGE_THRESHOLDS *)(v9 + 64),
              (UINT64)(v9 + 88));
      v18 = *(_QWORD *)v11;
      *((_QWORD *)v9 + 9) = *(_QWORD *)v11;
      if( v17 > v18 >> 3 )
      {
        *(_DWORD *)ReasonForFlush += v17;
        ++CcDbgAdditionalPagesQueuedCount;
      }
      else
      {
        v17 = 0;
      }
      *((_DWORD *)v9 + 36) = v17;
      *((_DWORD *)v9 + 20) = v17;
      if( *((_QWORD *)v9 + 4) )
      {
        v21 = *((_QWORD *)v9 + 22);
        if( v21 < *a4 )
          *a4 = v21;
      }
LABEL_12:
      KeReleaseInStackQueuedSpinLockFromDpcLevel(&v26);
      __writecr8(v26.OldIrql);
      KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)&WheapErrorSourceTable + 189, &LockHandle);
      v19 = *((_DWORD *)v9 + 1);
      v7 = *(char **)v7;
      if( !v19 )
        KeBugCheckEx(0x34u, (PVOID)0x599, (PVOID)0xFFFFFFFFC0000420i64, 0i64, 0i64);
      v20 = v19 - 1;
      *((_DWORD *)v9 + 1) = v20;
      if( !v20 )
      {
        v22 = *((_QWORD *)v9 + 2);
        v23 = (char **)*((_QWORD *)v9 + 3);
        if( *(char **)(v22 + 8) != v9 + 16 || *v23 != v9 + 16 )
          __fastfail(3u);
        *v23 = (char *)v22;
        *(_QWORD *)(v22 + 8) = v23;
        v24 = (VOID *)*((_QWORD *)v9 + 20);
        if( v24 )
        {
          ObfDereferenceObjectWithTag(v24, 0x746C6644ui64);
          *((_QWORD *)v9 + 20) = 0i64;
        }
        ExFreePoolWithTag(v9, 0x6D566343u);
      }
    }
    while( v7 != (char *)&CmpDummyThreadEvent + 2928 );
  }
  KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
  __writecr8(LockHandle.OldIrql);
}

Referenced by:

CcLazyWriteScan