最近上班研究虚拟打印驱动,正好winpcap也跟win驱动相关,上周把书借回来,看了几章,今天顺便做个笔记。
一. DriverEntry函数的实现步骤
分配结构体NDIS_PROTOCOL_CHARACTERISTICS--->根据操作系统的版本,定义跳过环回数据包的正确标识--->对ProtocolChar结构体初始化置零---->向NDIS库注册协议驱动程序---->设置IRP派遣函数和卸载函数--->获取系统中可用网络适配器的信息---->给每个网络适配器创建一个设备对象。
winpcap\packetNtx\driver\packet.c中line 92 DriverEntry()函数中
调用NdisRegisterProtocol()向NDIS库注册ProcotolXXX函数。
line286 getAdaptersList()用于获取系统中可用网络适配器的信息,操作失败NPF会再调用getTcpBindings试图获得TCP/IP协议所绑定的设备信息。
line426 getTcpBindings()
line516 NPF_CreateDevice()用来与设备相关联的驱动对象
二.DriverUnload
line237:DriverObject->DriverUnload = NPF_Unload; 指向了line620 NPF_Unload()
PS: 揭密chap5提到的代码是packet.c,重点讲了三个函数实现,免得剧透,就不全写了。
后期结合网友和自己看的,再整理,看看是不是把这个整理成一部分,然后把注释过的packet.c分享下
参考资料:《网络分析技术揭秘》
1.http://hi.baidu.com/zhanghuisky365/item/c574d5e3f36864f02b09a413
2.驱动程序启动时的入口点函数DriverEntry http://hi.baidu.com/sobiga3/item/eccde80dffcd896dd45a11fd
3.Windows驱动开发技术详解 http://blog.csdn.net/zacklin/article/details/7776254
4.http://blog.csdn.net/huang_shao_bin/article/details/5294077
http://wenku.baidu.com/view/18012173f242336c1eb95e2c.html###