创建进程API

Posted 自己的小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建进程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;
}

 

以上是关于创建进程API的主要内容,如果未能解决你的问题,请参考以下文章

创建进程API

在 Python 多处理进程中运行较慢的 OpenCV 代码片段

java 简单的代码片段,展示如何将javaagent附加到运行JVM进程

代码片段:Shell脚本实现重复执行和多进程

Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段

Azure 机器人微软Azure Bot 编辑器系列 : 机器人/用户提问回答模式,机器人从API获取响应并组织答案 (The Bot Framework Composer tutorial(代码片段