做ndis hook的时候,自定义了一个数据包,包结构应该没有问题,填充NDIS_PACKET结构是这样的,
先初始化:    
    NdisAllocatePacketPool(&nStatus, &m_hMyPacketPool, 0xFFF, 0x10);
    NdisAllocateBufferPool(&nStatus, &m_hMyBufferPool, 0x10);
    NdisAllocateMemoryWithTag(&m_pBuffer, MAX_PACKET_SIZE, 'NAMW');
    NdisAllocateBuffer(&nStatus, &m_pMyBuffer, m_hMyBufferPool, m_pBuffer, MAX_PACKET_SIZE);
    NdisAllocatePacket(&nStatus, &m_pMyPacket, m_hMyPacketPool);
    NdisChainBufferAtFront(m_pMyPacket, m_pMyBuffer);
之后在分配的m_pBuffer中填充了一个数据包,再调用
           ((SEND_HANDLER)m_pSend)(NdisBindingHandle, m_pMyPacket);
来发送,结果蓝屏了。

请问高手们我这样做有什么问题吗?

dump文件分析结果:
DRIVER_IRQL_NOT_LESS_OR_EQUAL (d1)
An attempt was made to access a pageable (or completely invalid) address at an
interrupt request level (IRQL) that is too high.  This is usually
caused by drivers using improper addresses.
If kernel debugger is available get stack backtrace.
Arguments:
Arg1: 0a13001b, memory referenced
Arg2: 00000002, IRQL
Arg3: 00000000, value 0 = read operation, 1 = write operation
Arg4: fad4293a, address which referenced memory

Debugging Details:
------------------
READ_ADDRESS:  0a13001b

CURRENT_IRQL:  2

FAULTING_IP: 
tcpip!MdpFree+1a
fad4293a 0fb6461b        movzx   eax,byte ptr [esi+1Bh]

CUSTOMER_CRASH_COUNT:  1

DEFAULT_BUCKET_ID:  DRIVER_FAULT

BUGCHECK_STR:  0xD1

PROCESS_NAME:  svchost.exe

LAST_CONTROL_TRANSFER:  from fad42808 to fad4293a

STACK_TEXT:  
fa31d6d0 fad42808 811e1578 ffb8c008 8121cf30 tcpip!MdpFree+0x1a
fa31d6ec fc31bc1c 8115f410 811e1578 00000000 tcpip!ARPSendComplete+0xdc
fa31d710 fc7fbecb 8115a8c0 8121cf30 00000000 NDIS!ndisMSendCompleteX+0x8d
WARNING: Stack unwind information not available. Following frames may be wrong.
fa31d72c fc7fdedd 0fef0000 8115a8c0 ffb17000 vmxnet+0xecb
fa31d768 fc7fe701 0fef0000 8121cef8 00000103 vmxnet+0x2edd
fa31d77c fc308f86 ffb1700c fa31d7b0 00000001 vmxnet+0x3701
fa31d7a4 fa47aa94 ffb8c008 8121cf30 00000000 NDIS!ndisMSendX+0x1bd
fa31d7b8 fad42d00 ffb8c008 81162df0 8115f410 Bogus!MySend+0x34 [d:\2010\proxy\mybogusprotocol\hookfunc.h @ 198]
fa31d7e0 fad428ce 8115f410 81162df0 ffb6a0f0 tcpip!ARPSendData+0x198
fa31d80c fad4270a 8115f410 fa31d800 00000001 tcpip!ARPTransmit+0x193
fa31d83c fad424a9 810e8240 021aa8c0 81162df0 tcpip!SendIPPacket+0x18e
fa31d988 fad46b83 fad806b4 811be670 81174020 tcpip!IPTransmit+0x287f
fa31da28 fad4694a 812210b0 811be670 ffa67d80 tcpip!UDPSend+0x41b
fa31da4c fad469b0 0031da70 ffa67f00 81174060 tcpip!TdiSendDatagram+0xd5
fa31da84 fad45308 ffa67d80 ffa67e38 ffa67f00 tcpip!UDPSendDatagram+0x4f
fa31daa0 804e47f7 81117af0 ffa67d80 811677c8 tcpip!TCPDispatchInternalDeviceControl+0xff
fa31dab0 fad007f7 fa31db9c 00000008 fa31db10 nt!IopfCallDriver+0x31
fa31db08 facf7bce 0087f244 facf7bce 811677c8 afd!AfdFastDatagramSend+0x2fd
fa31dc50 8057d012 811a9aa0 00000001 0087f114 afd!AfdFastIoDeviceControl+0x2a7
fa31dd00 8057cfa5 00000118 00000144 00000000 nt!IopXxxControlFile+0x261
fa31dd34 804df7ec 00000118 00000144 00000000 nt!NtDeviceIoControlFile+0x2a
fa31dd34 7c92eb94 00000118 00000144 00000000 nt!KiFastCallEntry+0xf8
0087f204 00000000 00000000 00000000 00000000 0x7c92eb94

STACK_COMMAND:  kb

FOLLOWUP_IP: 
vmxnet+ecb
fc7fbecb ??              ???

