YuBo97
驱动牛犊
驱动牛犊
  • 注册日期2003-04-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
阅读:1617回复:3

Win98(VXD)改变文件请求方法(源代码)

楼主#
更多 发布于:2003-10-18 14:42
终于试验出来可以异盘转移了!

条件:两个硬盘类型相同,如都是固定磁盘或者都是网络驱动器

例子是从C盘转移到D盘。

目前存在问题:
1)VXD中无法建立目录
2)同盘同目录怎么转移?

首先定义全局变量 HANDLE g_fh=NULL;

关键代码如下:

if( origir->ir_options & ACTION_CREATENEW ){
 if (Drive==4){
   if (g_fh==NULL){//保存某个盘的ir_rh
    g_fh=pir->ir_rh;
   }
 }
 if (Drive==3){
  if (g_fh!=NULL){
   Drive=4;
   pir->ir_rh=g_fh;
  }
 }
else
驱动小牛
驱动小牛
  • 注册日期2002-10-21
  • 最后登录2004-06-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-10-20 16:35
参考DDK
FS_Dir

FS_Dir(
 PIOREQ pir
 )

Directory operations (change, make, and remove) are performed through FS_Dir. This routine handles the Win32 functions: CreateDirectory(), RemoveDirectory(), and SetCurrentDirectory(); and INT 21h functions: 39h, 3Ah, and 3Bh

在里面对FS_DIR的pir各个参数都有详细的介绍.

YuBo97
驱动牛犊
驱动牛犊
  • 注册日期2003-04-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-10-18 20:42
谢谢!偶刚刚开始接触DDK,所以比较弱。

能具体说说怎么建立目录么?

第一个函数地址应该用什么啊,还有我得目录是不是应该放到pir里面去啊?
else
驱动小牛
驱动小牛
  • 注册日期2002-10-21
  • 最后登录2004-06-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-10-18 15:32
参考win95 文件系统那本书来做其实很简单

主要是修改这个函数里面的参数了。
FilemonHookProc(
    pIFSFunc pfn,
    int fn,
    int Drive,
    int ResType,
    int CodePage,
    pioreq pir
    )

pfn表示的是处理这个fn请求函数的地址,如果两个磁盘上的文件系统不相同,这个东西也得变。

pir里面的参数ir_rh表示所要操作的文件在那个分区,所以如果不是在同一个分区,这个参数肯定要替换掉。

如果还要修改路径则还要修改pir参数里面和路径相关的一些信息

创建目录可以用int21 7139 function

或者用
PrevIFSHookProc(
    pfnDir,
    IFSFN_DIR,
    Drive,
    ResType,
    CodePage,
    pir
    )
这种方法来创建,好处是不会有重入

游客

返回顶部