首页 > 代码库 > CreateProcess 函数

CreateProcess 函数

进程的创建:可以使用CreateProcess 函数

来源:MSDN(竟然不允许MSDN链接 靠 无语)

BOOL CreateProcess
(
LPCTSTRlpApplicationName,
LPTSTRlpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes。
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);


p s z A p p l i c a t i o n N a m e和p s z C o m m a n d L i n e参数分别用于设定新进程将要使用的可执行文件的

名字和传递给新进程的命令行字符串。


若要创建一个新进程,系统必须创建一个进程内核对象和一个线程内核对象(用于进程的
主线程),由于这些都是内核对象,因此父进程可以得到机会将安全属性与这两个对象关联起

f d w C r e a t e参数用于标识标志,以便用于规定如何来创建新进程。

p v E n v i r o n m e n t参数用于指向包含新进程将要使用的环境字符串的内存块。

p s z C u r D i r参数允许父进程设置子进程的当前驱动器和目录。

p s i S t a r t I n f o参数用于指向一个S TA RT U P I N F O结构:

p p i P r o c I n f o参数用于指向你必须指定的P R O C E S S I N F O R M AT I O N结构。C r e a t e P r o c e s s在
返回之前要对该结构的成员进行初始化。


小例子:

功能:打开我桌面的一个exe引用程序

#include<Windows.h>
#include <iostream>
#include<iostream>


int main()
{


LPSTR szCmdLine="C:\\Users\\Lenovo\\Desktop\\mtail.exe";
STARTUPINFO si={sizeof(si)};
PROCESS_INFORMATION pi;
si.wShowWindow=TRUE;
si.dwFlags=STARTF_USESHOWWINDOW;
BOOL ret=::CreateProcessA(
    NULL,
    szCmdLine,
    NULL,
    NULL,
    FALSE,
    0,
    NULL,
    NULL,
    &si,
    &pi);

 

//释放句柄,否则新进程将无法退出
if(ret)
{
    ::CloseHandle(pi.hProcess);
    ::CloseHandle(pi.hThread);
    std::cout<<"新进程的id:"<<pi.dwProcessId<<std::endl
        <<"Thread id:"<<pi.dwThreadId<<std::endl;
}

system("pause");
return 0;

 

}


运行结果: