CcWaitForCurrentLazyWriterActivityInternal
NTSTATUS __stdcall CcWaitForCurrentLazyWriterActivityInternal(INT64 FastScan){
NTSTATUS result;
PSLIST_ENTRY v3;
PSLIST_ENTRY *v4;
__int16 Object;
char v6;
char v7;
int v8;
__int64 v9[2];
struct _KLOCK_QUEUE_HANDLE LockHandle;
PSLIST_ENTRY v11;
v11 = 0i64;
v7 = 0;
memset(&LockHandle, 0, sizeof(LockHandle));
result = CcAllocateWorkQueueEntry(FastScan, &v11);
if( result >= 0 )
{
v3 = v11;
*((_BYTE *)&v11[7].Next + 8) = 4;
Object = 0;
v8 = 0;
v9[1] = (__int64)v9;
v9[0] = (__int64)v9;
v6 = 6;
v3[1].Next = (_SLIST_ENTRY *)&Object;
if( (xmmword_140CFB490 & 0x20000) != 0 )
CcPerfLogWorkItemEnqueue((_LIST_ENTRY *)(FastScan + 272), (_WORK_QUEUE_ENTRY *)v3, 0, 0);
KeAcquireInStackQueuedSpinLock((UINT64 *)(FastScan + 128), &LockHandle);
v4 = *(PSLIST_ENTRY **)(FastScan + 280);
if( *v4 != (PSLIST_ENTRY)(FastScan + 272) )
__fastfail(3u);
v3->Next = (_SLIST_ENTRY *)(FastScan + 272);
*((_QWORD *)&v3->Next + 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(&Object, Executive, 0, 0, 0i64);
_InterlockedDecrement((volatile signed __int32 *)(FastScan + 356));
}
return result;
}Referenced by:
CcExitPartition
CcWaitForCurrentLazyWriterActivityHelper