三、驱动程序和应用程序间的通讯
当驱动程序截获网络数据包后,驱动程序要和应用程序进行通讯,通知应用程序对数据包进行判断,如果符合过滤规则,则接受数据包,否则,则放弃该数据包,其步骤大致如下:
(1)应用程序创建一事件Event;
(2)应用程序通过CreateFile创建驱动程序实例;
(3)把该事件的句柄传给驱动程序;
(4)驱动程序通过DeviceControl函数接受Event的句柄;
(5)应用程序通过DeviceIOControl函数传递控制驱动程序的消息;
(6)驱动程序通过Dispatch历程得到应用程序传来的消息,然后根据消息类型进行不同的服务;
(7)把结果数据放入共享内存区,设置Event事件通知应用程序所请求的事情已经办完;
(8)应用程序通过WaitForSingleObject来获知事件发生;
(9)应用程序在共享内存区获得数据,并重置该事件。