NDIS_PROTOCOL_BLOCK的定义

STM32F103C8T6键盘DIY全攻略:从电路设计到固件烧录(附避坑指南) 本文详细介绍了基于STM32F103C8T6微控制器的DIY键盘制作全流程,涵盖硬件电路设计、按键矩阵实现、USB HID通信及固件烧录等关键步骤。特别针对常见问题提供避坑指南,帮助开发者高效完成从电路设计到功能实现的完整过程,打造个性化瀚文键盘。 阅读详情

http://blog.youkuaiyun.com/rhettxie/archive/2006/03/07/618083.aspx

NDIS_PROTOCOL_BLOCK 结构的完整定义我翻遍了DDK都没找到,翻windows2000源代码也没找到。google到驱动开发网上一篇讲封包过滤技术的文章,里面给出了NDIS_PROTOCOL_BLOCK 的定义。我打印出来对照的一个NDIS protocol hook的代码看,总感觉这个结构的定义有问题。不爽了好几天。今天终于google到正确的定义,放这存着:

Q: Where can I get the definition of NDIS_PROTOCOL_BLOCK structure? Does it depend of Windows version or NDIS version?

A: _NDIS_PROTOCOL_BLOCK structure definition depends of Windows and NDIS versions and it's just partially documented by

Microsoft. Some it's definitions can be found in ndis.h. An example, for Windows XP NDIS_PROTOCOL_BLOCK defined as the

following:

struct _NDIS_PROTOCOL_BLOCK
{
  _NDIS_OPEN_BLOCK*    OpenQueue;
  _REFERENCE     Ref;
  _KEVENT*     DeregEvent;
  _NDIS_PROTOCOL_BLOCK*   NextProtocol;
  _NDIS50_PROTOCOL_CHARACTERISTICS  ProtocolCharacteristics;
  _WORK_QUEUE_ITEM    WorkItem;
  _KMUTANT     Mutex;
  DWORD     MutexOwner;
  _UNICODE_STRING*    BindDeviceName;
  _UNICODE_STRING*    RootDeviceName;
  _NDIS_M_DRIVER_BLOCK*   AssociatedMiniDriver;
  _NDIS_MINIPORT_BLOCK*   BindingAdapter;
};
But in ndis.h for Windows ME you can find the following definition:

//-----------------驱动开发网上给的是这个,这个已经过时了---------------------

struct _NDIS_PROTOCOL_BLOCK
{
  PNDIS_OPEN_BLOCK       OpenQueue;  // queue of opens for this protocol
  REFERENCE        Ref;  // contains spinlock for OpenQueue
  UINT         Length; // of this NDIS_PROTOCOL_BLOCK struct
  NDIS50_PROTOCOL_CHARACTERISTICS   ProtocolCharacteristics;// handler addresses struct
  _NDIS_PROTOCOL_BLOCK *      NextProtocol; // Link to next   
  ULONG        MaxPatternSize;
#if defined(NDIS_WRAPPER)
  //
  // Protocol filters
  //
  struct    _NDIS_PROTOCOL_FILTER * ProtocolFilter[NdisMediumMax+1];
  WORK_QUEUE_ITEM       WorkItem; // Used during NdisRegisterProtocol to
      // notify protocols of existing drivers.
  KMUTEX        Mutex;  // For serialization of Bind/Unbind requests
  PKEVENT        DeregEvent; // Used by NdisDeregisterProtocol
#endif
};
As you can see this structure definition depends of NDIS_PROTOCOL_CHARACTERISTICS definition, which is NDIS version

dependent. The Windows version dependence does not need any comments.

//------------------------------------------------------------------------------------------------------------

也给出NDIS_OPEN_BLOCK定义,这个是在xp ddk的ndis.h里翻出来的:

