gongxp
驱动牛犊
驱动牛犊
  • 注册日期2001-05-25
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3648回复:22

改变文件请求――高手请看

楼主#
更多 发布于:2001-05-25 11:14
   我们知道可以用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]

最新喜欢:

lgqiang888lgqian...
gongxp
horsedo
驱动小牛
驱动小牛
  • 注册日期2001-11-29
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2002-07-04 09:25
楼上的大哥这个问题解决了吗?
兄弟我也碰到这个问题了,
我在  
IFSFN_OPEN:
IFSFN_FINDOPEN:
IFSFN_DIR:
IFSFN_FILEATTRIB:
IFSFN_DELETE:
IFSFN_SEARCH:
IFSFN_RENAME:
这几个涉及到文件路径的操作中更改了ioreq结构中的 ir_ppath
想改变文件请求的路径,加载VXD后没有达到要求,没有影响啊
哪个大侠指教一下,不胜感激!
zdhe
驱动太牛
驱动太牛
  • 注册日期2001-12-26
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分72362分
  • 威望362260点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2002-07-04 12:33
see document in vtoold or win98ddk.

IFSMgr_SetPathHook

this services prepare a callback for redirect service...
good luck.
horsedo
驱动小牛
驱动小牛
  • 注册日期2001-11-29
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2002-07-04 17:29
see document in vtoold or win98ddk.

IFSMgr_SetPathHook

this services prepare a callback for redirect service...
good luck.

谢谢,可是用 IFSMgr_InstallFileSystemApiHook
在钩子函数中 更改 ioreq 结构 怎么不行呢?
而且  IFSMgr_SetPathHook  好像没有足够的资料
zdhe
驱动太牛
驱动太牛
  • 注册日期2001-12-26
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分72362分
  • 威望362260点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2002-07-04 21:19

你程序写错了,所有的工作必须在
retval = (*PrevIFSHookProc)(pfn, fn, Drive, ResType, CodePage, pir);
之前做。

如果,该的不对系统给你错误的可能性是有的,但是你说[没有效果]恐怕你是在系统之后该的。那没有任何作用。

另外,至少在内存dump中可以看到,
你想要的path,不仅仅在ir_aux2->aux_pp,ir_aux3->aux_pp中也有描述,如何使用我不知道,查查资料吧。
horsedo
驱动小牛
驱动小牛
  • 注册日期2001-11-29
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2002-07-04 22:33

你程序写错了,所有的工作必须在
retval = (*PrevIFSHookProc)(pfn, fn, Drive, ResType, CodePage, pir);
之前做。

如果,该的不对系统给你错误的可能性是有的,但是你说[没有效果]恐怕你是在系统之后该的。那没有任何作用。

另外,至少在内存dump中可以看到,
你想要的path,不仅仅在ir_aux2->aux_pp,ir_aux3->aux_pp中也有描述,如何使用我不知道,查查资料吧。

呵呵,肯定在这个前面改的了,
看看 ioreq 结构struct ioreq {
unsigned int ir_length; /* length of user buffer (eCX) */
unsigned char ir_flags; /* misc. status flags (AL) */
uid_t ir_user; /* user ID for this request */
sfn_t ir_sfn; /* System File Number of file handle */
pid_t ir_pid; /* process ID of requesting task */
path_t ir_ppath; /* unicode pathname */
aux_t ir_aux1; /* secondary user data buffer (CurDTA) */
ubuffer_t ir_data; /* ptr to user data buffer (DS:eDX) */
unsigned short ir_options; /* request handling options */
short ir_error; /* error code (0 if OK) */
rh_t ir_rh; /* resource handle */
fh_t ir_fh; /* file (or find) handle */
pos_t ir_pos; /* file position for request */
aux_t ir_aux2; /* misc. extra API parameters */
aux_t ir_aux3; /* misc. extra API parameters */
pevent ir_pev; /* ptr to IFSMgr event for async requests */
fsdwork_t ir_fsd; /* Provider work space */
}; /* ioreq */
我只改了 ir_ppath  没有影响
我想是不是还和
rh_t ir_rh; /* resource handle */
fh_t ir_fh; /* file (or find) handle */
这两个句柄有关呢?改怎么改呢,俺再试试
 :D
