95/98下历遍打开的文件句柄

作者:陆麟
转载请征得作者同意.
1999.10.14 patched 1999.12.24


95DDK已经公开了一个FSD函数叫FS_EnumerateHandle来提供历遍已打开的文件句柄.但是普通情况下大家并没兴趣为了历遍文件句柄就写个VXD.所以在RING3还是需要一些未公开的东西来配合工作才够SMART.:)这个技巧对于写杀毒软件应该有用得很哩.:D
我们在DDK文档里可以看到
INT21H,FUNC 440DH, SUB FUNC 486DH 是该服务的客户端.但是DDK本身并没有486DH的说明.现在就是揭密的时候了.
ECX = 0x486D,
EAX = 0x440D,
EBX,想历遍句柄的驱动器(0-Default drive,A-1,B-2,C-3,...),
EDX,接收已经打开文件的路径的地址,
EDI,0=历遍所有打开文件,1=历遍不可删除文件,
ESI,从0开始,每次调用INT21后加1,直到CY被置位.
返回值:
EAX=文件打开模式
ECX=文件类型.
    1=普通文件
    2=内存映射文件
    3=不可移动文件
    4=交换文件
在DOS窗下,直接调用INT21H就可.在GUI下,需要调用VWIN32的VWIN32_DIOC_DOS_IOCTL服务.具体的VWIN32服务在PLATFORM SDK里有详细说明,这里并不准备详细讲解,相信看这里文章的朋友应该有一定的基础,不需要多余的指点的.:D