过滤钩子驱动程序(2)

原创 2002年08月23日 09:38:00
过滤钩子驱动程序参考
     一个过滤钩子驱动程序提供自己的过滤钩子地址来注册过滤钩子实体指针给系统提供的IP过滤驱动程序. 这个
过滤钩子是一个由PacketFilterExtensionPtr定义的数据类型. 因为一个过滤钩子驱动程序提供这个地址而不是名字,
设备开发者完全任意的命名这个过滤钩子.
   
     typedef  PF_FORWARD_ACTION (*PacketFilterExtensionPtr)(
                          IN unsigned char *PacketHeader,
                          IN unsigned char *Packet,
                          IN unsigned int PacketLength,
                          IN unsigned int RecvInterfaceIndex,
                          IN unsigned int SendInterfaceIndex,
                          IN IPAddr RecvLinkNextHop,
                          IN IPAddr SendLinkNextHop
                   );
    这个PacketFilterExtensionPtr数据类型指向一个过滤钩子回调函数. 这个函数处理发送给他的包并检查
是否转发或drop包或允许IP过滤驱动程序接着处理这个包.
    参数:
      PacketHeader:包的IP头的指针。过滤钩子能够计算IP头结构的报头指向的信息。
      Packet :包含过滤钩子接收的包的信息的缓冲指针。这个缓冲不能包括用包头指向的IP头。
      PacketLength :IP包字节长度信息,不包括IP头的长度。
      RecvInterfaceIndex:包所到达的接口适配器的索引数目。过滤钩子使用这个索引来标识接受到包的接口
                 适配器的细节,对于发送的包,这个参数设置成INVALID_PF_IF_INDEX并且RecvLinkNextHop
                 的信息是无意义的。
      SendInterfaceIndex:包所发送的接口适配器的索引数目。如果这个包将要路由的接口的信息是必须的。
                 过滤钩子能通过SNMP查询路由表. 对于到达的包,这个参数被设置成NVALID_PF_IF_INDEX并且
                 SendLinkNextHop中的信息是无意义的。
      RecvLinkNextHop:如果接口适配器是一个指向多指针的接口,这个参数设置成收到包的接口适配器的IP地
                 址。其他时这个参数为设置成ZERO_PF_IP_ADDR.
      SendLinkNextHop:如果接口适配器是一个指向多指针的接口,这个参数设置成发送包的接口适配器的IP地
                 址。其他时这个参数为设置成ZERO_PF_IP_ADDR.

    返回值
      从PF_FORWARD_ACTION列举中返回一个下面的值:
      PF_FORWARD
      PF_DROP
      PF_PASS

    IOCTL_PF_SET_EXTENSION_POINTER
    过滤钩子驱动程序使用这个IOCTL来设置一个IRP用于过滤钩子驱动程序提交给IP过滤驱动程序. 过滤钩子
驱动程序在IoBuildDeviceIoControlRequest函数中发送这个IOCTL来设置IRP.
    IOCTL_PF_SET_EXTENSION_POINTER注册过滤钩子回调函数给IP过滤驱动程序来通告IP过滤驱动程序对每个
要发送和接收到的IP包来调用这些过滤钩子回调. 同样, IOCTL_PF_SET_EXTENSION_POINTER从IP过滤驱动程序
清除过滤钩子回调函数.
    参数
    IoControlCode IOCTL_PF_SET_EXTENSION_POINTER.
      DeviceObject:IP过滤驱动程序设备对象的指针.
      InputBuffer:一个本地包含了PF_SET_EXTENSION_HOOK_INFO结构的指针。要注册过滤钩子回调函数,这
              个结构保留过滤钩子回调函数的地址,要清除过滤钩子回调函数的,这个结构为NULL。
      InputBufferLength PF_SET_EXTENSION_HOOK_INFO结构的字节长度
      OutputBuffer :NULL
      OutputBufferLength :Zero.
      InternalDeviceIoControl :FALSE.
      Event :NULL.
      IoStatusBlock:一个本地接收一个I/O状态块的指针. 这个I/O状态块在IP过滤驱动程序完成I/O请求后设置.
     
    注释
      设置一个IRP, 过滤钩子驱动程序调用IoBuildDeviceIoControlRequest函数. 在这个调用中, 过滤钩子
