我需要使用什么流程API来跟踪服务?

时间:2011-09-20 15:33:07

标签: windows windows-services

我需要在Windows中的服务或应用程序启动,停止以及是否成功退出或使用错误代码时跟踪日志。

我知道许多服务没有记录自己的启动和停止时间,或者它们是否正确退出,所以似乎要走的路必须在API中插入一个钩子,当服务/应用程序请求时处理空间并放弃它。

我的问题是为了实现这个目的,我需要挂钩什么功能,甚至可能吗?我需要它在Windows XP和7上工作,都是64位。

3 个答案:

答案 0 :(得分:3)

Windows Vista有NotifyServiceStatusChange(),但仅适用于单一服务。在早期版本中,除了轮询更改或观看事件日志之外,它是不可能的。

答案 1 :(得分:3)

我认为您最好的选择是使用设备驱动程序。请参阅PsSetCreateProcessNotifyRoutine

答案 2 :(得分:0)

如果您正在寻找用户空间解决方案,EnumProcesses()将返回当前列表。但是它不会发出变化的信号,你必须不断地对它进行轮询并根据差异采取行动。

如果您正在关注特定应用程序或一组应用程序,请考虑将它们分配给作业对象,这些都是允许您对流程进行限制并在外部进行管理。我认为您甚至可以将Explorer与作业对象相关联,然后用户启动的所有任务将自动与您的作业对象相关联。或许可以看一些东西。