Java 通过WMI查询事件日志和DCOM的性质

Java 通过WMI查询事件日志和DCOM的性质,java,wmi,dcom,event-log,Java,Wmi,Dcom,Event Log,首先是一些背景: 我当前正在使用j-interop查询从Linux设备到Windows设备的WMI调用,我正在对WMI运行此查询: SELECT * FROM __InstanceCreationEvent WHERE TargetInstance ISA 'Win32_NTLogEvent' 并将其作为通知查询执行,以便在创建数据后立即将其取回。然而,这在(罕见的)情况下证明是一个问题 比方说,当用户更改根文件夹的权限时,我可能会被成千上万的日志淹没,系统可以很好地处理这个问题,java和互

首先是一些背景:

我当前正在使用j-interop查询从Linux设备到Windows设备的WMI调用,我正在对WMI运行此查询:

SELECT * FROM __InstanceCreationEvent WHERE TargetInstance ISA 'Win32_NTLogEvent'
并将其作为通知查询执行,以便在创建数据后立即将其取回。然而,这在(罕见的)情况下证明是一个问题

比方说,当用户更改根文件夹的权限时,我可能会被成千上万的日志淹没,系统可以很好地处理这个问题,java和互操作代码都很高兴,但是WMI周期似乎是这样的:

Hook into event
while(forever)
{
    Query server for next event.
    Do work with event.
}
显然,这对我来说不起作用,因为我会从服务器上来回跳转数千次,程序不会阻塞,但肯定要花很长时间,我无法找到让事件返回所有未决事件的方法(我想)

下一个选择是跟踪WMI返回的最后一个记录ID,并对其记录ID大于最后一个的所有事件执行直接查询,我假设这将更好地工作,但是我不熟悉DCOM

那么我的问题是:


如果我运行ExecQuery而不是通知查询,由于分布式COM的性质,我是否必须在客户端/服务器之间来回跳舞,以迭代查询返回的每个记录?

这里的主要解决方案是不为此使用DCOM,它的效率非常低,而且我已经让服务器在执行大量DCOM指令时承受了相当大的CPU压力

我正在研究Windows RPC Java实现,如果我想远程实现,或者本地实现WinAPI