typedef struct _NDIS_COMMON_OPEN_BLOCK
{
    PVOID                       MacHandle;          // needed for backward compatibility
    NDIS_HANDLE                 BindingHandle;      // Miniport's open context
    PNDIS_MINIPORT_BLOCK        MiniportHandle;     // pointer to the miniport
    PNDIS_PROTOCOL_BLOCK        ProtocolHandle;     // pointer to our protocol
    NDIS_HANDLE                 ProtocolBindingContext;// context when calling ProtXX funcs
    PNDIS_OPEN_BLOCK            MiniportNextOpen;   // used by adapter's OpenQueue
    PNDIS_OPEN_BLOCK            ProtocolNextOpen;   // used by protocol's OpenQueue
    NDIS_HANDLE                 MiniportAdapterContext; // context for miniport
    BOOLEAN                     Reserved1;
    BOOLEAN                     Reserved2;
    BOOLEAN                     Reserved3;
    BOOLEAN                     Reserved4;
    PNDIS_STRING                BindDeviceName;
    KSPIN_LOCK                  Reserved5;
    PNDIS_STRING                RootDeviceName;

    //
    // These are referenced by the macros used by protocols to call.
    // All of the ones referenced by the macros are internal NDIS handlers for the miniports
    //
    union
    {
        SEND_HANDLER            SendHandler;
        WAN_SEND_HANDLER        WanSendHandler;
    };
    TRANSFER_DATA_HANDLER       TransferDataHandler;

    //
    // These are referenced internally by NDIS
    //
    SEND_COMPLETE_HANDLER       SendCompleteHandler;
    TRANSFER_DATA_COMPLETE_HANDLER TransferDataCompleteHandler;
    RECEIVE_HANDLER             ReceiveHandler;
    RECEIVE_COMPLETE_HANDLER    ReceiveCompleteHandler;
    WAN_RECEIVE_HANDLER         WanReceiveHandler;
    REQUEST_COMPLETE_HANDLER    RequestCompleteHandler;

    //
    // NDIS 4.0 extensions
    //
    RECEIVE_PACKET_HANDLER      ReceivePacketHandler;
    SEND_PACKETS_HANDLER        SendPacketsHandler;

    //
    // More Cached Handlers
    //
    RESET_HANDLER               ResetHandler;
    REQUEST_HANDLER             RequestHandler;
    RESET_COMPLETE_HANDLER      ResetCompleteHandler;
    STATUS_HANDLER              StatusHandler;
    STATUS_COMPLETE_HANDLER     StatusCompleteHandler;
   
#if defined(NDIS_WRAPPER)
    ULONG                       Flags;
    ULONG                       References;
    KSPIN_LOCK                  SpinLock;           // guards Closing
    NDIS_HANDLE                 FilterHandle;
    ULONG                       ProtocolOptions;
    USHORT                      CurrentLookahead;
    USHORT                      ConnectDampTicks;
    USHORT                      DisconnectDampTicks;

    //
    // These are optimizations for getting to driver routines. They are not
    // necessary, but are here to save a dereference through the Driver block.
    //
    W_SEND_HANDLER              WSendHandler;
    W_TRANSFER_DATA_HANDLER     WTransferDataHandler;

    //
    //  NDIS 4.0 miniport entry-points
    //
    W_SEND_PACKETS_HANDLER      WSendPacketsHandler;

    W_CANCEL_SEND_PACKETS_HANDLER   CancelSendPacketsHandler;

    //
    //  Contains the wake-up events that are enabled for the open.
    //
    ULONG                       WakeUpEnable;
    //
    // event to be signalled when close complets
    //
    PKEVENT                     CloseCompleteEvent;

    QUEUED_CLOSE                QC;

    ULONG                       AfReferences;

    PNDIS_OPEN_BLOCK            NextGlobalOpen;

#endif

} NDIS_COMMON_OPEN_BLOCK;

//
// one of these per open on an adapter/protocol
//
struct _NDIS_OPEN_BLOCK
{
#ifdef __cplusplus
    NDIS_COMMON_OPEN_BLOCK NdisCommonOpenBlock;
#else
    NDIS_COMMON_OPEN_BLOCK;
#endif

#if defined(NDIS_WRAPPER)
   
    //
    // The stuff below is for CO drivers/protocols. This part is not allocated for CL drivers.
    //
    struct _NDIS_OPEN_CO
    {
        //
        // this is the list of the call manager opens done on this adapter
        //
        struct _NDIS_CO_AF_BLOCK *  NextAf;
   
        //
        //  NDIS 5.0 miniport entry-points, filled in at open time.
        //
        W_CO_CREATE_VC_HANDLER      MiniportCoCreateVcHandler;
        W_CO_REQUEST_HANDLER        MiniportCoRequestHandler;
   
        //
        // NDIS 5.0 protocol completion routines, filled in at RegisterAf/OpenAf time
        //
        CO_CREATE_VC_HANDLER        CoCreateVcHandler;
        CO_DELETE_VC_HANDLER        CoDeleteVcHandler;
        PVOID                       CmActivateVcCompleteHandler;
        PVOID                       CmDeactivateVcCompleteHandler;
        PVOID                       CoRequestCompleteHandler;
   
