CcWriteBehind

VOID __stdcall CcWriteBehind(_SHARED_CACHE_MAP *SharedCacheMap, _IO_STATUS_BLOCK *IoStatus){
  VOID **v3; 
  void *Partition; 
  int v6; 
  _WORK_QUEUE_ENTRY *v7; 
  VOID **PoolWithTag; 
  __int64 v9[18]; 
  _WORK_QUEUE_ENTRY *WorkQueueEntry; 

  v3 = 0i64;
  WorkQueueEntry = 0i64;
  Partition = CcGetPartition(SharedCacheMap);
  v6 = CcAllocateWorkQueueEntry((__int64)Partition, (PSLIST_ENTRY *)&WorkQueueEntry);
  v7 = WorkQueueEntry;
  if( v6 < 0
    || (*((_BYTE *)WorkQueueEntry + 120) = 2,
        *((_QWORD *)v7 + 1) = 0i64,
        *(_QWORD *)v7 = 0i64,
        *((_QWORD *)v7 + 2) = SharedCacheMap,
        *((_QWORD *)v7 + 3) = IoStatus,
        *((_DWORD *)Partition + 240) >= *((_DWORD *)Partition + 50))
    || *((_QWORD *)Partition + 116)
    || *((_DWORD *)SharedCacheMap + 129)
    || (*((_DWORD *)SharedCacheMap + 38) & 0x10000) != 0
    || *((_BYTE *)Partition + 966)
    || (PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 0x40ui64, 1901552451i64), (v3 = PoolWithTag) == 0i64) )
  {
    memset(v9, 0i64, 0x88u);
    if( !v7 )
    {
      v9[16] = (__int64)Partition;
      v7 = (_WORK_QUEUE_ENTRY *)v9;
      LOBYTE(v9[15]) = 2;
      v9[1] = 0i64;
      v9[0] = 0i64;
      v9[2] = (__int64)SharedCacheMap;
      v9[3] = (__int64)IoStatus;
      LOBYTE(v9[7]) = 0;
    }
    *((_BYTE *)v7 + 56) = 0;
    CcWriteBehindInternal(v7);
    if( v7 == (_WORK_QUEUE_ENTRY *)v9 )
      v7 = 0i64;
  }
  else
  {
    PoolWithTag[7] = Partition;
    *((_DWORD *)PoolWithTag + 8) = 1;
    *((_BYTE *)v7 + 56) = 1;
    *((_QWORD *)v7 + 6) = (char *)v7 + 40;
    *((_QWORD *)v7 + 5) = (char *)v7 + 40;
    *((_WORD *)v7 + 16) = 1;
    *((_BYTE *)v7 + 34) = 6;
    *((_DWORD *)v7 + 9) = 0;
    PoolWithTag[2] = CcWriteBehindInternal;
    PoolWithTag[3] = v7;
    *PoolWithTag = 0i64;
    ExQueueWorkItemToPartition(PoolWithTag);
    KeWaitForSingleObject((UINT64)v7 + 32, 0, 0, 0, 0i64);
  }
  if( v7 )
    CcFreeWorkQueueEntry(v7);
  if( v3 )
    ExFreePoolWithTag(v3, 0x71576343u);
}

Referenced by:

CcWaitForUninitializeCacheMap
CcWorkerThread