CreateProcess 函数

来源:互联网 发布:嘉兴行知小学怎么样 编辑:程序博客网 时间:2024/05/22 12:13

进程的创建:可以使用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; }


运行结果:




5 0