        //
        // lists for queuing connections. There is both a queue for currently
        // active connections and a queue for connections that are not active.
        //
        LIST_ENTRY                  ActiveVcHead;
        LIST_ENTRY                  InactiveVcHead;
        LONG                        PendingAfNotifications;
        PKEVENT                     AfNotifyCompleteEvent;
    };
#endif
};

PFC电压环与电流环的带宽设计:如何避免输入电流畸变? 本文深入探讨了PFC电路中电压环与电流环的带宽设计问题,揭示了快速电压环导致输入电流畸变的机制,并提供了避免THD上升的工程实践方法。通过分析双环控制架构、谐波失真原理及带宽设计黄金法则,帮助工程师优化PFC系统性能,实现高功率因数与低谐波失真的平衡。 阅读详情

相关推荐

复合材料热压罐固化残余应力仿真与优化

复合材料在热压罐固化过程中产生的残余应力是影响构件性能的关键因素,尤其在航空航天和风电叶片等高端制造领域。通过多物理场耦合仿真技术,可以精确预测残余应力分布,优化工艺参数。顺序耦合方法分步求解热分析和结构分析,既保证了计算精度,又控制了成本。Abaqus等有限元工具在此过程中发挥重要作用,通过合理设置边界条件、材料属性和接触关系,能够有效模拟温度场和应力场的相互作用。工程实践中,这种仿真方法已成功应用于无人机机翼、卫星支架等实际项目,显著降低了固化变形和微裂纹风险。

weixin_33146151的博客 216

NDIS的NDIS_PROTOCOL_BLOCK和NDIS_OPEN_BLOCK的介绍

转载自:http://blog.sina.com.cn/s/blog_4de78d5901000bfd.html   本人简单的介绍一种更有效的基于NDIS包拦截技术。 大家都知道,NDIS协议驱动程序是通过填写一张NDIS_PROTOCOL_CHARACTERISTICS的表,并调用NDIS API 函数NdisRegisterProtocol进行注册。现在我们来关注一下NDIS_P

chenyujing1234的专栏 3537

openEuler系统下安装Google Chrome浏览器全攻略(附依赖问题解决方案)

本文详细介绍了在openEuler系统上安装Google Chrome浏览器的完整指南,包括环境准备、多种安装方式、依赖问题解决方案及性能优化技巧。针对openEuler特有的软件生态和依赖管理机制,提供了实用的命令和配置方法,帮助用户克服安装过程中的常见障碍,实现流畅的Chrome使用体验。

hadoop5ranger的博客 1149

NDIS_PROTOCOL_BLOCK 结构

对于NDIS HOOK来说,NDIS_PROTOCOL_BLOCK 结构的准确定义是非常重要的。虽然网上有很多代码都是直接用指定的偏移量来计算的,但我还是比较喜欢有正确的结构定义在。Windows PC 平台上的DDK的NDIS.H中隐藏了很多的定义,但我发现在 Windows CE的DDK却都完全给出,十分奇怪。我经过多次测试,发现只有以下版本在XP以上才能正常使用:  stru

ceabie的专栏 2019

ZYNQ实战:手把手教你用AXI4-Full IP核打通PL与PS的DDR数据通道

本文提供了一份详细的ZYNQ实战指南,手把手教你创建并使用具备AXI4-Full Master接口的自定义IP核,实现PL(可编程逻辑)通过AXI HP接口直接读写PS(处理系统)的DDR内存。文章涵盖了从Vivado硬件设计、IP核配置、地址映射到Vitis软件验证的完整流程,并深入解析了数据一致性(禁用Cache)等关键要点,旨在帮助开发者掌握ZYNQ异构计算中高效数据搬运的核心技术。

weixin_29193359的博客 284

数字IC设计实现之hierarchical flow系列(一)

数字IC设计实现之hierarchical flow系列(一) 最近这段时间小编又比较忙起来了,今天抽空来咖啡厅码字来了,刚到时脑子一片空白,不知道要分享些什么(项目结束后将会在知识星球上分享数字 IC 设计实现 Tapeout 前要review的那些 checklist)。突然间想起来有个星友希望小编分享些数字 IC 设计实现 hierarchical flow 的相关内容。考虑到现在大都采用这种方式来做 design 和实现,那就选这个 topic 了。限于篇幅和时间限制,今天只分享逻辑综合部分和布局布