SYMBOL_STACK_INDEX:  3

SYMBOL_NAME:  vmxnet+ecb

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: vmxnet

IMAGE_NAME:  vmxnet.sys

DEBUG_FLR_IMAGE_TIMESTAMP:  4874830c

FAILURE_BUCKET_ID:  0xD1_vmxnet+ecb

BUCKET_ID:  0xD1_vmxnet+ecb

Followup: MachineOwner
---------

解决了,要处理SendComplete。

【求助】NdisSend,自定义数据包发送失败?的更多相关文章

  1. Windows下底层数据包发送实战

    1.简介 所谓“底层数据包”指的是在“运行”于数据链路层的数据包,简单的说就是“以太网帧”,而我们常用的Socket只能发送“运行”在传输层的TCP.UDP等包,这些传输层数据包已经能满足绝大部分需求 ...

  2. IM通信协议逆向分析、Wireshark自定义数据包格式解析插件编程学习

    相关学习资料 http://hi.baidu.com/hucyuansheng/item/bf2bfddefd1ee70ad68ed04d http://en.wikipedia.org/wiki/I ...

  3. 外网主机如何将数据包发送到共用一个公网IP的局域网某特定主机上的

    内网的一台电脑要上因特网对外开放服务或接收数据.都须要port映射.port映射分为动态和静态. 动态port映射:内网中的一台电脑要訪问站点.会向NAT网关发送数据包.包头中包含对方站点IP.por ...

  4. 网络数据包发送工具PacketSender中文源码

    在网上发现了一个好用的工具PacketSender,数据包发送器.对于写网络程序来说,有很大的便利性.虽然在linux下,netcat工具也很好用,但是这个也不错. 原本是英文的,给翻译了一下.这是基 ...

  5. Netty自定义数据包协议

    粘包和分包出现的原因是:没有一个稳定数据结构 解决办法: 分割符 长度 + 数据 * <pre> * 数据包格式 * +——----——+——-----——+——----——+——---- ...

  6. 基于Netty的RPC架构学习笔记(十):自定义数据包协议

    文章目录 数据包简介 粘包.分包现象 数据包格式 举个

  7. asp.net core中遇到需要自定义数据包解密方法的时候

    最近将公司的项目用.netcore重写, 服务的http外部接口部分收发消息是DES加解密的, 那么在asp.net core mvc的action处理之前需要加入解密这个步骤. 我第一想到的是用fi ...

  8. Linux内核数据包的发送传输

    本文主要讲解了Linux内核数据包的传输流程,使用的内核的版本是2.6.32.27 为了方便理解,本文采用整体流程图加伪代码的方式从内核高层面上梳理了二层数据包发送传输的流程,希望可以对大家有所帮助. ...

  9. Linux网络之设备接口层:发送数据包流程dev_queue_xmit

    转自:http://blog.csdn.net/wdscq1234/article/details/51926808 写在前面 本文主要是分析kernel-3.8的源代码,主要集中在Network的n ...

随机推荐

  1. 手游性能优化之深入理解Texture Compression

    http://gad.qq.com/article/detail/7154875 一.引子 手游项目开发日常里,经常有美术同学搞不清Photoshop制图软件与Unity3D游戏引擎之间的图片asse ...

  2. mysql ERROR 2003 (HY000): Can't connect to MySQL server on '' (10060

    关闭防火墙即可连接成功: systemctl stop firewalld

  3. PostgreSQL-14-异常值处理

    -- 查看异常值CREATE TABLE outerdata(id int PRIMARY KEY,value numeric); \COPY outerdata FROM 'C:\Users\iHJ ...

  4. $.ajax()与vue结合获取数据并渲染

    html: <div id="app1"> <ul> <li v-for="item in datas"> <div ...

  5. python 基础(七) 异常处理

    异常处理 一.需求 当遇到错误的时候 不让程序停止执行 而是越过错误继续执行 二.主体结构 (抓取所有异常) try:   可能出现异常的代码段 except:   出现异常以后的处理   三.处理特 ...

  6. Points on Plane Codeforces - 576C

    https://www.luogu.org/problemnew/show/CF576C 看题面,一眼按莫队的方法排一下 直接交就会和我一样发现WA掉了... 算一下会发现,上限是3e9(块内左端点1 ...

  7. php 分析2

    a:link,a:visited,a:hover,a:active   1:解释 link:连接平常的状态 visited:连接被访问过之后 hover:鼠标放到连接上的时候 active:连接被按下 ...

  8. 错误之Illegal mix of collations for operation 'like'

    内容来自博客:https://www.cnblogs.com/install/p/4417527.html MySQL Illegal mix of collations for operation ...

  9. json_encode 中文处理

    在 php 中使用 json_encode() 内置函数(php > 5.2)可以使用得 php 中数据可以与其它语言很好的传递并且使用它. 这个函数的功能是将数值转换成json数据存储格式. ...

  10. java.lang.IllegalArgumentException: Illegal character in query at index ...解决办法

    今天在写智能机器人问答实现的时候遇到了一个问题,就是我发送消息不能输入空格 给我报了一个错误java.lang.IllegalArgumentException: Illegal character ...