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