使用 procmon 记录更多事件

使用 procmon 记录更多事件

“进程监视器”的最大历史深度为 1.99 亿个事件。我需要记录大约 10 倍于此的数据。我不介意拆分数据,例如每小时一个新的数据集。有人知道怎么做吗?我猜是一个批处理文件,备份文件将进入按顺序命名的文件夹。有没有办法检测进程监视​​器是否已填满其历史深度以将其杀死,或者我只需要休眠?

答案1

是的,你必须编写脚本。我以前用 Procmon 做过类似的工作,但我的目标并不是捕获数十亿个事件。不过,这应该对你有帮助,除非你需要有人为你编写脚本:

创建每 5 分钟运行一次的 VBscript。任务计划程序可以帮助您实现这一点。

如果这是脚本第一次运行,则像这样启动 Procmon:

objShell.Run "Cmd /C " & PRM_ProcMonExe & " /quiet /minimized /AcceptEula /backingfile " & PRM_PMLDir & "Procmon" & subDir & ".pml"

然后在后续运行脚本时,测量 subDir 中所有 *.pml 文件的总大小。

If ProcMonTriggered = True And ProcMonTerminated = False Then
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFSO.GetFolder(PRM_PMLDir)
    Set objFiles = objFolder.Files
    For Each objItem In objFiles
        If UCase(objFSO.GetExtensionName(objItem.Name)) = "PML" Then
            totalPMLSize = totalPMLSize + objItem.Size
        End If
    Next
    If totalPMLSize > (PRM_PMLMaxSize * 1073741824) Then
        NQExt.CreateEvent PRM_TriggeredSev, "ProcMon Terminated", "AKP_NULL", gstrEventTarget, 0.0, "Process Monitor was terminated because the PML file reached the limit of " & PRM_PMLMaxSize & "GB." & vbCrlf & "Process Monitor cannot be triggered again until this script is re-deployed." & vbCrlf & "Please see KB " & PRM_KBArticle, "", 0, 0
        Set objShell = CreateObject("WScript.Shell")
        objShell.Run "Cmd /C " & PRM_ProcMonExe & " /AcceptEula /terminate"         
    End If
    If isObject(objFiles) Then Set objFiles = Nothing
    If isObject(objFolder) Then Set objFolder = Nothing
    If isObject(objShell) Then Set objShell = Nothing
    If isObject(objFSO) Then Set objFSO = Nothing
    ProcMonTerminated = True
End If

这不是专门针对您的情况而定制的。您必须对其进行调整。这是我很久以前为稍微不同的目的而写的东西。您要做的就是,如果自上次运行脚本以来,子目录中所有 *.pml 文件的大小加起来没有增加……那么您就知道是时候终止 Procmon 并启动一个新实例了。

重点是您必须使用 /terminate 参数正常终止 Procmon,而不仅仅是终止进程,否则日志将损坏且无法读取。

然后在新的 subDir 中启动 procmon 的新实例。发挥创造力,您可以创建具有增量名称的子目录,例如 subdir1、subdir2、subdir3 等。

编辑:另外,我以前从未运行过 Procmon 处理 2 亿个事件,所以我不知道它在达到 1.99 亿个事件后是否只是停留在那里什么也不做,或者它是否完全关闭。如果是后者,那么你的工作就简单多了。只需检查 Procmon.exe 是否仍在运行。如果没有,那么你就知道是时候在新的子目录下再次启动它了。

编辑:是的,我认为它一旦达到历史深度就会开始滚动......文件大小也是如此。

相关内容