MiFlushDataSection
NTSTATUS __stdcall MiFlushDataSection(_FILE_OBJECT *File){
_DWORD *v1;
_DWORD *v2;
_SECTION_OBJECT_POINTERS *SectionObjectPointer;
_CONTROL_AREA *v5;
unsigned int NumberOfSystemCacheViews;
_KEVENT *v7;
_SECTION_OBJECT_POINTERS *v8;
UINT64 Flags;
_IO_STATUS_BLOCK IoStatus;
UINT8 v12;
*v1 = 0;
v2 = v1;
v12 = 0;
SectionObjectPointer = File->SectionObjectPointer;
IoStatus = 0i64;
v5 = MiLockSectionControlArea((_MI_SECTION_OBJECT_POINTERS *)SectionObjectPointer, 1ui64, &v12);
if( v5 )
{
if( v5->u2.WritableUserReferences || v5->LockedPages > 1 )
*v2 = 1;
NumberOfSystemCacheViews = v5->u2.NumberOfSystemCacheViews;
ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&v5->ControlAreaLock);
__writecr8(v12);
v8 = File->SectionObjectPointer;
if( NumberOfSystemCacheViews )
{
CcFlushCachePriv(v8, (_LARGE_INTEGER *)&CmpDummyThreadEvent + 358, 0i64, 0i64, 0, &IoStatus);
LODWORD(v5) = IoStatus.Status;
}
else
{
LODWORD(Flags) = 1;
MmFlushSection(v8, 0i64, 0i64, v7, &IoStatus, Flags);
}
}
return(int)v5;
}Referenced by:
MiCreateImageFileMap