不知道是不是你想要的
KeEnterCriticalRegion();
if(ExAcquireResourceExclusiveLite( ((PFSRTL_COMMON_FCB_HEADER)FileObject->FsContext)->Resource, FALSE))
{
//if(ExAcquireResourceExclusiveLite( ((PFSRTL_COMMON_FCB_HEADER)FileObject->FsContext)->PagingIoResource, FALSE))
{
if(FileObject->SectionObjectPointer)
{
IoSetTopLevelIrp( (PIRP)FSRTL_FSP_TOP_LEVEL_IRP );
CcFlushCache( FileObject->SectionObjectPointer, NULL, 0, NULL );
if(FileObject->SectionObjectPointer->ImageSectionObject)
{
MmFlushImageSection(
FileObject->SectionObjectPointer,
MmFlushForWrite//MmFlushForDelete//
) ;
}
if(FileObject->SectionObjectPointer->DataSectionObject)
{
CcPurgeCacheSection( FileObject->SectionObjectPointer,
NULL,
0,
FALSE ); //为TRUE,会强迫所有的FileObject重新初始化Cache
}
if(FileObject->PrivateCacheMap)
{
CcUninitializeCacheMap(FileObject, NULL, NULL);;
}
if(FileObject->SectionObjectPointer->DataSectionObject)
{
//Interval.QuadPart = DELAY_ONE_MILLISECOND * 500;//500ms
//KeDelayExecutionThread(KernelMode, FALSE, &Interval);
MmForceSectionClosed( FileObject->SectionObjectPointer,
TRUE//改为TRUE,彻底刷新缓存!!!
);
}
IoSetTopLevelIrp(NULL);
}
//ExReleaseResourceLite( ((PFSRTL_COMMON_FCB_HEADER)FileObject->FsContext)->PagingIoResource );
}
ExReleaseResourceLite( ((PFSRTL_COMMON_FCB_HEADER)FileObject->FsContext)->Resource );
}
KeLeaveCriticalRegion();