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