进程构成
- 内核对象。操作系统用来管理进程
- 地址空间。包含所有可执行文件和DLL模块代码。
进程实例句柄
句柄可以用HINSTANCE和HMODULE来表示,两者一致。
获取加载基地址
GetModuleHandle(PCTSTR psmodule);
返回可执行文件加载的基地址。
如果向其传递NULL值,会返回进程地址空间的可执行文件的基地址,即使GetModuleHandle代码在一个DLL文件中返回值仍是可执行文件的基地址而不是DLL文件的基地址。
创建进程:
lpApplicationName与lpCommandLine结合一起使用。第一个参数值要执行的文件名,第二个参数为参数命令行。
如果第一个参数为空,那么在第二个参数要指明要运行的程序,可以加空格再加命令行。
lpProcessAttributes:
指向一个SECURITY_ATTRIBUTES结构体,这个结构体决定是否返回的句柄可以被子进程继承。如果lpProcessAttributes参数为空(NULL),那么句柄不能被继承。
lpThreadAttributes:
指向一个SECURITY_ATTRIBUTES结构体,这个结构体决定是否返回的句柄可以被子进程继承。如果lpThreadAttributes参数为空(NULL),那么句柄不能被继承。
.lpStartupInfo:
指向一个用于决定新进程的主窗体如何显示的STARTUPINFO结构体。
.lpProcessInformation:
指向一个用来接收新进程的识别信息的PROCESS_INFORMATION结构体。
创建进程实例:
获取进程线程ID
GetCurrentProcessid
GetCurrentThreadid
GetProcessid
GetThreadid
终止进程
1、主线程入口返回。保证所有资源被正确清理,在入口返回处会显式调用ExitProcess来终止进程。2、调用ExitProcess(0)来终止。调用该函数会导致进程当场终止运行,没有执行清理工作。(避免这种方式)
3、调用TerminateProcess(handle hprocess,UNIT code)函数。可以终止自己或其他进程。虽然进程没有办法进行清理工作,但是系统会释放所有资源,不会泄露任何东西。(避免这种方式)
4、所有线程都自然死亡。(几乎不会发生)
子进程
为了协助处理部分其他工作,但是又不错误修改我们的数据,我们可以创建一个新进程来执行工作。新进程允许访问父进程的相关数据。共享数据最方便的方式之一是使用内存映射文件。
WaitForSingleObject函数的调用将暂停执行父进程的线程,直到子进程终止。
独立子进程
为了与父进程独立开来,在创建进程后执行:
closeHandle(pi.hthread);
closeHandle(pi.hProcess);
提高进程权限
ShellExcuteEx;
具体见核心编程5版P111。
进程列举:
在C++中,对于wchar类型的输出。可以用wcout;
本文详细介绍了Windows环境下进程的创建、管理和终止方法,包括使用CreateProcess函数启动进程、获取进程句柄和ID,以及进程终止的不同方式。
3万+

被折叠的 条评论
为什么被折叠?



