wei_Y 发表于 2016-11-13 21:28:49

有没有直接获取系统进程的函数。

如题,有没有直接获取到系统进程的函数。

就是这些:


目前用的:

先获取所有的 进程名/pid。

然后用OpenProcess尝试打开,拒绝访问的包括一部分。

剩下的用GetModuleFileNameEx寻找目录,在Windows目录下的也是一部分。


有没有更好的方法?@无符号整形 @小甲鱼 @不二如是 @~风介~ @SixPy

无符号整形 发表于 2016-11-13 22:15:06

1.多个svchost进程其实是一个svchost.exe的多个实例
2.如果拒绝访问 尝试令牌提权 + 管理员权限
这里有C++代码(令牌提权)
http://m.blog.csdn.net/article/details?id=5772510

musilintan 发表于 2016-11-13 22:44:02

枚举进程,根据用户名判断是一个方案。或者你能在进程的属性字段中找到区分系统进程和用户进程的字段也可以。直接获取的API目前没有发现。。。

musilintan 发表于 2016-11-13 22:47:06

拒绝访问的一部分是你的权限不够,像2楼说的提升令牌可以访问。还有一种无法访问的是像杀毒软件的一些进程,会拒绝访问,可能是有保护。

wei_Y 发表于 2016-11-14 08:59:54

无符号整形 发表于 2016-11-13 22:15
1.多个svchost进程其实是一个svchost.exe的多个实例
2.如果拒绝访问 尝试令牌提权 + 管理员权限
这里有C+ ...

不是要提取,是要获取到哪些是 系统进程。

wei_Y 发表于 2016-11-14 09:02:30

musilintan 发表于 2016-11-13 22:44
枚举进程,根据用户名判断是一个方案。或者你能在进程的属性字段中找到区分系统进程和用户进程的字段也可以 ...

枚举进程好像只返回 pid?
EnumProcesses这个函数。

无符号整形 发表于 2016-11-14 11:58:57

wei_Y 发表于 2016-11-14 09:02
枚举进程好像只返回 pid?
EnumProcesses这个函数。

用ToolHelp32系列函数

musilintan 发表于 2016-11-14 23:40:10

wei_Y 发表于 2016-11-14 09:02
枚举进程好像只返回 pid?
EnumProcesses这个函数。

1.你有Pid了吧。
2.OpenProcessToken(),打开进程的访问令牌。TOKEN_QUERY。
3.GetTokenInformation(),获取令牌信息,TokenUser可以获得用户Sid。
4.有了Sid自然就能知道对应的用户名。
5.用户名都有了,还等着我给你写第5条啊。。。

wei_Y 发表于 2016-11-15 10:09:07

musilintan 发表于 2016-11-14 23:40
1.你有Pid了吧。
2.OpenProcessToken(),打开进程的访问令牌。TOKEN_QUERY。
3.GetTokenInformation() ...

嗯,这也是个方法,但是这个方法不比现在使用的简便。。
现在使用:
1. 获取名称/Pid   --- cmd命令。
2. OpenProcess打开,拒绝访问的 作为系统进程添加在列表里。
3. GetModuleFileNameEx寻找这个进程的目录,在Windows下的 也添加在列表里。

musilintan 发表于 2016-11-15 10:54:46

wei_Y 发表于 2016-11-15 10:09
嗯,这也是个方法,但是这个方法不比现在使用的简便。。
现在使用:
1. 获取名称/Pid   --- cmd命令。 ...

主要还是看你对系统进程的理解和需求。如果你说的这个方法可以达到你的需求,那这个方法也是可以的。其他的办法差别就是在于准确性和效率。最终看的就是结果的对比。只要能达到需求的就可以啦。

freeparty 发表于 2016-11-18 09:27:28

转到PSAPI页。
页: [1]
查看完整版本: 有没有直接获取系统进程的函数。