WEB开发网
开发学院软件开发VC VxD编程入门教程 阅读

VxD编程入门教程

 2006-07-19 11:35:47 来源:WEB开发网   
核心提示: 该VxD在设备控制过程(VxD_Control过程)中处理了3个系统控制消息,分别是SYS_DYNAMIC_DEVICE_INIT(动态VxD初始化)、SYS_DYNAMIC_DEVICE_EXIT(动态VxD退出)和W32_DEVICEIOCONTROL(设备I/O控制),VxD编程入门

该VxD在设备控制过程(VxD_Control过程)中处理了3个系统控制消息,分别是SYS_DYNAMIC_DEVICE_INIT(动态VxD初始化)、SYS_DYNAMIC_DEVICE_EXIT(动态VxD退出)和W32_DEVICEIOCONTROL(设备I/O控制),对应的消息处理过程分别是VxD_Device_Init、VxD_Device_Exit和VxD_IOCTL。其中VxD_Device_Init过程和VxD_Device_Exit过程只清除进位标志返回(表示成功),VxD_IOCTL过程是Windows 95/98应用程序与VxD通信的接口,完成文件系统API钩子的安装和移去工作,[esi.dwIOControlCode]中是设备I/O控制代码,该控制代码为1时安装文件系统API钩子,为2时移去文件系统API钩子。File_System_Api_Hook是文件系统API钩子过程,这里作为一个简单的实例,钩子过程判断是否是打开文件操作,如果是则显示一个简单的消息框,然后跳转到上一个文件钩子(相当于旧的文件系统API入口)。如果需要扩充功能,可以在该过程中增加代码。汇编连接VxD需要一个模块定义文件和一个NMAKE文件(手工汇编连接当然也可以)。这两个文件都可以直接用DDK中的GENERIC实例中的模块定义文件和NMAKE文件修改而成,模块定义文件(FILEHOOK.DEF)如下:

VXD FILEHOOK DYNAMIC
DESCRIPTION ''File System API Hook Program''
SEGMENTS
  
     _LPTEXT   CLASS ''LCODE''  PRELOAD NONDISCARDABLE
  
     _LTEXT   CLASS ''LCODE''  PRELOAD NONDISCARDABLE
  
     _LDATA   CLASS ''LCODE''  PRELOAD NONDISCARDABLE
  
     _TEXT    CLASS ''LCODE''  PRELOAD NONDISCARDABLE
  
     _DATA    CLASS ''LCODE''  PRELOAD NONDISCARDABLE
  
     CONST    CLASS ''LCODE''  PRELOAD NONDISCARDABLE
  
     _TLS    CLASS ''LCODE''  PRELOAD NONDISCARDABLE
  
     _BSS    CLASS ''LCODE''  PRELOAD NONDISCARDABLE
  
     _LMSGTABLE CLASS ''MCODE''  PRELOAD NONDISCARDABLE IOPL
  
     _LMSGDATA  CLASS ''MCODE''  PRELOAD NONDISCARDABLE IOPL
  
     _IMSGTABLE CLASS ''MCODE''  PRELOAD DISCARDABLE IOPL
  
     _IMSGDATA  CLASS ''MCODE''  PRELOAD DISCARDABLE IOPL
  
     _ITEXT   CLASS ''ICODE''  DISCARDABLE
  
     _IDATA   CLASS ''ICODE''  DISCARDABLE
  
     _PTEXT   CLASS ''PCODE''  NONDISCARDABLE
  
     _PMSGTABLE CLASS ''MCODE''  NONDISCARDABLE IOPL
  
     _PMSGDATA  CLASS ''MCODE''  NONDISCARDABLE IOPL
  
     _PDATA   CLASS ''PDATA''  NONDISCARDABLE SHARED
  
     _STEXT   CLASS ''SCODE''  RESIDENT
  
     _SDATA   CLASS ''SCODE''  RESIDENT
  
     _DBOSTART  CLASS ''DBOCODE'' PRELOAD NONDISCARDABLE CONFORMING
  
     _DBOCODE  CLASS ''DBOCODE'' PRELOAD NONDISCARDABLE CONFORMING
  
     _DBODATA  CLASS ''DBOCODE'' PRELOAD NONDISCARDABLE CONFORMING
  
     _16ICODE  CLASS ''16ICODE'' PRELOAD DISCARDABLE
  
     _RCODE   CLASS ''RCODE''
EXPORTS
    
     FILEHOOK_DDB @1
NMAKE文件(MAKEFILE)如下:
!ifdef MASTER_MAKE
BUILD_BITS=32
BUILD_TYPE=base
!INCLUDE $(DDKROOT)\master.mk
!endif
NAME = filehook
# supply the location of a 16-bit linker
LINK =
#    Definitions for the debug level
!ifdef DEBUG
DDEBUG =-DDEBLEVEL=1 -DDEBUG
!else
DDEBUG =-DDEBLEVEL=0
!endif
#    Definitions for MASM 6 Assembler
ASM  = ml
AFLAGS = -coff -DBLD_COFF -DIS_32 -W2 -c -Cx -Zm -DMASM6 $(DDEBUG)
ASMENV = ML
LFLAGS = /VXD /NOD
#    MASM 6 only inference rules
.asm.obj:
set $(ASMENV)=$(AFLAGS)
$(ASM) -Fo$*.obj $<
all : $(NAME).VXD
OBJS = filehook.obj
filehook.obj: filehook.asm
$(NAME).vxd: $(NAME).def $(OBJS)
    
     link @<<$(NAME).lnk
$(LFLAGS)
/OUT:$(NAME).vxd
/MAP:$(NAME).map
/DEF:$(NAME).def
$(OBJS)
<<
    
     mapsym -s -o $(NAME).sym $(NAME).map
clean:
-@del *.obj
-@del *.vxd
-@del *.exp
-@del *.lib
-@del *.map
-@del *.sym

上一页  1 2 3 4 5  下一页

Tags:VxD 编程 入门教程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接