CcShouldLazyWriteCacheMap

BOOL __fastcall CcShouldLazyWriteCacheMap(INT64 a1, INT64 a2, INT64 a3, INT64 a4){
  int v6; 
  int v8; 
  unsigned int v9; 
  __int64 v10; 
  UINT8 *Partition; 
  bool v12; 
  v6 = *(_DWORD *)(a1 + 152);
  if( (v6 & 0x400820) != 0 )
    goto LABEL_12;
  if( (v6 & 0x10000) != 0 )
    goto LABEL_18;
  if( !*(_DWORD *)(a1 + 516) )
  {
    v8 = *(_DWORD *)(a1 + 4);
    if( !v8 && (!*(_DWORD *)(a1 + 112) || !*(_QWORD *)(a1 + 8)) || (v6 & 0x40000000) != 0 )
      goto LABEL_18;
    v9 = *(_DWORD *)(a1 + 112);
    if( !v9 || !a2 )
      goto LABEL_12;
    LODWORD(a2) = *(_DWORD *)(a1 + 268) + 1;
    *(_DWORD *)(a1 + 268) = a2;
    if( (v6 & 0x1000000) != 0 )
    {
      v10 = *(_QWORD *)(a1 + 240);
      if( !*(_DWORD *)(v10 + 104) )
      {
        a2 = *(_QWORD *)(v10 + 136) + 0x9896800ui64 / KeMaximumIncrement;
        if( (__int64)KUSER_SHARED_DATA.TickCountQuad <= a2 && *(_DWORD *)(a1 + 112) < 0x40u )
          goto LABEL_12;
      }
      goto LABEL_18;
    }
    if( (v6 & 0x200) != 0 )
    {
      if( (a2 & 0xF) == 0 || v9 >= 0x40 )
        goto LABEL_18;
      v12 = (_DWORD)a4 == 16;
    }
    else
    {
      if( (*(_DWORD *)(a3 + 80) & 0x8000) == 0 || !v8 )
        goto LABEL_18;
      Partition = (UINT8 *)CcGetPartition((_QWORD *)a1);
      LODWORD(a2) = CcCanIWriteStreamEx(Partition, a3, 0x1000000ui64, 0i64, 8, 0i64);
      v12 = (_BYTE)a2 == 0;
    }
    if( v12 )
    {
LABEL_18:
      LOBYTE(a2) = 1;
      return a2;
    }
  }
LABEL_12:
  LOBYTE(a2) = 0;
  return a2;
}

Referenced by:

CcLazyWriteScan