Windows核心编程--进程创建与进程退出

CreateProcess函数的原型如下:

BOOL CreateProcess ( 

PCTSTR pszApplicationName,

PTSTR pszCommandLine,

PSECURITY_ATTRIBUTES psaProcess,

PSECURITY_ATTRIBUTES psaThread,

BOOL bInheritHandles,

DWORD fdwCreate,

PVOID pvEnvironment,

PCTSTR pszCurDir,

PSTARTUPINFO psiStartInfo,

PROCESS_INFORMATION ppiProcInfo

);

pszApplicationName和pszCommandLine分别指定新进程要使用的可执行文件的名称,以及要传给新进程的命令行字符串,一般情况

pszApplicationName参数都会传入NULL。

psaProcess和psaThread是调用进程为子进程的进程内核对象和线程内核对象指定安全性,bInheritHandles主调进程的可继承的句柄

能否被新进程继承。

VOID ProcessInherit( VOID )
{
STARTUPINFO si = { sizeof(si) };
SECURITY_ATTRIBUTES saProcess, saThread;
PROCESS_INFORMATION piThreadB, piThreadC;
TCHAR szPath[MAX_PATH];
saProcess.nLength = sizeof(saProcess);
saProcess.lpSecurityDescriptor = NULL;
saProcess.bInheritHandle = TRUE;


saThread.nLength = sizeof(saThread);
saThread.lpSecurityDescriptor = NULL;
saThread.bInheritHandle = FALSE;


//Spawn Process B
_tcscpy_s(szPath, _countof(szPath), _T("ProcessB"));
CreateProcess(NULL, szPath, &saProcess, &saThread, FALSE, 0, NULL, NULL, &si, &piThreadB);



_tcscpy_s(szPath, _countof(szPath), _T("ProcessC"));
CreateProcess(NULL, szPath, NULL, NULL, TRUE, 0, NULL, NULL, &si, &piThreadC);

CloseHandle(piThreadB.hThread);
CloseHandle(piThreadB.hProcess);
CloseHandle(piThreadC.hThread);
CloseHandle(piThreadC.hProcess);
}

fdwCreate参数标识了新进程创建方式的标志。

pvEnvironment参数指向新进程要使用的环境字符串,通常传入NULL,那么子进程继承父进程的一组环境字符串。

pszCurDir允许父进程设置子进程的当前驱动器和目录。

psiStartInfo参数是指向STARTINFO结构,通常使用默认值,需要初始化为0.如下所示:

STARTINFO si = {sizeof(si)};

ppiProcInfo指向一个PROCESS_INFORMATION,该结构体包含新创建的进程和线程内核对象的句柄以及id.

终止进程的方式, fuExitCode是进程退出码, hProcess指定了要终止的进程句柄。

VOID ExitProcess( UINT fuExitCode )

BOOL TerminateProcess( HANDLE hProcess, UINT fuExitCode);

当一个进程终止时,系统会依次执行以下操作:

1、终止进程中遗留的任何线程;

2、释放进程分配的所有用户对象和GDI对象,关闭所有内核对象;

3、进程的退出码从STILL_ACTIVE变为传给ExitProcess和TerminateProcess函数的代码;

4、进程的内核对象变为已触发状态;

5、进程内核对象的使用计数递减1.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值