创建进程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;
}

猜你喜欢

转载自www.cnblogs.com/ndyxb/p/12892041.html