阅读:2129回复:4
[恢复]放段代码,如何去修改缓存中的FileSize。送给有需要的兄弟
原贴作者:bluacat
放段代码,如何去修改缓存中的FileSize: VOID CheatCMFileSize(IN PFILE_OBJECT FileObject, IN PIRP Irp, IN PLARGE_INTEGER NewFileSize) { PFSRTL_COMMON_FCB_HEADER fcbHeader = NULL; BOOLEAN IoPagingRelease = FALSE, MainResRelease = FALSE; if (!NewFileSize) { return; } // // IRP_PAGE_IO Can not Mod fcbHeader VailDataLength ***** Most****** // if (FlagOn(Irp->Flags,IRP_PAGING_IO)) { KdPrint(("CheatCM:PageIO fo:%p\n",FileObject->FsContext)); return; } fcbHeader = (PFSRTL_COMMON_FCB_HEADER)FileObject->FsContext; if (!fcbHeader) { return; } if (FileObject->SectionObjectPointer) { // // Before we actually truncate, check to see if the purge // is going to fail. // if (!MmCanFileBeTruncated(FileObject->SectionObjectPointer,NewFileSize)) { KdPrint(("CheatCM:MmCanNot fo:%p\n",FileObject->FsContext)); return; } if (ExAcquireResourceExclusive(fcbHeader->Resource,TRUE)) { MainResRelease = TRUE; } if (MainResRelease) { ACQ_PAGE_RES: if (ExAcquireResourceExclusive( fcbHeader->PagingIoResource , TRUE )) { IoPagingRelease = TRUE; }else{ LARGE_INTEGER SleepTime; SleepTime.QuadPart = DELAY_ONE_MILLISECOND * 50;//50ms KeDelayExecutionThread(KernelMode, FALSE, &SleepTime); goto ACQ_PAGE_RES; } } } if (IoPagingRelease && MainResRelease) { IoSetTopLevelIrp( (PIRP)FSRTL_FSP_TOP_LEVEL_IRP ); // // All Lock Acquired Success Update CM File Sizes // if (NewFileSize) { PCC_FILE_SIZES ccSizes = NULL; ccSizes = ExAllocatePoolWithTag(NonPagedPool,sizeof(CC_FILE_SIZES),POOL_TEMP_TAG); if (ccSizes) { ccSizes->AllocationSize = fcbHeader->AllocationSize; ccSizes->ValidDataLength.QuadPart = NewFileSize->QuadPart; ccSizes->FileSize.QuadPart = NewFileSize->QuadPart; CcSetFileSizes(FileObject,ccSizes); SetFlag(FileObject->Flags,FO_FILE_SIZE_CHANGED); SetHashEntryAclStatus(FileObject,ACL_CHEATE_CM_SIZE_COMPELETE,FALSE); ExFreePoolWithTag(ccSizes,POOL_TEMP_TAG); } } } //CLEANUP: if (IoPagingRelease) ExReleaseResource(fcbHeader->PagingIoResource); if (MainResRelease) ExReleaseResource(fcbHeader->Resource); IoSetTopLevelIrp(NULL); return; } |
|
|
沙发#
发布于:2007-01-04 10:53
SetHashEntryAclStatus是干什么用的?
|
|
板凳#
发布于:2007-01-11 11:35
SetHashEntryAclStatus 这个函数是不是楼主定义的,我在DDK在找不到,如果是的话,这个函数的作用是什么?
请前辈们多多指教,在此先谢谢你们了!!! |
|
地板#
发布于:2007-01-12 21:23
路过 顶下
|
|
地下室#
发布于:2007-03-20 09:53
死锁!
|
|
|