阅读:1156回复:0
ClearFastCache存在的问题下面附上的代码,是驱网的大牛的作品,好像。 这个代码好像解决不了,mem-map文件的cache flush. 有没有大牛能完善一下,或给我们菜鸟点提示。 VOID ClearFastCache( PFILE_OBJECT FileObject ) { KeEnterCriticalRegion(); //请求MainResource if( ExAcquireResourceExclusiveLite( ((PFSRTL_COMMON_FCB_HEADER)FileObject->FsContext)->Resource, FALSE)){ //请求PagingIoResource if( ExAcquireResourceExclusiveLite( ((PFSRTL_COMMON_FCB_HEADER)FileObject->FsContext)->PagingIoResource, FALSE)){ //如果Cache不为空,准备清除工作 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(); } |
|
|