weixin_37584728的博客 5999

windows网络防火墙开发二三事

<br />网络防火墙开发二三事<br />- haoxg - <br /><br />花了近一个月的时间研究 Windows 平台下的网络防火墙相关技术,并实现了一个简单的防火墙。<br />在独自摸索的过程中,由于以往的开发经历从未涉及此领域,所以碰到了不少困难,也走了些弯路。<br />现此项目暂告一段,遂将相关心得整理成文。文章以归纳总结为主,没有创新性技术,高手免看。 <br /><br />◎ 防火墙的数据包拦截方式小结 <br /><br />网络防火墙都是基于数据包的拦截技术之上的。在 Wi

TANG_XIAO_BIN的专栏 6342

用友BIP培训资料-设计采购订单新增API接口开发

14.在子实体的String pkMeas = order_hhrSlave0VOJson.getString("pk_meas");Openapi路径:nccloud/api/pu/order_hhrmanage/order_hhrMaster/addAggOrder_hhrMasterVO。实现接口的开发部署,通过openAPI的test类,实现一条数据的插入。16.进入自己的Idea打开老师发的TestOpenApi并且编译完成后如下。12.编写检测是否字段中是否含有中文的方法。

m0_68497879的博客 1545

NDIS网络数据监控程序NDISMonitor(1)-----驱动程序(编译过程与源码讲解)

转载请标明是引用于 http://blog.youkuaiyun.com/chenyujing1234  欢迎大家拍砖!   一、编译过程 弄了半天终于编译通过了,看来驱动的开发确实没有应用来得简单啊。 由于DDK提供的ndis.h有4个,什么时候要调用哪个我确实不清楚: (1)我先用#include 结果报错了: 1>1>errors in directory e:\g2\fft\us

chenyujing1234的专栏 8048

PDAF相位对焦原理

pdaf光路图

camerall 1万+

YOLOv11训练命令完全指南:从核心参数解析到高级调优实战(数据配置、epochs设定、batch-size优化与img-size调整)(二)

本文介绍了YOLOv11训练命令的完整配置与解析,提供了基础训练命令示例及参数详解。示例命令包含数据集配置(coco.yaml)、训练轮次(300)、批次大小(64)、图像尺寸(640)等核心参数,以及优化器(AdamW)、学习率(0.001)等调优选项。通过代码实现展示了训练器的初始化流程,包括参数解析、设备设置、数据加载和模型创建等关键步骤,为YOLOv11模型训练提供了实用指导。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1094

NDIS HOOK实现方法

转载探索NDIS HOOK新的实现方法(1) NDIS HOOK是专业级防火墙使用的一种拦截技术,NDIS HOOK的重点是如何获得特定协议对应NDIS_PROTOCOL_BLOCK指针,获得了该指针,接下来就可以替换该协议所注册的收发函数,而达到拦截网络数据的目的。 获 得NDIS_PROTOCOL_BLOCK指针的方法一般是用NdisRegisterProtocol注...

weixin_30417487的博客 248

AI Agent在医疗诊断中的智能应用研究

本文探讨了AIAgent在医疗诊断中的智能应用,分析了其技术原理、实际案例及发展挑战。AIAgent通过机器学习算法处理医疗数据,提升诊断准确性和效率,市场规模预计2025年达200亿美元。核心技术包括数据预处理、深度学习模型和隐私保护方法。应用案例涵盖肺癌筛查、阿尔茨海默病预测等,但面临数据偏差、伦理责任等挑战。未来趋势包括多模态学习、个性化医疗和量子计算融合。随着技术优化和伦理完善,AIAgent将成为医疗体系的重要组成部分。

郑伟强dev的专栏 96

基于NDIS(网络驱动接口标准)包拦截技术

看了很多提供数据包的拦截技术,其中最多的是编写IM DRIVER在NDIS中间层对MINIPORT(网卡驱动程序)和协议驱动程序之间的数据包进行拦截。但编写该过滤程序拦截程序非常的复杂,这里介绍一种更有效的基于NDIS包拦截技术……  通常用户都知道,NDIS协议驱动程序是通过填写一张NDIS_PROTOCOL_CHARACTERISTICS的表,并调用NDIS API函数NdisRe

