我目前正在编写一个通过 ETW 跟踪功能使用 NT Kernel Logger 的应用程序。它以实时模式消耗。它在我的 Windows 7 测试机器上运行良好,但在我的 XP VM 上,我经常遇到内存不足的异常。
使用 APIMonitor(顺便说一句,令人惊叹的工具),我将其追踪到使用 ProcessTrace() Win32 API 调用本身对 NtAllocateVirtualMemory() 的调用。它正在尝试分配 1GB 的连续内存,如屏幕截图所示。
有没有人遇到过这个?我无法想象为什么它需要分配这么多内存。此外,由于调用发生在未记录的 Win32 API 函数 (WmiMofEnumerateResourcesA()) 中的 ProcessTrace() 调用堆栈的深处,看来我真的无法影响它。有没有人遇到过这个?我会很感激任何潜在的解决方案。
我需要支持 XP/2003 和 32 位版本,我真的不能假设 1GB 的连续内存可用。实时处理也是一项要求。但是,我可以考虑使用不涉及丢失事件的文件支持日志记录的任何解决方法,例如,如果可能的话,我将“实时”处理添加到 .ETL 文件中的新事件。