驱动程序发送参数规定IOCTL_PF_SET_EXTENSION_POINTER的IOCTL请求; 这是个指向IP过滤驱动程序的设备对象
的指针; 和一个包含了PF_SET_EXTENSION_HOOK_INFO结构的输出缓冲. 要获得IP过滤驱动程序的设备对象,  过滤钩
子驱动程序调用IoGetDeviceObjectPointer函数. 在这个调用中, 过滤钩子驱动程序发送参数规定IP过滤驱动程序
的设备对象的名字, 和SYNCHRONIZE, GENERIC_READ, 和GENERIC_WRITE. 这些值规定了对这个设备的同步, 读, 和写
访问方式且必须被提供. 在IoGetDeviceObjectPointer调用中, 过滤钩子驱动程序同样发送一个缓冲指针以保存返回
的IP过滤驱动程序的文件或设备对象。这个Unicode字串包含的IP过滤驱动程序的设备对象的名字象//Device/Ipfil-
terdriver格式.
      提交这个IRP, 过滤钩子驱动程序调用IoCallDriver函数.

    PF_SET_EXTENSION_HOOK_INFO结构定义如下.
    PF_SET_EXTENSION_HOOK_INFO结构包含了一个过滤钩子回调函数的一些描述信息.
    typedef struct _PF_SET_EXTENSION_HOOK_INFO {
              PacketFilterExtensionPtr  ExtensionPointer;
    } PF_SET_EXTENSION_HOOK_INFO, *PPF_SET_EXTENSION_HOOK_INFO;

    包含了如下成员的信息:
    ExtensionPointer
    规定一个PacketFilterExtensionPtr的数据类型以指向一个过滤钩子回调函数并在IP过滤驱动程序中登记这个函
数. 如果ExtensionPointer为空, 先前注册函数从IP过滤驱动程序被清除.

简单的个人防火墙源码

  • 2011年07月01日 11:15
  • 26KB
  • 下载

ForwardAction

  • sd8089730
  • sd8089730
  • 2013年08月24日 13:07
  • 317

过滤钩子驱动程序

这也是转的,把最近看的关于数据包拦截技术的好地文章都转出来。 ...
  • liang13664759
  • liang13664759
  • 2007年03月20日 20:25
  • 1791

绕过文件系统过滤驱动和钩子

1对付文件系统过滤驱动 文件系统过滤驱动Attach在正常的文件系统之上,监视和过滤我们的文件访问。文件系统驱动栈就是由这一连串的Attach起来的过滤驱动组成。我们可以用IoGetRelate...
  • trents
  • trents
  • 2012年02月28日 21:51
  • 1968

钩子(HOOK)机制的使用

转自:CSDN 钩子(HOOK)机制的使用 作者:e梦缘 SetwindowsHookEx函数提供15种不同的消息监视类型,也就是15中不同的钩子。 分别用于捕获某一特定类型或某一范围的消息(如:键盘...
  • thinkray
  • thinkray
  • 2005年03月25日 11:51
  • 520

WordPress发布文章的一些动作钩子

WordPress常用的有两种钩子,过滤钩子add_filter和动作钩子add_action,它们是WordPress插件机制中非常重要的两个函数。过滤钩子用来创建一个过滤器,让其它的主题和插件对一...
  • xhhjin
  • xhhjin
  • 2015年07月05日 00:40
  • 3121

Window XP驱动开发(二十一) 过滤驱动程序

转载请标明是引用于 http://blog.csdn.net/chenyujing1234  欢迎大家拍砖   参考书籍>   过滤驱动程序的开发十分灵活,可以修改已有驱动程序的功能,也可以...
  • chenyujing1234
  • chenyujing1234
  • 2012年07月31日 11:04
  • 11395

一个简单的串口过滤驱动及一点体会

最近写一个简单的串口过滤驱动,代码如下:driver.h #ifdef __cplusplusextern "C"{#endif#include #ifdef __cplusplus}#endif#d...
  • zhengxh
  • zhengxh
  • 2010年01月13日 21:57
  • 1276

过滤驱动程序总结

过滤驱动程序     过滤驱动程序可以修改已有驱动的功能,也可以对数据进行过滤加密。WDM驱动需要通过注册表记录 指定加裁的过滤驱动,OS会读取这些值完成加载,其可以是高层过滤,也...
  • bcbobo21cn
  • bcbobo21cn
  • 2016年04月13日 18:52
  • 1473

USB过滤驱动程序

本文分三部分来介绍如何构造一个简单的USB过滤驱动程序,包括“基本原理”、“程序的实现”、“使用INF安装”。此文的目的在于希望读者了解基本原理后,可以使用除DDK以外最流行也最方便的驱动开发工具Dr...
  • hutao1101175783
  • hutao1101175783
  • 2014年06月13日 17:57
  • 892
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:过滤钩子驱动程序(2)
举报原因:
原因补充:

(最多只允许输入30个字)