问题标签 [etw]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - Windows ETW:StartTrace 失败并出现错误 87 (ERROR_INVALID_PARAMETER)
我正在调用 Windows 的事件跟踪StartTrace
功能:
它失败,错误代码为 87 ( ERROR_INVALID_PARAMETER
)。MSDN 给出了导致此错误的一些常见原因:
- 属性为NULL。
- 会话句柄是NULL。
- Properties的LogFileNameOffset成员无效。
- Properties的LoggerNameOffset成员无效。
- Properties的LogFileMode成员指定了无效的标志组合。
- Wnode.Guid成员是SystemTraceControlGuid,但SessionName参数不是KERNEL_LOGGER_NAME 。
我正在调用的代码是:
我的电话的语言不可知版本:
其中TraceHandle
指向一个 64 位整数:
并且InstanceName
是一个指向以 null 结尾的 ansi 字符串的指针:
并且Properties
是指向EVENT_TRACE_PROPERTIES
结构的指针,我将避免复制完整的十六进制转储
重要的值是两个偏移量:
其中还包含有效的以 null 结尾的 ansi 字符串,它们应该:
“NT 内核记录器”:
“C:\Users\Ian\foo.etl”:
为什么我的参数不正确?
奖金阅读
更新:
会话参数:
分解为:
如果有对齐问题,我将无法单独发现它。
结构:
随着:
delphi - Windows ETW:内核使用者未收到任何 EventCallback 或 BufferCallback 事件
我正在尝试收听 ETW 内核事件。
第 1 步:调用
/li>OpenTrace
,指定在调用过程中将调用的EventCallback
可选BufferCallback
函数ProcessTrace
:第 2 步:启用内核事件。这是通过调用来完成的
StartTrace
。在我的情况下,我想跟踪内核中断(EVENT_TRACE_FLAG_INTERRUPT
)和延迟过程调用(EVENT_TRACE_FLAG_DPC
):并且日志已成功启动(我可以看到
foo.etl
开始增长到其 5 MB 循环限制)。第 3 步:调用
/li>ProcessTrace
,它会一直阻塞,直到将所有未决事件传递给EventCallback
第 1 步中指定的处理程序:
除了ProcessTrace
立即重复返回,并且没有调用回调 - 即使 etl 文件存在并且正在增长。
如果我将日志记录从基于文件更改为实时日志记录:
第 1 步 -
/li>OpenTrace
更改以支持实时:第 2 步 -
/li>StartTrace
更改以支持实时:
在这种情况下,ProcessTrace
永远不会返回,但也不会EventCallback
或BufferCallback
从未被调用过。
我究竟做错了什么?
更新:我的回调函数:
windows - 将 ETW 事件消耗到套接字/命名管道中
我有一个创建 ETW 事件的应用程序。到目前为止,我使用实时记录器和文件记录器来处理它的事件。
我想知道 - 是否可以将事件消耗到打开的套接字/命名管道中?
请注意,使用 logman 的远程机器使用 ETW 不是我想要的。
提前致谢,
塔尔。
windows - 警告 - 运行 wevtutil 时无法访问提供程序资源
我需要帮助解决在尝试创建 Windows 事件提供程序时无法访问的“提供程序”资源。我使用 ManGen 实用程序创建清单文件,并将我的“.exe”文件命名为我的消息和资源文件。我编译“生成带有我的 exe 文件的 .rc 文件和预期的 .res 文件。但是,当我运行 wevtutil 时,我不断收到“资源不可访问”警告。
macros - ETW 宏 DoTraceMessage、WPP_CLEANUP、WPP_INIT_TRACING 的定义?
使用Windows事件跟踪(ETW) 的Windows 软件跟踪预处理器(WPP) 组件时,您必须包含一个包含 3 个宏的文件:
WPP_INIT_TRACING
宏激活软件跟踪DoTraceMessage
用于记录跟踪消息的宏WPP_CLEANUP
宏禁用软件跟踪
当您将以下内容添加到源文件的底部时,会自动生成包含这些宏的包含文件:
由于这些东西是宏,它们实际上扩展为做其他事情。我需要一个这些宏扩展的例子。
我需要这些生成的宏的示例的原因是我没有 Visual Studio,也没有使用 C/C++ 编写或使用 Microsoft 编译器。
奖金喋喋不休。Microsoft SDK 提供了一个包含宏定义的示例包含文件 (tracedrv.tmh
) 。
delphi - EnumerateTraceGuids 返回“参数不正确” (87)
我正在尝试调用 Windows API 函数EnumerateTraceGuids:
从MSDN 上的代码示例开始:
我将代码转换为Delphi:
使用 api 调用:
我得到结果代码ERROR_INVALID_PARAMETER
(87,参数不正确)。
我究竟做错了什么?
MSDN 描述了会导致什么ERROR_INVALID_PARAMETER
:
ERROR_INVALID_PARAMETER
以下情况之一为真:
- PropertyArrayCount 为零
- GuidPropertiesArray 为 NULL
第一种情况是正确的,我的第二个参数PropertyArrayCount
为零- 就像样本所说的那样。
.net - .NET 的性能和监控工具
识别 Windows/Web 应用程序性能的监控和诊断的不同方法是什么(我需要 Microsoft 提供的工具/应用程序,而不是第三方工具)。
提前致谢!
windows - 如何使用来自 Microsoft-Windows-NDIS-PacketCapture 提供程序的实时 ETW 事件?
更大的问题是一般如何使用实时 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 会话。在属性结构 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, NULL); 其中 hSession 是使用 StartTrace 启动的会话,Current_Guid 是
{0x2ED6006E,0x4729,0x4609,{0xB4,0x23,0x3E,0xE7,0xBC,0xD6,0x78,0xEF}};
然后使用 LoggerName = 某个宽字符串、LogFileName = NULL 和 LogFileMode = EVENT_TRACE_REAL_TIME_MODE 调用 OpenTrace;
最后在上面刚刚打开的跟踪句柄上调用 ProcessTrace。
同样,让其他所有内容与 MSDN 示例中提供的相同
使用相同的代码将提供程序更改为其他任何内容,例如 Microsoft-Windows-Winsock-AFD 或 Microsoft-Windows-TCPIP让我调用我定义的记录回调(但是,我仍然无法检索属性,但我不会进一步深入研究以使这个问题尽可能简单)。当我使用 NDIS-PC 时,我收到 0 个回调。我尝试使用 ControlTrace 手动刷新但没有任何成功。我也尝试过定义“EventCallback”而不是“EventRecordCallback”,但没有成功。
我查看了此过程中涉及的所有数据结构,并在每个提供者之间进行了比较,它们看起来都正确且相同。我查看了函数的所有返回值和返回的数据结构,它们在我尝试过的提供程序之间看起来也一样。
我通过调用“logman”My Trace Session 04“-ets”查看了会话属性,它对于 NDIS-PC 和 TCPIP 看起来相同:
C:\windows\system32>logman“我的跟踪会话 04”-ets
名称:我的跟踪会话 04 状态:
运行根路径:%systemdrive%\PerfLogs\Admin 段:
关闭计划:开启名称:我的跟踪会话 04\我的跟踪会话 04 类型:
跟踪追加:关闭循环:关闭覆盖:
关闭缓冲区大小:64 缓冲区丢失:0 缓冲区写入:0 缓冲区刷新计时器:1 时钟类型:性能文件模式:实时提供者:名称:Microsoft-Windows-NDIS-PacketCapture 提供者指南:{2ED6006E-4729-4609-B423-3EE7BCD678EF} 级别:
5(获胜:详细)关键字全部:0x0 关键字任意:
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, 0x400000000000000,0x80000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000英尺0000000,000000000000,0000000000,0000000000,0000000000,000000000000000000000000英尺0000000000000000000000000000000000000000000000000000000英尺。0x4000000000000000) 属性:0 过滤器类型:0命令成功完成。
我也尝试过使用 logman 手动启动会话,然后在代码中打开它进行处理,但这对我也不起作用。我也尝试只写入一个 ETL 文件,但这也不起作用。我尝试了更多的东西,但没有任何效果。
我已经吞噬了 Internet 上与实时 ETW 消费(MSDN、Google 搜索、Stackoverflow 等)有关的所有内容,但我还没有看到一个完整的实时 ETW 事件消费示例。所有示例都显示来自 ETL 文件的事件消耗或将记录的事件导出到 ETL 文件,然后只是说进行一些参数更改以使实时消耗工作。我相信我上面总结的代码更改反映了这些更改。
我在 Win7 Ultimate 上使用 VS2010 SP1 创建 32 位控制台应用程序。我也尝试过创建 64 位应用程序,但没有任何改进。
以下两个帖子是相关的,但在我尝试/强制执行时对我没有任何影响。在实时模式下,代码将会话名称复制到属性结构的末尾,并且日志文件偏移量无论如何都需要为 0。我认为我没有任何对齐问题,因为所有其他提供商都可以正常工作:
Windows ETW:内核使用者未收到任何 EventCallback 或 BufferCallback 事件 Windows ETW:StartTrace 失败并出现错误 87 (ERROR_INVALID_PARAMETER)
我觉得我错过了一些小而琐碎的东西,这应该可以工作。我会很感激任何帮助。
.net - 为什么在 EventLog 上使用 ETW,反之亦然?
为什么我应该在标准的 .NET EventLog 类上使用Windows 事件跟踪 (ETW),反之亦然?知道我们将使用相当多的性能计数器会影响决策吗?
到目前为止我所知道的:
- ETW 应该表现得更好。
- ETW 需要集成更多的工作(例如.NET Event Tracing for Windows)
- 通过选择 ETW 中的标准通道之一(例如应用程序、系统),事件日志中会提供相同的信息。
c# - 插入日志事件时,TimeCreated 字段不够准确
我正在尝试使用 .net framework 4 将应用程序日志记录到 c# 中的 windows 事件日志,但是当我插入日志条目时,TimeCreated 字段(事件查看器 -> Windows 日志 -> 应用程序 -> -> 详细信息 -> 友好视图-> System) 获得类似的值
如您所见,缺少亚秒级精度,尽管我可以在查看器中看到一些其他事件,其中“。”之后也有数字。表示更精确的时间戳。
这是 .Net Framework/CLR/C# 的某种限制,还是我做错了什么?
谢谢。
VS2010SP1,Win7/Server 2008 R2环境。
更新:
我可以提到我已经尝试过
和 log4net 的 EventLogAppender 到目前为止。
更新 2:
因此,使用 ETW 将事件插入事件日志实际上会产生 SystemTime 具有亚秒级分辨率的事件。难道这实际上是必要的,对我的情况来说感觉有点过分了。