程序如何判断另一个进程是否正在作为服务运行?
我有一个 Win32 程序,我可以直接监视另一个 Win32 进程。
我想找到一种方法让监控程序确定被监控的进程是否作为Win32服务运行。
并非所有服务都作为 SYSTEM 运行,也不是所有服务都将 services.exe 作为直接父级,因此我认为这些明显的技术不够强大。
需要明确的是,我正在寻找的是一种编写函数的方法:
bool isService(HANDLE aProcessHandle) { ... }
I have a Win32 program which I can direct to monitor another Win32 process.
I want to find a way for the monitoring program to determine if the monitored process is running as a Win32 service.
Not all services run as SYSTEM and not all services have services.exe as a direct parent, so I don't regard these obvious techniques as being robust enough.
To be clear, what I'm looking for is a way to write the function:
bool isService(HANDLE aProcessHandle) { ... }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用 WMI 轻松完成此操作。我意识到您没有指定 C#,但 WMI api 可以以非常相似的方式在所有平台上使用。
首先,我们需要一个形状像 Win32_Service 的对象
现在我们查询 WMI 服务。这里我只是拉所有服务。如果您有更具体的条件,只需修改查询
“Select * from Win32_Service”
现在您可以使用Linq 来查询
服务
。参考: http://msdn.microsoft.com/en-us/library/ ms974579.aspx
You can do this easily using WMI. I realize that you did not specify C#, but the WMI api is available on all platforms in quite similar fashion.
First we need an object shaped like a Win32_Service
Now we query WMI for services. Here I just pull all services. If you have more specific criteria, simply modify the query
"Select * from Win32_Service"
Now you can use Linq to query
services
.Reference: http://msdn.microsoft.com/en-us/library/ms974579.aspx