进程创建、终止及句柄表

#include <stdio.h>
#include <windows.h>
//使用多字符集

#if 0
笔记:
BOOL CreateProcess(
	LPCTSTR lpApplicationName,                 // name of executable module
	LPTSTR lpCommandLine,                      // command line string
	LPSECURITY_ATTRIBUTES lpProcessAttributes, // SD
	LPSECURITY_ATTRIBUTES lpThreadAttributes,  // SD
	BOOL bInheritHandles,                      // handle inheritance option
	DWORD dwCreationFlags,                     // creation flags
	LPVOID lpEnvironment,                      // new environment block
	LPCTSTR lpCurrentDirectory,                // current directory name
	LPSTARTUPINFO lpStartupInfo,               // startup information
	LPPROCESS_INFORMATION lpProcessInformation // process information
);
备注:
//CreateProcess的第3、4个参数为结构体,控制子进程,是否能继承主进程句柄表中存储的,其它子进程的进程句柄或线程句柄
//创建进程时,会产生一个进程内核对象和线程的内核对象,进程和线程也是内核对象
//例如,主进程A创建了1、2子进程, 1、2的进程句柄和线程句柄,就存储在主进程A的内核对象句柄表中

关于句柄和ID

1、都是系统分配的一个编号,句柄是客户程序使用 ID主要是系统调度时使用.

2、调用CloseHandle关闭进程或者线程句柄的时候,只是让内核计数器减少一个,并不是终止进程或者线程.
进程或线程将继续运行,直到它自己终止运行。

3、进程ID与线程ID 是不可能相同。但不要通过进程或者线程的ID来操作进程或者线程,因为,这个编号是会
重复使用的,也就是说,当你通过ID = 100这个编号去访问一个进程的时候,它已经结束了,而且系统将这个编号
赋给了另外一个进程或者线程.


#endif
VOID TestCreateProcessByAPPName()
{
	STARTUPINFO si = { 0 };
	PROCESS_INFORMATION pi;

	si.cb = sizeof(si);//一般情况,只要为第一个成员赋值就可以了,指定结构体大小

	TCHAR szApplicationName[] = TEXT("c://program files//internet explorer//iexplore.exe");

	BOOL res = CreateProcess(
		szApplicationName,
		NULL,
		NULL,
		NULL,
		FALSE,
		CREATE_NEW_CONSOLE,
		NULL,
		NULL, &si, &pi);

}
VOID TestCreateProcessByCmdline()
{
	STARTUPINFO si = { 0 };
	PROCESS_INFORMATION pi;

	si.cb = sizeof(si);

	TCHAR szCmdline[] = TEXT("c://program files//internet explorer//iexplore.exe http://www.ifeng.com");

	BOOL res = CreateProcess(
		NULL,
		szCmdline,
		NULL,
		NULL,
		FALSE,
		CREATE_NEW_CONSOLE,
		NULL,
		NULL, &si, &pi);
}
VOID TestCreateProcess()
{
	STARTUPINFO si = { 0 };
	PROCESS_INFORMATION pi;

	si.cb = sizeof(si);

	TCHAR szCmdline[] = TEXT(" http://www.ifeng.com");

	BOOL res = CreateProcess(
		TEXT("c://program files//internet explorer//iexplore.exe"),//可以是常量
		szCmdline, //但命令行常用于传递一些参数,例如打开子进程时,传递句柄过去
		NULL,
		NULL,
		FALSE,
		CREATE_NEW_CONSOLE,
		NULL,
		NULL, &si, &pi);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值