您的位置:首页 > 其它

【MFC】根据进程名结束进程学习

2015-08-29 23:46 267 查看
需要使用的

PROCESSENTRY32结构体

CreateToolhelp32Snapshot() 获取进程快照函数

Process32First()获取第一个进程句柄

Process32Next()获取下一个进程句柄

OpenProcess()打开一个已存在的进程对象,并返回进程的句柄

PROCESSENTRY32结构体:

用来存放快照进程信息的一个结构体。(存放进程信息和调用成员输出进程信息)用来 Process32First指向第一个进程信息,并将进程信息抽取到PROCESSENTRY32中。用Process32Next指向下一条进程信息。

typedef struct tagPROCESSENTRY32
{
DWORD dwSize;
DWORD cntUsage;
DWORD th32ProcessID;
ULONG_PTR th32DefaultHeapID;
DWORD th32ModuleID;
DWORD cntThreads;
DWORD th32ParentProcessID;
LONG pcPriClassBase;
DWORD dwFlags;
TCHAR szExeFile[MAX_PATH];
} PROCESSENTRY32, *PPROCESSENTRY32;


dwSize:

这个结构的长度,以字节为单位,初始化一个实例以后调用Process32First函数,设置成员的大小sizeof (PROCESSENTRY32).如果你没用PROCESSENTRY32中的成员dwSize初始化,process32First将会失败。

cntUsage:

这个成员已经不再被使用,总是设置为零。

th32ProcessID:

这个就是任务管理器里面的进程的PID。

th32DefaultHeapID:

这个成员已经不再被使用,总是设置为零。

th32ModuleID:

这个成员已经不再被使用,总是设置为零。

cntThreads:

这个成员执行线程开始的进程。

th32ParentProcessID:

父进程的ID

pcPriClassBase:

线程优先权

dwFlags:

这个成员已经不再被使用,总是设置为零。

szExeFile:

进程的可执行文件名称。要获得可执行文件的完整路径,应调用Module32First函数,再检查其返回的MODULEENTRY32结构的szExePath成员。但是,如果被调用进程是一个64位程序,您必须调用QueryFullProcessImageName函数去获取64位进程的可执行文件完整路径名。

CreateToolhelp32Snapshot函数:

CreateToolhelp32Snapshot可以通过获取进程信息为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程建立一个快照。

函数原型:

HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags, DWORD th32ProcessID);

参数—dwFlags:

指定快照中包含的系统内容,这个参数能够使用下列数值(常量)中的一个或多个。

TH32CS_INHERIT—————————————声明快照句柄是可继承的。

TH32CS_SNAPALL————————————在快照中包含系统中所有的进程和线程。

TH32CS_SNAPHEAPLIST——————————在快照中包含在th32ProcessID中指定的进程的所有的堆。

TH32CS_SNAPMODULE——————————在快照中包含在th32ProcessID中指定的进程的所有的模块。

TH32CS_SNAPPROCESS——————————在快照中包含系统中所有的进程。

TH32CS_SNAPTHREAD——————————在快照中包含系统中所有的线程。

Const TH32CS_SNAPHEAPLIST = &H1

Const TH32CS_SNAPPROCESS = &H2

Const TH32CS_SNAPTHREAD = &H4

Const TH32CS_SNAPMODULE = &H8

Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE)

Const TH32CS_INHERIT = &H80000000

参数—th32ProcessID:

指定将要快照的进程ID。如果该参数为0表示快照当前进程。该参数只有在设置了TH32CS_SNAPHEAPLIST或者TH32CS_SNAPMODULE后才有效,在其他情况下该参数被忽略,所有的进程都会被快照。

Process32First函数:

process32First 是一个进程获取函数,当我们利用函数CreateToolhelp32Snapshot()获得当前运行进程的快照后,我们可以利用process32First函数来获得第一个进程的句柄.其原型为(用的是vfp)

函数原型:

BOOL WINAPI Process32First(HANDLE hSnapshot, LPPROCESSENTRY32 lppe);

参数—hSnapshot:

传递快照句柄

参数—lppe:

传递PROCESSENTRY32结构体指针

Process32Next函数:

Process32Next是一个进程获取函数,当我们利用函数CreateToolhelp32Snapshot()获得当前运行进程的快照后,我们可以利用Process32Next函数来获得下一个进程的句柄。

函数原型:

BOOLWINAPIProcess32Next(HANDLE hSnapshot, LPPROCESSENTRY32 lppe);

参数—hSnapshot:

传递快照句柄

参数—lppe:

传递PROCESSENTRY32结构体指针

OpenProcess函数:

函数用来打开一个已存在的进程对象,并返回进程的句柄。

函数原型:

HANDLE OpenProcess(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId);

参数—dwDesiredAccess:

指定打开后,该进程的访问权限

PROCESS_ALL_ACCESS ———————给予进程所有可能允许的权限.

PROCESS_DUP_HANDLE———————允许使用DuplicateHandle函数进行进程句柄的复制操作.

PROCESS_QUERY_INFORMATION———————允许函数GetExitCodeProcess 或函数GetPriorityClass functions查询进程的信息时使用该句柄.

PROCESS_SET_INFORMATION———————允许函数SetPriorityClass使用此句柄进行优先级设置.

PROCESS_TERMINATE———————允许函数TerminateProcess 使用此句柄关闭进程.

PROCESS_VM_OPERATION ———————允许函数VirtualProtectEx使用此句柄修改进程的虚拟内存.

PROCESS_VM_READ or PROCESS_VM_WRITE ———————允许函数访问和写入权限

SYNCHRONIZE Windows NT 专用: ———————允许同步函数使用此句柄.

参数—bInheritHandle:

指定返回的句柄是继承dwProcessId指定的进程

参数—dwProcessId:

指定打开需要打开的进程的PID

未完续待
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mfc 结构