CcWaitForCurrentLazyWriterActivityInternal

NTSTATUS __stdcall CcWaitForCurrentLazyWriterActivityInternal(INT64 FastScan){
  NTSTATUS result; 
  _WORK_QUEUE_ENTRY *v3; 
  _WORK_QUEUE_ENTRY **v4; 
  __int16 Object; 
  char v6; 
  char v7; 
  int v8; 
  __int64 v9[2]; 
  _KLOCK_QUEUE_HANDLE LockHandle; 
  _WORK_QUEUE_ENTRY *WorkEntry; 

  WorkEntry = 0i64;
  v7 = 0;
  memset(&LockHandle, 0, sizeof(LockHandle));
  result = CcAllocateWorkQueueEntry(FastScan, (PSLIST_ENTRY *)&WorkEntry);
  if( result >= 0 )
  {
    v3 = WorkEntry;
    *((_BYTE *)WorkEntry + 120) = 4;
    Object = 0;
    v8 = 0;
    v9[1] = (__int64)v9;
    v9[0] = (__int64)v9;
    v6 = 6;
    *((_QWORD *)v3 + 2) = &Object;
    if( (xmmword_140CFB490 & 0x20000) != 0 )
      CcPerfLogWorkItemEnqueue((_LIST_ENTRY *)(FastScan + 272), v3, 0, 0);
    KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)(FastScan + 128), &LockHandle);
    v4 = *(_WORK_QUEUE_ENTRY ***)(FastScan + 280);
    if( *v4 != (_WORK_QUEUE_ENTRY *)(FastScan + 272) )
      __fastfail(3u);
    *(_QWORD *)v3 = FastScan + 272;
    *((_QWORD *)v3 + 1) = v4;
    *v4 = v3;
    *(_QWORD *)(FastScan + 280) = v3;
    *(_BYTE *)(FastScan + 633) = 1;
    _InterlockedIncrement((volatile signed __int32 *)(FastScan + 356));
    CcScheduleLazyWriteScan(FastScan, 1u);
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
    __writecr8(LockHandle.OldIrql);
    result = KeWaitForSingleObject((UINT64)&Object, 0, 0, 0, 0i64);
    _InterlockedDecrement((volatile signed __int32 *)(FastScan + 356));
  }
  return result;
}

Referenced by:

CcExitPartition
CcWaitForCurrentLazyWriterActivityHelper