进程枚举之PSAPI函数
使用PSAPI (Process StatusAPI)函数
这是一种Windows NT/2000下的方法。核心是使用EnumProcesses函数。它的原型如下:
BOOL EnumProcesses(
__out DWORD *lpidProcess, // 用于保存所有进程的PID的数组
__in DWORD cb, // 上述数组的大小
__out DWORD *cbNeeded // PID数组中实际返回的(有效)字节数
);
当获得系统中所有进程的PID后,我们就可以使用OpenProcess函数打开指定的进程,再调用GetModuleBaseName获得该进程的名字,调用EnumProcessModules枚举该进程调用的所有模块,调用GetModuleFileNameEx获得模块文件的全路径。
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include "psapi.h"
#pragma comment(lib,"psapi.lib")
void PrintProcessNameAndID( DWORDprocessID )
{
TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");
//Get a handle to the process.
HANDLEhProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE,processID );
//Get the process name.
if(NULL != hProcess )
{
HMODULE hMod;
DWORD cbNeeded;
if( EnumProcessModules( hProcess, &hMod, sizeof(hMod),
&cbNeeded))
{
GetModuleBaseName(hProcess, hMod, szProcessName,
sizeof(szProcessName)/sizeof(TCHAR));
}
}
//Print the process name and identifier.
_tprintf(TEXT("%s (PID: %u)\n"),szProcessName, processID );
CloseHandle(hProcess );
}
void main( )
{
//Get the list of process identifiers.
DWORD aProcesses[1024], cbNeeded, cProcesses;
unsigned int i;
if( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
return;
//Calculate how many process identifiers were returned.
cProcesses= cbNeeded / sizeof(DWORD);
//Print the name and process identifier for each process.
for( i = 0; i < cProcesses; i++ )
if(aProcesses[i] != 0 )
PrintProcessNameAndID(aProcesses[i] );
system("pause");
}
进程枚举之PSAPI函数的更多相关文章
- c# 二进制或算法实现枚举的HasFlag函数
from:http://www.cnblogs.com/icyJ/archive/2013/02/20/HasFlag.html 在权限的管理中,常常会出现一个权限包含的现象.例如,有三种基本权限:职 ...
- 进程控制之fork函数
一个现有进程可以调用fork函数创建一个新进程. #include <unistd.h> pid_t fork( void ); 返回值:子进程中返回0,父进程中返回子进程ID,出错返回- ...
- python并发编程之多进程2-------------数据共享及进程池和回调函数
一.数据共享 1.进程间的通信应该尽量避免共享数据的方式 2.进程间的数据是独立的,可以借助队列或管道实现通信,二者都是基于消息传递的. 虽然进程间数据独立,但可以用过Manager实现数据共享,事实 ...
- UNIX环境编程学习笔记(19)——进程管理之fork 函数的深入学习
lienhua342014-10-07 在“进程控制三部曲”中,我们学习到了 fork 是三部曲的第一部,用于创建一个新进程.但是关于 fork 的更深入的一些的东西我们还没有涉及到,例如,fork ...
- Python 3 并发编程多进程之进程池与回调函数
Python 3 进程池与回调函数 一.进程池 在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间.多进程是实现并发的手段之一,需要注意 ...
- 【Linux编程】进程标识符与fork函数
ID为0的进程一般是调度进程.常被称为交换进程(swapper),是内核中的系统进程. ID为1的进程叫做init进程,是一个普通用户进程,不属于内核,由内核调用. 一个现有进程能够调用fork函数创 ...
- python并发编程之多进程2-(数据共享及进程池和回调函数)
一.数据共享 1.进程间的通信应该尽量避免共享数据的方式 2.进程间的数据是独立的,可以借助队列或管道实现通信,二者都是基于消息传递的. 虽然进程间数据独立,但可以用过Manager实现数据共享,事实 ...
- [Chapter 3 Process]Practice 3.1 相关知识:进程创建、fork函数
3.1 Using the program shown in the Figure3.30, explain what the output will be at LINE A 答案:LINE A 处 ...
- python并发编程之多进程2数据共享及进程池和回调函数
一.数据共享 尽量避免共享数据的方式 可以借助队列或管道实现通信,二者都是基于消息传递的. 虽然进程间数据独立,但可以用过Manager实现数据共享,事实上Manager的功能远不止于此. 命令就是一 ...
随机推荐
- 刚開始学习的人非常有用:纯struts框架实现用户登陆
本人新手一枚.也在学习ssh.高手建议从struts2開始学起,所以我就先仅仅用struts2写了一个demo.能够有助于理解struts2在项目中的作用. 首先简单了解一下struts2 的MVC模 ...
- 如何通过js关闭微信浏览器页面
WeixinJSBridge.call('closeWindow'); jssdk wx.closeWindow(); WeixinJSBridge对象还提供了哪些功能: WeixinJSBridge ...
- 转: Source Code Lookup in Eclipse(主要讲的是java的)
Source Code Lookup in Eclipse https://www.intertech.com/Blog/source-code-lookup-in-eclipse/
- Sql server management studio: cannot find one or more components
Install VS2010 SHELL 独立组件 https://www.microsoft.com/en-US/download/details.aspx?id=1366 运行安装程序,rep ...
- Jacoco 代码覆盖率,监控WEB项目
转载:https://blog.csdn.net/u010469432/article/details/73283824 jacococ代码覆盖率,以客户端形式直接监控远程代码 使用理解 jacoco ...
- C#.NET常见问题(FAQ)-get set属性有什么意义
使用get,set可以让类定义的更加规范,因为正常情况下,如果我们写一个自定义类,他的属性要么是public,要么是private,但是如果public的属性又要做限制,比如人年龄不允许负数,也不允许 ...
- C#.NET常见问题(FAQ)-TabControl如何隐藏和显示页面
如果需要显示某个页面,则让他的Parent就是TabControl的控件名称,如果要隐藏,则等于null private void ToolStripMenuItemTeachPanelBa ...
- Discuz常见小问题-如何修改自己发布的帖子
在发布的帖子的下方就有编辑的按钮,可以直接点击进去编辑
- sqlserver profiler 抓出来作业的代码 SQLAgent - TSQL JobStep,二进制作业名字转化为字段串作业名字,job_id
sqlserver 中 profiler 抓出来不少是作业中的代码,applicationname 类似于 SQLAgent - TSQL JobStep (Job 0x94B9B5C016E8D94 ...
- POJ 1579 Function Run Fun 记忆化递归
典型的记忆化递归问题. 这类问题的记忆主要是利用数组记忆.那么已经计算过的值就能够直接返回.不须要进一步递归了. 注意:下标越界.递归顺序不能错,及时推断是否已经计算过值了,不要多递归. 或者直接使用 ...