创建进程-CreateProcess (二)

来源:互联网 发布:数据机房动环品牌 编辑:程序博客网 时间:2024/06/09 21:25

STARTUPINFO结构中的cb字段表示该结构的长度,表示子进程继承父进程的STARTUPINFO结构。

如果要修改子进程的启动信息,就要先获取到父进程的信息,然后再设置STARTUPINFO结构中的相应字段。

如下隐藏启动一个程序:

        char lpPath[] = "notepad.exe" ;STARTUPINFO si = { sizeof(si) } ;// 设置STARTF_USESHOWWINDOW标记,使得STARTUPINFO结构的wShowWindow字段有效si.dwFlags |= STARTF_USESHOWWINDOW ;// 设置窗口的显示方式,SW_HIDE表示隐藏方式si.wShowWindow = SW_HIDE ;PROCESS_INFORMATION pi ;BOOL bStatus = CreateProcess ( NULL, lpPath, NULL, NULL, FALSE, 0,NULL, NULL, &si, &pi ) ;if ( bStatus == FALSE ){MessageBox ( 0, "CreateProcess error, notepad.exe", 0, 0 ) ;return ;}


在创建子进程的时候使用CREATE_SUSPENDED标记使子进程挂起,此时子进程还没有初始化,然后就可以调用进程中处理子进程的数据和代码,比如:对子进程进行数据处理和模块注入(HOOK)等操作,最后再恢复执行。

WCHAR lpPath[] = L"notepad.exe" ;STARTUPINFO si = { sizeof(si) } ;PROCESS_INFORMATION pi ;// 步骤1:使用CREATE_SUSPENDED创建挂起进程BOOL bStatus = CreateProcess ( NULL, lpPath, NULL, NULL, FALSE, CREATE_SUSPENDED,NULL, NULL, &si, &pi ) ;if ( bStatus == FALSE ){MessageBox ( 0, L"CreateProcess error, notepad.exe", 0, 0 ) ;return ;}// 步骤2:在这里对子进程进行数据处理和模块注入等操作// ……// 步骤3:恢复执行ResumeThread ( pi.hThread ) ;