CcNotifyOfMappedWriteComplete
VOID __stdcall CcNotifyOfMappedWriteComplete(
_SECTION_OBJECT_POINTERS *SectionObjectPointers,
_LARGE_INTEGER FileOffset,
UINT64 Length,
INT64 WriteStatus){
char *SharedCacheMap;
__int64 v6;
int v7;
bool VerifyRequired;
char *Partition;
__int64 v11;
_LARGE_INTEGER v12;
UINT64 v13;
UINT8 v14;
_KLOCK_QUEUE_HANDLE LockHandle;
_LARGE_INTEGER FileOffseta;
FileOffseta = FileOffset;
SharedCacheMap = (char *)SectionObjectPointers->SharedCacheMap;
v6 = (unsigned int)Length;
v7 = WriteStatus;
VerifyRequired = 0;
memset(&LockHandle, 0, sizeof(LockHandle));
Partition = (char *)CcGetPartition(SharedCacheMap);
LODWORD(v11) = MmGetControlAreaPartition((INT64)SectionObjectPointers);
if( Partition != *(char **)(v11 + 8) )
KeBugCheckEx(0x34u, (PVOID)0x12E1, (PVOID)0xFFFFFFFFC0000420i64, 0i64, 0i64);
if( v7 < 0 )
VerifyRequired = CcIsFatalWriteError((_SHARED_CACHE_MAP *)SharedCacheMap, (unsigned int)v7) == 0;
v12 = *(_LARGE_INTEGER *)(SharedCacheMap + 48);
if( FileOffset.QuadPart + v6 > v12.QuadPart )
{
if( FileOffset.QuadPart > v12.QuadPart )
goto LABEL_7;
LODWORD(v6) = v12.anonymous_0.LowPart - FileOffset.anonymous_0.LowPart;
}
if( (_DWORD)v6 )
CcReleaseByteRangeFromWrite(
(_SHARED_CACHE_MAP *)SharedCacheMap,
&FileOffseta,
(unsigned int)v6,
0i64,
VerifyRequired);
LABEL_7:
if( *((char **)Partition + 98) != Partition + 784 )
CcPostDeferredWrites();
KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)Partition + 16, &LockHandle);
--*((_DWORD *)SharedCacheMap + 129);
CcDecrementOpenCount((_SHARED_CACHE_MAP *)SharedCacheMap, v13, v14);
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
}Referenced by:
MiWriteComplete