----上述过程由用户VxD调用系统VxDIFSMgr提供的服务完成,该VxD提供了丰富的底层文件操作功能:IFSMgr_InstallSyatemApiHook函数用来安装FileSystemApiHookFunction,IFSMgr_RemoveSystemApiHook用来卸除Hooker,IFSMgr_Ring0_FileIO用来对文件和磁盘扇区进行读写访问等等。当由IFSManager转入SystemApiHookFunction时,带有6个参数:
FileSystemApiHookFunction(
pIFSFuncFSDFnAddr,
对应FSD服务函数地址
intFunctionNum,
与API对应的FSD服务功能号(详见下面)
intDrive,
驱动器代号(1=A,2=B,3=C...)
intResourceFlags,
资源标志(详见下面)
intCodePage,
代码页(0=ANSI,1=OEM)
pioreqpir
)
----参数中比较重要的是FSD功能号、驱动器号和IOREQ结构指针3项。如需截获某个文件IOAPI调用,只需在Hooker中对相应FSD功能号进行处理
----系统中可挂接多个Hooker,形成一条链。IFSMgr_InstallFileSystemApiHook安装Hooker成功时返回前一个Hooker地址,每个Hooker在做特定处理后总应调用前一个Hooker,最后安装的Hooker最先被调用。在VxD中调用其他VxD服务采用INT20h指令后跟一个双字的特殊格式,其中高字为被调用VxD的ID号(系统VxD的ID固定),低字为该VxD之服务号,这一形式称为VxDcall,如:
int20h
dd00400043h
;VxDCallIFSMgr_InstallSystemApiHook
int20h
dd00400044h
;VxDCallIFSMgr_RemoveSystemApiHook