CcGetFlushedValidData

LARGE_INTEGER __stdcall CcGetFlushedValidData(_SECTION_OBJECT_POINTERS *SectionObjectPointer, UINT8 CcInternalCaller){
  char *SharedCacheMap; 
  INT64 v5; 
  LARGE_INTEGER v6; 
  _MBCB *v8; 
  _BITMAP_RANGE *BitmapRangeToClean; 
  _QWORD *v10; 
  _QWORD *v11; 
  __int64 v12; 
  INT64 Partition; 
  KLOCK_QUEUE_HANDLE v14; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  memset(&LockHandle, 0, sizeof(LockHandle));
  memset(&v14, 0, sizeof(v14));
  if( CcInternalCaller )
  {
    SharedCacheMap = (char *)SectionObjectPointer->SharedCacheMap;
  }
  else
  {
    KeAcquireInStackQueuedSpinLock(&CcMasterLock, &LockHandle);
    SharedCacheMap = (char *)SectionObjectPointer->SharedCacheMap;
    if( !SharedCacheMap )
    {
      KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
      __writecr8(LockHandle.OldIrql);
      return(LARGE_INTEGER)0x7FFFFFFFFFFFFFFFi64;
    }
    Partition = CcGetPartition((_QWORD *)SectionObjectPointer->SharedCacheMap);
    KeAcquireInStackQueuedSpinLock((UINT64 *)(Partition + 128), &v14);
    ++*((_DWORD *)SharedCacheMap + 1);
    ++*((_DWORD *)SharedCacheMap + 134);
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&v14);
    __writecr8(v14.OldIrql);
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
    __writecr8(LockHandle.OldIrql);
    ExAcquireFastMutex((FAST_MUTEX *)SharedCacheMap + 5);
  }
  v5 = CcGetPartition(SharedCacheMap);
  if( *(_QWORD *)(MmGetControlAreaPartition((INT64)SectionObjectPointer) + 8) != v5 )
    KeBugCheckEx(0x34u, 0x1E8Bui64, 0xFFFFFFFFC0000420ui64, 0i64, 0i64);
  v6 = *(LARGE_INTEGER *)(SharedCacheMap + 48);
  if( *((_DWORD *)SharedCacheMap + 28) )
  {
    v8 = (_MBCB *)*((_QWORD *)SharedCacheMap + 20);
    if( v8 && v8->DirtyPages )
    {
      BitmapRangeToClean = CcFindBitmapRangeToClean(v8, 0i64);
      v6.QuadPart = (BitmapRangeToClean->BasePage + BitmapRangeToClean->FirstDirtyPage) << 12;
    }
    v10 = SharedCacheMap + 16;
    v11 = (_QWORD *)*((_QWORD *)SharedCacheMap + 2);
    v12 = (__int64)(v11 - 2);
    while( v11 != v10 && (*(_WORD *)v12 != 765 || !*(_BYTE *)(v12 + 2)) )
    {
      v12 = *v11 - 16i64;
      v11 = (_QWORD *)*v11;
    }
    if( (_QWORD *)(v12 + 16) != v10 && *(_QWORD *)(v12 + 8) < v6.QuadPart )
      v6 = *(LARGE_INTEGER *)(v12 + 8);
  }
  if( !CcInternalCaller )
  {
    KeReleaseGuardedMutex((_FAST_MUTEX *)SharedCacheMap + 5);
    KeAcquireInStackQueuedSpinLock((UINT64 *)(v5 + 128), &v14);
    CcDecrementOpenCount((INT64)SharedCacheMap);
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&v14);
    __writecr8(v14.OldIrql);
  }
  return v6;
}

Referenced by:

CcWriteBehindInternal