c++ - 如何为 TraceLogging 提供者(内核)创建实时 etw 消费者?
问题描述
我正在尝试为在驱动程序中声明的TraceLogging提供程序创建实时消费者:
TRACELOGGING_DECLARE_PROVIDER(g_etwProvider);
TRACELOGGING_DEFINE_PROVIDER(g_etwProvider, "TraceLoggingProvider",
(/*my guid*/));
用户模式提供者:
EVENT_TRACE_LOGFILEA etwTraceSettings{};
char loggerName[]{"TraceLoggingProvider"};
etwTraceSettings.LoggerName = loggerName;
etwTraceSettings.ProcessTraceMode = PROCESS_TRACE_MODE_REAL_TIME | PROCESS_TRACE_MODE_EVENT_RECORD;
etwTraceSettings.EventRecordCallback = MyCallback;
TRACEHANDLE traceHandle = OpenTraceA(&etwTraceSettings);
ProcessTrace(&traceHandle, 1, nullptr, nullptr);
ProcessTrace返回ERROR_WMI_INSTANCE_NOT_FOUND
。我究竟做错了什么?我试着在驱动程序ProcessTrace
之前和之后打电话。TraceLoggingRegister
结果是一样的。
并且,例如,logman可以在提供者注册之前创建会话。我也想这样做。我应该做什么?
解决方案
OpenTrace
您必须先通过StartTrace和EnableTrace函数创建 ETW 会话。
推荐阅读
- python - 无法解压不可迭代的 int 对象
- python - 如何将辅助 python 文件上传到谷歌云平台?
- google-apps-script - 即使 logger.log 确认了他们的数据,谷歌网络应用服务器也会返回 null
- ibm-cloud - Watson 服务的监控和日志记录
- css - 如何通过 SCSS 导入和使用 Bulma 框架,但不将其所有内容导出到 CSS
- gradle - 如何调用带有参数的jar中的gradle任务
- python - 当对象与表单字段名称不匹配时,在 Flask 视图中填充 WTForm FormField
- php - 使用正则表达式在一行之后一直选择到另一行上的特定单词
- uiwebview - UIWebview 无法访问相机或照片
- java - 子字符串删除 2 个字符而不是 1 个