horsedo
驱动小牛
驱动小牛
  • 注册日期2001-11-29
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2002-07-16 17:47
惭愧,这个问题烦我一个星期了
试出来98下可以改变某个分区内部的目录重定向到同一个分区例外的目录,可是遇到了和 gongxp 老兄一样的问题
怎么把对D盘的文件操作改为对E盘的操作呢。
  :( :( :( :mad: :mad: :mad: :mad:
dengzg
驱动牛犊
驱动牛犊
  • 注册日期2002-07-16
  • 最后登录2012-07-23
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望49点
  • 贡献值0点
  • 好评度44点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-07-17 10:28
我也碰到相同的问题,不知道怎么解决,顶一下
horsedo
驱动小牛
驱动小牛
  • 注册日期2001-11-29
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2002-07-18 14:15
我也碰到相同的问题,不知道怎么解决,顶一下
 

我再顶一下
dengzg
驱动牛犊
驱动牛犊
  • 注册日期2002-07-16
  • 最后登录2012-07-23
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望49点
  • 贡献值0点
  • 好评度44点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-07-19 16:30
急,怎么没人知道吗?
horsedo
驱动小牛
驱动小牛
  • 注册日期2001-11-29
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2002-07-22 10:33
.
horsedo
驱动小牛
驱动小牛
  • 注册日期2001-11-29
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2002-07-24 16:44
还是没有解决,没有大侠知道吗??
 :( :( :(
wl135
驱动牛犊
驱动牛犊
  • 注册日期2002-07-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-07-25 08:25
关注!关注!关注!
abc...abc
lgqiang888
驱动牛犊
驱动牛犊
  • 注册日期2002-07-19
  • 最后登录2003-03-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-07-25 11:03
为什么只能改文件,不能盘符?
有高手吗?
lgqiang888
驱动牛犊
驱动牛犊
  • 注册日期2002-07-19
  • 最后登录2003-03-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-07-26 09:39
改 ir_rh 能改本地盘符,但不能改成网络映射盘符?
horsedo
驱动小牛
驱动小牛
  • 注册日期2001-11-29
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
15楼#
发布于:2002-07-26 09:45
改 ir_rh 能改本地盘符,但不能改成网络映射盘符?

老兄能先说说怎么通过改 ir_rh 来改本地盘符吗?
能否贴点代码?谢谢
lgqiang888
驱动牛犊
驱动牛犊
  • 注册日期2002-07-19
  • 最后登录2003-03-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2002-07-27 10:42
horsedo
  我给您回了EMAIL
   我的EMIAL gsmstock@21cn.com
lgqiang888
驱动牛犊
驱动牛犊
  • 注册日期2002-07-19
  • 最后登录2003-03-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-07-27 14:10
horesdo兄,
   您是怎么改同一分区的路径的?能告诉我吗?
   gsmstock@21cn.com
SunMing.Cai
驱动牛犊
驱动牛犊
  • 注册日期2002-11-25
  • 最后登录2008-01-10
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2002-12-02 12:29
改ir_rh 的确可以改盘符。

但如何在VXD加载时,马得获得与所有盘符的各个ir_rh呢?

有那位兄弟知道呀?

我的邮件是 sunming@saleonnet.com
梦想驱动人生 ------------------------ MSN:saleonnet@hotmail.com ICQ:175745619 OQ:14892627
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2002-12-03 09:17
IOREQ并不是IFS文件REQ的全部数据结构. 完整的数据结构是IFSREQ.在MS的任何文档中都没有描述. 在IFSREQ中, 有个FIELD描述用到的盘符是哪一个.
具体的内容我忘记了. 你们自己查一下WINDOWS 95 FILE SYSTEM INTERNALS.
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
上一页
游客

返回顶部