1.8.3 发送队列方式的接口实现
1.8.3.1 NPF_IoControl函数
          用户层应用程序执行DeviceIoControl系统调用,通过BIOCSENDPACKETSSYNC 或BIOCSENDPACKETSNOSYNC 的IOCTL命令来调用NPF_BufferedWrite函数。下面为具体的实现代码:
NTSTATUS NPF_IoControl(
IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp
)
{
    case BIOCSENDPACKETSSYNC:/*与时间戳同步的方式发送*/
       SyncWrite = TRUE;
    case BIOCSENDPACKETSNOSYNC: /*与时间戳不同步的方式发送*/  
/*写操作开始,设置为写状态*/      
       NdisAcquireSpinLock(&Open->WriteLock);
       if(Open->WriteInProgress)
       {
           NdisReleaseSpinLock(&Open->WriteLock);
           //另一个写操作当前正在处理,设置失败,函数返回
           SET_FAILURE_UNSUCCESSFUL();
           break;
       }
       else
       {
           Open->WriteInProgress = TRUE;
       }
       NdisReleaseSpinLock(&Open->WriteLock);
      
/*执行写操作*/
       WriteRes = NPF_BufferedWrite(
Irp,
           (PUCHAR)Irp->AssociatedIrp.SystemBuffer,        
IrpSp->Parameters.DeviceIoControl.InputBufferLength,
           SyncWrite
);
       /*写操作结束,设置为非写状态*/
       NdisAcquireSpinLock(&Open->WriteLock);
       Open->WriteInProgress = FALSE;
       NdisReleaseSpinLock(&Open->WriteLock);
       /*函数返回*/
       if( WriteRes != -1)
       {
           SET_RESULT_SUCCESS(WriteRes);
       }
       else
       {
           SET_FAILURE_UNSUCCESSFUL();
       }
       break;
    …
}

本文出自 “千江月” 博客,请务必保留此出处http://eslxf.blog.51cto.com/918801/219072

转载于:https://blog.51cto.com/runhook/387947

深度剖析WinPcap之(九)——数据包的发送过程(12)相关推荐

  1. 深度剖析WinPcap之(九)——数据包的发送过程(8)

    1.7.3    发送队列方式的接口实现 1.7.3.1             PacketSendPackets函数 函数发送数据包队列到网络,函数原型如下: INT PacketSendPack ...

  2. Linux网络 - 数据包的发送过程

    继上一篇介绍了数据包的接收过程后,本文将介绍在Linux系统中,数据包是如何一步一步从应用程序到网卡并最终发送出去的. 如果英文没有问题,强烈建议阅读后面参考里的文章,里面介绍的更详细. 本文只讨论以 ...

  3. linux内核网络协议栈--数据包的发送过程(二十一)

    继上一篇介绍了数据包的接收过程后,本文将介绍在Linux系统中,数据包是如何一步一步从应用程序到网卡并最终发送出去的. socket层 +-------------+| Application |+- ...

  4. 深度剖析Zabbix Web scenarios数据表结构

    深度剖析Zabbix Web scenarios数据表结构 前言 因开发需求,需要解析Zabbix web监控数据表结构:因为网上关于Zabbix数据表结构解析的比较少,所以心血来潮写了一篇作为记录. ...

  5. 利用WinPcap技术捕获数据包

    前言  随着网络入侵的不断发展,网络安全变得越来越重要,于是网络入侵取证系统的研究也变得日益重要.在网络入侵取证系统中,对网络上传送的数据包进行有效的监听即捕获包是目前取证的关键技术,只有进行高效的数 ...

  6. 深度剖析WinPcap之(四)——WinPcap的体系架构(2)

    1.3 WinPcap驱动内部说明 WinPcap的结构如图2-4所示,NPF是WinPcap的组件,用来处理网络上传输的数据包,并对用户层导出数据包捕获.发送与分析的能力.下面将描述NPF与操作系统 ...

  7. Day2多种抓包工具介绍以及使用封包监听工具找到挑战数据包实现发送数据包进行挑战

    工具相关证书安装指南 Charles https://blog.csdn.net/weixin_45459427/article/details/108393878 Fidder https://bl ...

  8. 计算机网络课程设计——发送和接收TCP数据包以及发送和捕获ARP数据包

    1.课程设计要求: 发送和接收TCP数据包:TCP是一种面向连接的.可靠的传输层协议.TCP协议工作在网络层IP协议的基础上.本课程设计的目的是设计一个发送和接收TCP数据包的程序,其功能是填充一个T ...

  9. Linux网络数据包接收处理过程

    因为要对百万.千万.甚至是过亿的用户提供各种网络服务,所以在一线互联网企业里面试和晋升后端开发同学的其中一个重点要求就是要能支撑高并发,要理解性能开销,会进行性能优化.而很多时候,如果你对Linux底 ...

最新文章

  1. 基于手势识别的鼠标控制实现
  2. 网站排名和权重骤降的原因是什么?又该如何处理?
  3. linux command find
  4. 3 了解MyBatis映射文件
  5. 蚂蚁金服大规模分布式事务实践和开源历程
  6. fragtats中连接度指数(CONNECT)的具体解释
  7. OPPO Reno 3 Pro再曝光:5G手机也有轻薄机身
  8. omnigraffle 画曲线_「技法」三步学会用绘图利器 OmniGraffle 绘制流程图
  9. [Ext JS 7]7.6 内存泄露及处理
  10. Midori 0.5 发布,轻量级跨平台网页浏览器
  11. 软件开发生命周期(Software Development Life Cycle)(一)
  12. Teemo 子域名收集工具安装
  13. Python 【问题描述】按照世卫组织的标准: 男性:(身高cm-80)×70%=标准体重 女性:(身高cm-70)×60%=标准体重 标准体重正负10%为正常体重(含10%) 标准体重正负1
  14. MVC5+EF6 入门完整教程
  15. 多个 EXCEL 文件如何合并成一个文件
  16. 演讲实录(文字+视频)丨基于DevOps的质量左移与右移思考
  17. Vscode(arduino框架) 开发ESP32 _01_电容Touch和外部中断
  18. 神经网络低比特量化——LSQ
  19. 三坐标检测基础知识之建立工件坐标系
  20. sockaddr_in和sockaddr区别

热门文章

  1. airtest web 录制滑块_Airtest 录屏总结,这不是一个简单的 recording!
  2. 遗传算法c语言程序,遗传算法c语言代码.doc
  3. html完整表格结构,正确认识html表格(table)的结构
  4. 如何做一名专业的软件测试工程师
  5. PHP如何设置圆,php绘制圆形的方法
  6. tp5 异步处理_tp5.1 swoole 实现异步处理
  7. python namedtuple用法_Python namedtuple(命名元组)使用实例
  8. python 进制转换_Python数据结构与算法——递归应用之进制转换
  9. akaze特征匹配怎么去掉不合适的点_图像匹配几种常见算法与实践
  10. grafana官方使用文档_使用 Loki 采集微服务日志