创建进程API
前言:
在一个进程中创建并启动一个新进程,无论是对于病毒木马程序还是普通的应用程序而言。这都是一个常见的技术,最简单的方法无非是直接通过调用WIN32 API函数创建新进程。用户层上,微软提供了WinExec、ShellExecute和CreateProcess等函数来实现进程创建
实现代码:
//************************************ // 函数名: CStartDlg::WinExec_Start // 返回类型: BOOL // 功能: 以WinExec的方式创建进程 // 参数1: char * pszExePath exe文件路径 // 参数2: UINT uiCmdShow 显示方式 //************************************ BOOL CStartDlg::WinExec_Start(char *pszExePath, UINT uiCmdShow) { UINT uiRet = 0; //函数成功,返回值大于31 uiRet = WinExec(pszExePath, uiCmdShow); if (31 < uiRet) { return TRUE; } return FALSE; } //************************************ // 函数名: CStartDlg::ShellExecute_Test // 返回类型: BOOL // 功能: 以ShellExecute的方式创建进程 // 参数1: CString pszExePath exe文件路径 // 参数2: UINT uiCmdShow 显示方式 //************************************ BOOL CStartDlg::ShellExecute_Start(CString pszExePath, UINT uiCmdShow) { HINSTANCE hInstance = 0; //ShellExecute函数不仅可以运行exe文件,也可以运行已经关联的文件。 //例如,可以打开网页、发送邮件、以默认程序打开文件、打开目录、打 //印文件等。若返回值大于32,则表示执行成功,否则执行失败 hInstance = ShellExecute(NULL, NULL, pszExePath, NULL, NULL, uiCmdShow); if (32 < (DWORD)hInstance) { return TRUE; } return FALSE; } //************************************ // 函数名: CStartDlg::CreateProcess_Start // 返回类型: BOOL // 功能: 以CreateProcess方式创建进程 // 参数1: char * pszExePath exe文件路径 // 参数2: UINT uiCmdShow 显示方式 //************************************ BOOL CStartDlg::CreateProcess_Start(char* pszExePath, UINT uiCmdShow) { STARTUPINFO si = { 0 }; PROCESS_INFORMATION pi; BOOL bRet = FALSE; si.cb = sizeof(si); si.dwFlags = STARTF_USESHOWWINDOW; //指定wShowWindow成员有效 si.wShowWindow = uiCmdShow; bRet = CreateProcess(NULL, (LPWSTR)pszExePath, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi); if (bRet) { //不使用的句柄最好关掉 CloseHandle(pi.hThread); CloseHandle(pi.hProcess); return TRUE; } return FALSE; }
直面挫折,顽强生长