- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
各位,我正在将 WinPcap 从 NDIS6 协议(protocol)移植到 NDIS6 过滤器。快完成了,但我还有一些问题:
ndislwf 的评论说“不提供 FilerSendNetBufferList 处理程序的过滤器无法自行发起发送。”这是否意味着如果我使用 NdisFSendNetBufferLists 函数,我必须提供 FilerSendNetBufferList 处理程序?我的驱动会通过NdisFSendNetBufferLists发送自建的数据包,但我不想过滤其他程序发送的数据包。
与 FilterReturnNetBufferLists 相同,它表示“不提供 FilterReturnNetBufferLists 处理程序的过滤器无法自行发起接收指示。”。 “发起接收指示”是什么意思? NdisFIndicateReceiveNetBufferLists 或 NdisFReturnNetBufferLists 或两者?另外,对于我的驱动程序,我只想捕获接收到的数据包而不是返回的数据包。因此,如果可能的话,我不想出于性能目的提供 FilterReturnNetBufferLists 函数。
另一个ressembled case是FilterOidRequestComplete和NdisFOidRequest,其实我的过滤驱动只想通过NdisFOidRequest自己发送Oid请求,而不是过滤别人发送的Oid请求。我可以将 FilterOidRequest、FilterCancelOidRequest 和 FilterOidRequestComplete 保留为 NULL 吗?或者哪一个是必须使用 NdisFOidRequest 的?
谢谢。
最佳答案
LWF 可以是:
这是一个全有或全无的模型。由于您想发送自己构建的数据包,因此您必须安装一个FilterSendNetBufferLists
处理程序和一个FilterSendNetBufferListsComplete
处理程序。如果您对其他协议(protocol)的流量不感兴趣,那么您的发送处理程序可以像示例的发送处理程序一样简单——只需将所有内容转储到 NdisFSendNetBufferLists
中而不查看它。
FilterSendNetBufferListsComplete
处理程序需要更加小心。遍历所有已完成的 NBL,并挑选出您发送的那些。您可以通过查看 NET_BUFFER_LIST::SourceHandle
来识别您发送的数据包。从流中删除它们(可能重用它们,或者只是 NdisFreeNetBufferList
它们)。所有其他数据包然后通过 NdisFSendNetBufferListsComplete
进入堆栈。
上述讨论也适用于接收路径。 send 和 receive 的唯一区别是在接收路径上,你必须密切注意 NDIS_RECEIVE_FLAGS_RESOURCES
旗帜。
与数据路径一样,如果你想完全参与 OID 请求(过滤或发布你自己的请求),你必须集成到整个 OID 堆栈中。这意味着您提供了 FilterOidRequest
、FilterOidRequestComplete
和 FilterCancelOidRequest
处理程序。除了示例之外,您不需要在这些处理程序中做任何特殊的事情,除了再次检测您的过滤器源自 oid-complete 处理程序的 OID 请求,并将它们从流中删除(调用 NdisFreeCloneOidRequest
在他们身上)。
不要担心这里的性能。第一步是让它工作。即使示例过滤器将自身插入到发送、接收和 OID 路径中;几乎不可能想出任何类型的基准来检测样本过滤器的存在。在过滤器中使用什么都不做的处理程序是非常便宜的。
如果您对此有强烈的感觉,您可以通过调用 NdisFRestartFilter
和 NdisSetOptionalHandlers(NDIS_FILTER_PARTIAL_CHARACTERISTICS)
有选择地从数据路径中删除过滤器.但我绝对不认为你需要复杂性。如果您使用的是在混杂模式下捕获的 NDIS 5 协议(protocol),那么通过切换到 native 网络数据结构 (NDIS_PACKET->NBL) 并消除环回路径,您已经获得了很大的性能改进。您可以将额外的微调留到下一个版本。
关于c - FilterSendNetBufferLists 处理程序是否是 NDIS 过滤器使用 NdisFSendNetBufferLists 所必需的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18180150/
我有 NDIS 6.2 支持微型端口驱动程序。现在我想将 NDIS 6.2 移植到 NDIS 6.3 。 https://msdn.microsoft.com/en-us/library/window
NDIS 6.0 和 NDIS 6.30 之间的主要区别是什么?这是我知道的信息, 在 NDIS 6.0 的情况下,没有像 WWAN 媒体那样的东西。 WWAN 特定的 OID 在 NDIS 6.0
我目前正在尝试使用来自 windows driver samples 的 NDIS 过滤器驱动程序发送我自己的数据包. 我想我必须用函数 FilterSendNetBufferLists 发送数据包.
我正在尝试使用 Visual Studio 2012 中提供的 WDK 工具修改以太网驱动程序。 WDK 中提供的示例包括“微型端口适配器”和“NDIS 轻型过滤器”等。我仍处于驱动程序编写的最初阶段
我正在编写一个程序 (C++),它将在 Windows 操作系统上使用 Wi-fi 检测我周围的设备。 为此,我正在使用 Netmon API,我需要将无线网络适配器切换到监控模式。 我读到 Netm
我知道我可以使用 Windows PowerShell Get-netadapter|选择名称,ndisversion 将结果输出到一个文本文件,并从那里解析数据,但这有点老套。我想知道是否有办法使用
我已经在 Windows 7/8 上构建并安装了 netvmini。而且我能够从一个 IP ping 到另一个 IP。但我对其下面列出的功能有一些疑问: 驱动程序放置在哪一层 w.r.t OSI 层。
我想在虚拟微型端口驱动程序上添加多播支持。我有一个过滤驱动程序绑定(bind)到每个物理 NIC 上。根据微软文档 https://msdn.microsoft.com/en-us/library/w
我正在尝试以编程方式编写 C++ 代码来安装 NDIS 6.0 轻量级筛选器驱动程序。在查看了 WinDDK、在线示例和 MSDN 文档之后,我最终得到了下面的代码示例。 (为清楚起见,跳过了错误处理
我正在尝试定义一些自定义事件查看器事件。我一直按照 MSDN 和其他一些在线资源中的说明进行操作,但事件查看器找不到关联的文本数据。 这是我所做的: 为带有事件代码和相关字符串的消息编译器创建了一个输
我正在编写一个 Windows NDIS 过滤器驱动程序,并希望能够从内核内部查询有关 tcp 端口的状态(是否正在使用?)。当驱动程序处于 IRQL = dispatch_level 时,我可以使用
我使用 NdisRegisterProtocol() 来注册协议(protocol)驱动程序,并使用 _NDIS_OPEN_BLOCK 和 _NDIS_PROTOCOL_BLOCK 结构来 Hook
我是 WDD 的初学者。我需要制作一个网络驱动程序过滤器,根据签名丢弃某些数据包,以保护系统免受程序漏洞的影响。现在,我只是想获取我需要的数据包并找到我的签名。我使用 Metasploit Frame
背景:我需要创建一个 NDIS 过滤器中间驱动程序。该驱动程序将在收集元数据(主要是时间信息)的同时传递所有流量。驱动程序将通过插入自己的包含元数据的数据包并将它们向上传递到堆栈,将此信息导出到用户应
我正在 Linux 中开发一个尽可能接近实时的系统,并且需要在收到特定数据包后立即在 TCP 数据包中发送大约 600-800 字节。 为了获得尽可能好的延迟,我希望这个数据包直接从内核发送,而不是接
我正在开发本质上是专门的防火墙应用程序。该解决方案需要兼容 32 位和 64 位。我的公司想保留当前的程序界面,它是用 C# 编写的。 我需要的是:一种监视和操纵系统上所有网络流量的方法。我的研究使我
我正在开发 WinPcap,一个 NDIS 轻量级过滤器 驱动程序。为了捕获环回数据包,我还制作了一个Windows Filtering Platform (WFP) callout驱动程序。我已将这
大家。又是我,那个将 WinPcap 从 NDIS 6 协议(protocol)移植到 NDIS 6 过滤器的人:) 我遇到了一个 bug,困了我两天。是这样的:我安装了npf6x.sys驱动程序(原
我尝试开发 NDIS lwf 驱动程序来过滤特定数据包。 我成功在Windows 10中运行了我开发的驱动程序,这是用于调试的测试模式。 我将窗口测试模式更改为正常模式,然后在非测试模式的窗口中运行驱
我正在学习 Windows NDIS 中级 (IM) 驱动程序开发。我在安装时遇到问题。我总是需要手动安装它。 我的问题是如何以编程方式安装 NDIS 中间 (IM) 驱动程序 问候 纳瓦尼思 最佳答
我是一名优秀的程序员,十分优秀!