阅读:2391回复:3
改变文件请求问题,附源代码
改变文件请求问题
我们知道可以用VXD拦截和附加文件请求,但如何改变却有难题。比如希望将对D盘的文件操作改为对E盘的操作: 首先,试图这么简单的来,直接改变HOOK函数的nDrive的值,象这样: int _cdecl OurFileHook(pIFSFunc pfn, int nFunction, int nDrive, int nResources, int Cp, pioreq pir) { if(nDrive==3)nDrive=4; iRet=(*(*ppPrevHook))(pfn, nFunction, nDrive, nResources, Cp, pir); return iRet; } 但是不行,系统是通过资源句柄来访问文件的,于是这么来: int _cdecl OurFileHook(pIFSFunc pfn, int nFunction, int nDrive, int nResources, int Cp, pioreq pir) { int iRet; ifsreq ifs; fhandle irrh; iRet=0; if(nFunction==IFSFN_DELETE){ if(nDrive==4)memcpy(&irrh,pir->ir_rh,sizeof(fhandle)); if(nDrive==3){ memcpy(&ifs,pir,sizeof(ifsreq)); memcpy(ifs.ifs_ir.ir_rh,&irrh,sizeof(fhandle)); iRet= (*(*ppPrevHook))(pfn, nFunction, nDrive, nResources, Cp, (pioreq)&ifs); return iRet; } } iRet=(*(*ppPrevHook))(pfn, nFunction, nDrive, nResources, Cp, pir); return iRet; } 也不行,至此我无招了,请高手指点。 [gongxp 编辑于 2001-05-25 11:24] |
|
|
沙发#
发布于:2001-06-07 17:41
我的理解:
系统在DEL一个文件时,总是先通过Openfile或CreateFile或得了其HANDLE,你的HOOK只在捕获DEL时,其实已无效了,原来要DEL的文件一样会被DEL,它没有进入你的HOOK中,而现在要DEL的文件由于没有取得其HANDLE,也DEL不掉。 当然这只是我的理解。 |
|
|
板凳#
发布于:2001-06-08 19:34
这时其实是把文件改名放进回收站。不是真正的删除文件。
|
|
|
地板#
发布于:2001-06-11 10:47
我的本意是要通过改变IFSREQ来改变文件请求,删除文件不过是一个例子,如果仅是要改变删除文件请求好办,如:
int _cdecl OurFileHook(pIFSFunc pfn, int nFunction, int nDrive, int nResources, int Cp, pioreq pir) { if(nFunction==IFSFN_DELETE){ if(nDrive==3); R0_DeleteFile("e:\\test\\te.c"); iRet=(*(*ppPrevHook))(pfn, nFunction, nDrive, nResources, Cp, pir); return iRet; } |
|
|