你是否正在寻找关于createprocess的内容?让我把最实时的东西奉献给你:
1.函数说明:
WIN32API函数createprocess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件。
3.参数:
lpApplicationName:
lpCommandLine:
这个参数可以为空,那么函数将使用参数指定的字符串当作要运行的程序的命令行。
lpProcessAttributes:
lpThreadAttributes:
bInheritHandles:
指示新进程是否从调用进程处继承了句柄。如果参数的值为真,调用进程中的每一个可继承的打开句柄都将被子进程继承。被继承的句柄与原进程拥有完全相同的值和访问权限。
dwCreationFlags:
指定附加的、用来控制优先类和进程的创建的标志。以下的创建标志可以以除下面列出的方式外的任何方式组合后指定。
下面是一些常用的标志.
:
lpCurrentDirectory:
lpStartupInfo:
lpProcessInformation:
createprocess函数实现。
另外createprocess函数除了创建一个进程,还创建一个线程对象。这个线程将连同一个已初始化了的堆栈一起被创建,堆栈的大小由可执行文件的文件头中的描述决定。线程由文件头处开始执行。
新进程和新线程的句柄被以全局访问权限创建。对于这两个句柄中的任一个,如果没有安全描述符,那么这个句柄就可以在任何需要句柄类型作为参数的函数中被使用。当提供安全描述符时,在接下来的时候当句柄被使用时,总是会先进行访问权限的检查,如果访问权限检查拒绝访问,请求的进程将不能使用这个句柄访问这个进程。
createprocess函数不会等待新进程完成它的初始化工作。举例来说,在试图与新进程关联的窗口之前,进程应该先调用WaitForInputIdle,。
ExitProcess, ExitThread, CreateThread, CreateRemoteThread,当一个进程启动时(调用了createprocess的结果)是在进程中序列化进行的。在一段地址空间中,同一时间内这些事件中只有一个可以发生。这意味着下面的限制将保留:
**ExitProcess函数才返回。
CloseHandle函数关闭。如果不再需要这些句柄,最好在创建进程后立刻关闭它们。
5.使用示例:
char chPath[301];
::GetCurrentDirectory(300,(LPTSTR)chPath);//得到当前目录
char path[200]= "\\123.exe";
strcat(chPath,path);
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &pi, sizeof(pi) );
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
// Start the child process
if(createprocess(chPath, "", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
{
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
else
{
HANDLE hProcess = GetCurrentProcess();//get current process
TerminateProcess(hProcess,0); //close process
}posted on
以上就是关于createprocess的全部内容,相信你一定会非常满意。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shenmilingyu/article-5189-1.html