- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
更大的问题是一般如何使用实时 ETW 网络堆栈事件,但我对 Microsoft-Windows-NDIS-PacketCapture 提供程序 特别感兴趣。所有其他网络堆栈提供程序部分工作,但 NDIS-PacketCapture (NDIS-PC) 根本不工作,所以这可能是我在这里可以问的最简单的问题。
我使用下面的代码作为基础,并进行了很少的修改以使其实时工作: http://msdn.microsoft.com/en-us/library/windows/desktop/ee441325(v=vs.85).aspx
我所做的更改是:
在执行任何操作之前调用 StartTrace 启动 NDIS-PC session 别的。在属性结构 EVENT_TRACE_PROPERTIES 中,设置LogFileMode = EVENT_TRACE_REAL_TIME_MODE,LogFileNameOffset = 0,和 Wnode.Guid = 我编造的随机 GUID。
调用状态 = EnableTraceEx2(hSession, &Current_Guid,EVENT_CONTROL_CODE_ENABLE_PROVIDER, TRACE_LEVEL_VERBOSE, 0, 0, 0, 无效的);其中 hSession 是使用 StartTrace 开始的 session ,并且 Current_Guid 是
{0x2ED6006E,0x4729,0x4609,{0xB4,0x23,0x3E,0xE7,0xBC,0xD6,0x78,0xEF}};
然后使用 LoggerName = 一些宽字符串调用 OpenTrace,LogFileName = NULL,并且 LogFileMode = EVENT_TRACE_REAL_TIME_MODE;
最后在刚刚打开的跟踪句柄上调用 ProcessTrace以上。
同样,其他一切都与 MSDN 示例中提供的相同
使用相同的代码,只需将提供程序更改到其他任何东西,例如 Microsoft-Windows-Winsock-AFD 或 Microsoft-Windows-TCPIP 让我调用我定义的记录回调(但是,我仍然无法检索属性,但我不会进一步深入研究以尽可能简单地保持这个概率)。当我使用 NDIS-PC 时,我得到 0 个回调。我尝试使用 ControlTrace 手动刷新但没有成功。我也尝试过定义“EventCallback”而不是“EventRecordCallback”,但没有成功。
我查看了此过程中涉及的所有数据结构,并在每个提供者之间进行了比较,它们看起来都是正确且相同的。我查看了函数的所有返回值和返回的数据结构,它们在我尝试过的提供程序之间看起来也一样。
我通过调用“logman“My Trace Session 04”-ets”查看了 session 属性,它看起来与 NDIS-PC 和 TCPIP 相同:
C:\windows\system32>logman "My Trace Session 04" -ets
Name: My Trace Session 04 Status:
Running Root Path: %systemdrive%\PerfLogs\Admin Segment:
Off Schedules: OnName: My Trace Session 04\My Trace Session 04 Type:
Trace Append: Off Circular: Off Overwrite:
Off Buffer Size: 64 Buffers Lost: 0 Buffers Written: 0 Buffer Flush Timer: 1 Clock Type: Performance File Mode: Real-timeProvider: Name: Microsoft-Windows-NDIS-PacketCapture Provider Guid: {2ED6006E-4729-4609-B423-3EE7BCD678EF} Level:
5 (win:Verbose) KeywordsAll: 0x0 KeywordsAny:
0xffffffffffffffff (Ethernet802.3,WirelessWAN,Tunnel,Nativ e802.11,PacketStart,PacketEnd,ut:SendPath,ut:ReceivePath,ut:L3ConnectPath,ut:L2C onnectPath,ut:ClosePath,ut:Authentication,ut:Configuration,ut:Global,ut:Dropped, ut:PiiPresent,ut:Packet,ut:Address,ut:StdTemplateHint,ut:StateTransition,win:Res ponseTime,Microsoft-Windows-NDIS-PacketCapture/Diagnostic,0x2,0x4,0x8,0x10,0x20, 0x40,0x80,0x100,0x400,0x800,0x1000,0x2000,0x4000,0x20000,0x40000,0x80000,0x10000 0,0x200000,0x400000,0x800000,0x1000000,0x2000000,0x4000000,0x8000000,0x10000000, 0x20000000,0x400000000000,0x800000000000,0x2000000000000,0x4000000000000,0x80000 00000000,0x10000000000000,0x20000000000000,0x40000000000000,0x80000000000000,0x1 00000000000000,0x200000000000000,0x400000000000000,0x800000000000000,0x100000000 0000000,0x2000000000000000,0x4000000000000000) Properties: 0 Filter Type: 0The command completed successfully.
我也尝试过使用 logman 手动启动 session ,然后在代码中打开它进行处理,但这对我也不起作用。我也试过只写入一个 ETL 文件,但这也不起作用。我尝试了很多其他方法,但没有任何效果。
我在 Internet 上浏览了与实时 ETW 使用相关的所有内容(MSDN、Google 搜索、Stackoverflow 等),但我还没有看到实时 ETW 事件的一个完整示例消费。所有示例都显示了 ETL 文件中的事件消耗或将记录的事件导出到 ETL 文件,然后只是说要进行一些参数更改以使实时消耗正常工作。我相信我上面总结的代码更改反射(reflect)了这些更改。
我在 Win7 Ultimate 上使用 VS2010 SP1 创建 32 位控制台应用程序。我也尝试过创建 64 位应用程序,但没有任何改进。
以下两个帖子是相关的,但在我尝试/执行时对我没有任何影响。在实时模式下,代码将 session 名称复制到属性结构的末尾,日志文件偏移无论如何都需要为 0。我认为我没有任何对齐问题,因为所有其他提供程序都工作得很好:
Windows ETW: Kernel consumer receives no EventCallback or BufferCallback events Windows ETW: StartTrace failing with error 87 (ERROR_INVALID_PARAMETER)
我觉得我遗漏了一些小而微不足道的东西,这应该可以工作。如果有任何帮助,我将不胜感激。
最佳答案
如果您查看“netsh trace”命令在内部执行的操作,您会发现它们将 NDIS 轻量级过滤器驱动程序附加到各种网络接口(interface)。只有附加并激活此过滤器后,您才能从该提供商处获得事件。该设施的详细信息未记录在案,可能会发生变化。 netsh 跟踪命令的所有逻辑都在 nettrace.dll 中实现,您可以借助 Microsoft 的公共(public)符号对其进行逆向工程。具体来说,CInboxCapture 类具有确定驱动程序是否已启动、将其绑定(bind)到适当的网络接口(interface)并启动它的代码。如果您按照 nettrace.dll 的方式启动捕获过滤器驱动程序,您将获得数据包捕获事件。
祝你好运。
关于windows - 如何使用来自 Microsoft-Windows-NDIS-PacketCapture 提供程序的实时 ETW 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9470135/
我在网上搜索但没有找到任何合适的文章解释如何使用 javascript 使用 WCF 服务,尤其是 WebScriptEndpoint。 任何人都可以对此给出任何指导吗? 谢谢 最佳答案 这是一篇关于
我正在编写一个将运行 Linux 命令的 C 程序,例如: cat/etc/passwd | grep 列表 |剪切-c 1-5 我没有任何结果 *这里 parent 等待第一个 child (chi
所以我正在尝试处理文件上传,然后将该文件作为二进制文件存储到数据库中。在我存储它之后,我尝试在给定的 URL 上提供文件。我似乎找不到适合这里的方法。我需要使用数据库,因为我使用 Google 应用引
我正在尝试制作一个宏,将下面的公式添加到单元格中,然后将其拖到整个列中并在 H 列中复制相同的公式 我想在 F 和 H 列中输入公式的数据 Range("F1").formula = "=IF(ISE
问题类似于this one ,但我想使用 OperatorPrecedenceParser 解析带有函数应用程序的表达式在 FParsec . 这是我的 AST: type Expression =
我想通过使用 sequelize 和 node.js 将这个查询更改为代码取决于在哪里 select COUNT(gender) as genderCount from customers where
我正在使用GNU bash,版本5.0.3(1)-发行版(x86_64-pc-linux-gnu),我想知道为什么简单的赋值语句会出现语法错误: #/bin/bash var1=/tmp
这里,为什么我的代码在 IE 中不起作用。我的代码适用于所有浏览器。没有问题。但是当我在 IE 上运行我的项目时,它发现错误。 而且我的 jquery 类和 insertadjacentHTMl 也不
我正在尝试更改标签的innerHTML。我无权访问该表单,因此无法编辑 HTML。标签具有的唯一标识符是“for”属性。 这是输入和标签的结构:
我有一个页面,我可以在其中返回用户帖子,可以使用一些 jquery 代码对这些帖子进行即时评论,在发布新评论后,我在帖子下插入新评论以及删除 按钮。问题是 Delete 按钮在新插入的元素上不起作用,
我有一个大约有 20 列的“管道分隔”文件。我只想使用 sha1sum 散列第一列,它是一个数字,如帐号,并按原样返回其余列。 使用 awk 或 sed 执行此操作的最佳方法是什么? Accounti
我需要将以下内容插入到我的表中...我的用户表有五列 id、用户名、密码、名称、条目。 (我还没有提交任何东西到条目中,我稍后会使用 php 来做)但由于某种原因我不断收到这个错误:#1054 - U
所以我试图有一个输入字段,我可以在其中输入任何字符,但然后将输入的值小写,删除任何非字母数字字符,留下“。”而不是空格。 例如,如果我输入: 地球的 70% 是水,-!*#$^^ & 30% 土地 输
我正在尝试做一些我认为非常简单的事情,但出于某种原因我没有得到想要的结果?我是 javascript 的新手,但对 java 有经验,所以我相信我没有使用某种正确的规则。 这是一个获取输入值、检查选择
我想使用 angularjs 从 mysql 数据库加载数据。 这就是应用程序的工作原理;用户登录,他们的用户名存储在 cookie 中。该用户名显示在主页上 我想获取这个值并通过 angularjs
我正在使用 autoLayout,我想在 UITableViewCell 上放置一个 UIlabel,它应该始终位于单元格的右侧和右侧的中心。 这就是我想要实现的目标 所以在这里你可以看到我正在谈论的
我需要与 MySql 等效的 elasticsearch 查询。我的 sql 查询: SELECT DISTINCT t.product_id AS id FROM tbl_sup_price t
我正在实现代码以使用 JSON。 func setup() { if let flickrURL = NSURL(string: "https://api.flickr.com/
我尝试使用for循环声明变量,然后测试cols和rols是否相同。如果是,它将运行递归函数。但是,我在 javascript 中执行 do 时遇到问题。有人可以帮忙吗? 现在,在比较 col.1 和
我举了一个我正在处理的问题的简短示例。 HTML代码: 1 2 3 CSS 代码: .BB a:hover{ color: #000; } .BB > li:after {
我是一名优秀的程序员,十分优秀!