深未来技术 901

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【转帖】基于NDIS(网络驱动接口标准)包拦截技术

   通常用户都知道,NDIS协议驱动程序是通过填写一张NDIS_PROTOCOL_CHARACTERISTICS的表,并调用NDIS API函数NdisRegisterProtocol进行注册。现在我们来关注一下NDIS_PROTOCOL_CHARACTERISTICS这张表,这张表中存有所有协议驱动程序与底层的派发函数的入口。如SendHandler,ReceiveHandler,Bind

floweronwarmbed的专栏 808

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

NDIS驱动学习笔记

<br />http://bbs.pediy.com/showthread.php?t=65053<br />NDIS驱动学习笔记<br />by ufphpc<br />小弟看了大牛们众多文章,而自己还没写过什么东西,并不是不想写,实在是和大牛们差距太大,今天小弟把学习NDIS驱动贴出来,希望大牛们给指正。<br /><br /><br />从Ndis Intermediate Miniport driver说吧,参考passthru<br /><br />NTSTATUS<br />DriverEntr

HTTP 404 1356

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

FAKE PROTOCOL NDIS hook 支持拨号的选项

NDIS 支持拨号的选项几年前写 NDIS HOOK,为了支持 NT 4 与 WIN 2K 的拨号定义的一些结构。当时采用的是 FAKE PROTOCOL 方式, 除了一些拨号声明外其他都一样。//Win2K dial network handlerWAN_RECEIVE_HANDLER                g_h2KWanReceive ;RECEIVE_PACKET_HANDLER 

1492

探索NDIS HOOK新的实现方法(1)

NDIS HOOK是专业级防火墙使用的一种拦截技术,NDIS HOOK的重点是如何获得特定协议对应NDIS_PROTOCOL_BLOCK指针,获得了该指针,接下来就可以替换该协议所注册的收发函数,而达到拦截网络数据的目的。 获 得NDIS_PROTOCOL_BLOCK指针的方法一般是用NdisRegisterProtocol注册一个新的协议,所获得的协议句柄实际上就是一...

aiyun1234的博客 127

网络数据包拦截通用技术

网络数据包拦截通用技术 作者:甘嘉平 (gjp)看到很多仁兄提供的数据包的拦截技术,其中最多的是编写IM DRIVER在NDIS中间层 对MINIPORT(网卡驱动程序)和协议驱动程序之间的数据包进行拦截。这是微软提供的一种技术 但编写该过滤程序拦截程序非常的复杂,安装也很麻烦。 本人简单的介绍一种更有效的基于NDIS包拦截技术。 大家都知道,NDIS协议驱动程序是通过填写一张NDIS_PROTO

ENDLESS 7779

NDIS WIN7 64 WINXP hook网络发包收包

转: 网上有很多讨论关于NDIS HOOK的文章,但大多只讲了WIN7之前的HOOK NDIS_OPEN_BLOCK下的例程,至于WIN7下怎么 HOOK以及如何做MINIPORT-HOOK,网络上则鲜有提及.根据前阵子的相关分析,我把NDIS HOOK总结一下,网上有一些讨论 NDIS HOOK的文章,请读者先阅读那些文章对NDIS HOOK有个基本了解. [0x01...

ace0580的博客 272

Reactos 第 10 章 网络操作 — 10.2 NDIS及其实现

摘要: 本节深入解析NDIS(网络驱动接口规范)库的设计与实现,作为协议驱动与网卡驱动的中间层。NDIS通过Miniport、IM和Protocol三套标准接口实现解耦,核心架构包括四个抽象层:硬件抽象层、包管理层、绑定管理层和协议无关层。ReactOS的NDIS实现采用模块化设计,包含12个主要功能模块,维护三个关键全局链表(协议、驱动、适配器)并实现严格的同步机制。NDIS采用异步发送模型和批量接收优化,通过内存池提升性能,同时遵循分层IRQL规则确保系统稳定性。文章详细阐述了NDIS与内核子系统的交互

大坡3D软件开发 592

探索NDIS HOOK新的实现方法

NDIS HOOK是专业级防火墙使用的一种拦截技术,NDIS HOOK的重点是如何获得特定协议对应NDIS_PROTOCOL_BLOCK指针,获得了该指针,接下来就可以替换该协议所注册的收发函数,而达到拦截网络数据的目的。获得NDIS_PROTOCOL_BLOCK指针的方法一般是用NdisRegisterProtocol注册一个新的协议,所获得的协议句柄实际上就是一个NDIS_PROTOCOL

jia_xiaoxin的专栏 794
上一篇: Hooking into NDIS and TDI-part 1
下一篇: windows下tcp ip栈的实现
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值