检测win32服务创建和删除的最佳方法

best method to detect win32 services creation and deletion

本文关键字:最佳 方法 删除 win32 服务 创建 检测      更新时间:2023-10-16

我正在尝试构建一个使用c来监控服务的工具++我想在不连续使用EnumServicesStatusExW的情况下检测新添加的服务和服务的删除,并将结果数组与前一个进行比较

所以我使用了两个函数SubscribeServiceChangeNotifications,NotifyServiceStatusChangeA

我不知道哪个更好用,我在ProcessHacker的导入中看到了,但在导入中没有发现任何一个,所以我认为ph使用了不同的方法

SubscribeServiceChangeNotifications()可以使用SC_EVENT_DATABASE_CHANGE事件类型检测正在添加和删除的服务。此方法在Windows 8及更高版本中可用。

NotifyServiceStatusChange()还可以使用SERVICE_NOTIFY_CREATEDSERVICE_NOTIFY_DELETED通知掩码来检测正在添加和删除的服务。此方法在Windows Vista及更高版本中可用。

否则,您可以监视HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices注册表项的子项更改,例如使用REG_NOTIFY_CHANGE_NAME筛选器的RegNotifyChangeKeyValue()。此方法在Windows 2000及更高版本中可用。

因此,与其说是"哪种方法最好",不如说是"哪个方法适合我的应用程序运行的Windows版本"。你的应用程序可以利用这三种方法。通过GetProcAddress()动态加载,或者编译器的延迟加载功能(如果有(,您可以在运行时检查DLL函数的存在,并采取相应的行动。如果SubscribeServiceChangeNotifications()存在,则使用它;否则,如果NotifyServiceStatusChange()存在则使用它,否则,如果存在RegNotifyChangeKeyValue()则使用它。