![]() |
1
15
我认为它们在性能(和结果)方面几乎相同,因为它们都调用相同的底层NT API,尽管CreateToolhelp32Snapshot()在创建一个section对象并将所有信息复制到其中时可能会有一点开销,而EnumProcesses()/EnumProcessModules()直接使用用户提供的缓冲区。不过,在现实世界中,这种差异可能可以忽略不计。 我稍微喜欢EnumProcesses(),因为它(IMO)是一个更简单的API,但是如果需要,CreateToolhelp32Snapshot()会返回更多信息。EnumProcesses()的唯一缺点是,您应该在循环中调用它,因为您可能没有分配足够大的缓冲区;CreateToolhelp32Snapshot()负责缓冲区管理。实际上,我只是在堆栈上分配一个足够容纳1024个进程id或模块句柄的缓冲区;到目前为止,我还没有遇到一个系统,在这个系统中,这些限制甚至在远程接近达到。当然,不久前我们对麦克斯路径也说过同样的话,现在我们遇到了这个问题。。。 |
![]() |
2
15
结果是10次单函数调用的循环。它们在每次运行时都是100%可重复的。 对于CreateToolhelp32Snapshot,主要结果是CreateToolhelp32Snapshot本身的调用,第二个结果(括号中)是使用First/Next循环。 我认为人们混淆了“枚举所有进程”(get PIDs)和“获取进程/exe的名称”。第一个(“枚举”)与x32/x64交叉位没有任何问题。但是后一个(“get name”)确实有问题——不是每个方法都能在x32/x64上工作。 |
|
3
5
我不太记得了,但与CreateToolhelp32Snapshot()不同,EnumProcesses()有两个或两个限制之一: 2。不枚举Vista和Win7上提升的进程。 |
|
4
4
EnumProcesses不会枚举所有系统进程,至少在Win XP上不会枚举svchost.exe的所有实例。 |
![]() |
5
1
|
|
vini · 安装wfp内核驱动程序后,devcon状态返回39 3 年前 |
![]() |
I101I · 如何镜像HBITMAP 3 年前 |
![]() |
E235 · 如何查看谁创建了Windows NamedPipe 3 年前 |
![]() |
Pizza Ãcke · 创建带有内存映像的Windows托盘图标 3 年前 |
![]() |
Jabu · 如何获取列表框滚动条“拇指”的高度? 3 年前 |
![]() |
tree1234 · 对可执行文件进行代码设计,并允许修改某些字节 3 年前 |
![]() |
Penachia · PDF FontDescriptor标志 7 年前 |