宝博国际

欢迎您的访问!

TAG标签

宝博国际

综合文章

当前位置:首页 > 宝博国际 > 正文

  如果lpApplicationName参数为空那么这个字符串中的第一个被空格分隔的要素指定可执行模块名。如果文件名不包含扩展名那么.exe将被假定为默认的扩展名。如果文件名以一个点.结尾且没有扩展名或文件名中包含路径.exe将不会被加到后面。如果文件名中不包含路径Windows将按照如下顺序寻找这个可执行文件

  bInheritHandles指示新进程是否从调用进程处继承了句柄。如果参数的值为线c;调用进程中的每一个可继承的打开句柄都将被子进程继承。被继承的句柄与原进程拥有完全相同的值和访问权限。

  dwCreationFlags指定附加的、用来控制优先类和进程的创建的标志。以下的创建标志可以以除下面列出的方式外的任何方式组合后指定。

  含义新的进程不继承调用进程的错误模式。CreateProcess函数赋予新进程当前的默认错误模式作为替代。应用程序可以调用SetErrorMode函数设置当前的默认错误模式。

  对于CreateProcess函数默认的行为是为新进程继承调用者的错误模式。设置这个标志以改变默认的处理方式。

  含义新的进程将使用一个新的控制台而不是继承父进程的控制台。这个标志不能与DETACHED_PROCESS标志一起使用。

  含义新进程将使一个进程树的根进程。进程树种的全部进程都是根进程的子进程。新进程树的用户标识符与这个进程的标识符是相同的由lpProcessInformation参数返回。进程树经常使用GenerateConsoleCtrlEvent函数允许发送CTRLC或CTRLBREAK信号到一组控制台进程。

  含义只适用于Windows NT这个标志只有当运行一个16位的Windows应用程序时才是有效的。如果被设置新进程将会在一个私有的虚拟DOS机VDM中运行。另外默认情况下所有的16位Windows应用程序都会在同一个共享的VDM中以线程的方式运行。单独运行一个16位程序的优点是一个应用程序的崩溃只会结束这一个VDM的运行其他那些在不同VDM中运行的程序会继续正常的运行。同样的在不同VDM中运行的16位Windows应用程序拥有不同的输入队列这意味着如果一个程序暂时失去响应在独立的VDM中的应用程序能够继续获得输入。

  含义新进程的主线程会以暂停的状态被创建直到调用ResumeThread函数被调用时才运行。

  含义如果这个标志被设置调用进程将被当作一个调试程序并且新进程会被当作被调试的进程。系统把被调试程序发生的所有调试事件通知给调试器。

  含义如果此标志没有被设置且调用进程正在被调试新进程将成为调试调用进程的调试器的另一个调试对象。如果调用进程没有被调试有关调试的行为就不会产生。

  含义对于控制台进程新进程没有访问父进程控制台的权限。新进程可以通过AllocConsole函数自己创建一个新的控制台。这个标志不可以与CREATE_NEW_CONSOLE标志一起使用。

  含义指示这个进程将执行时间临界的任务所以它必须被立即运行以保证正确。这个优先级的程序优先于正常优先级或空闲优先级的程序。一个例子是Windows任务列表为了保证当用户调用时可以立刻响应放弃了对系统负荷的考虑。确保在使用高优先级时应该足够谨慎因为一个高优先级的CPU关联应用程序可以占用几乎全部的CPU可用时间。

  含义指示这个进程的线程只有在系统空闲时才会运行并且可以被任何高优先级的任务打断。例如屏幕保护程序。空闲优先级会被子进程继承。

  含义指示这个进程拥有可用的最高优先级。一个拥有实时优先级的进程的线程可以打断所有其他进程线c;包括正在执行重要任务的系统进程。例如一个执行时间稍长一点的实时进程可能导致磁盘缓存不足或鼠标反映迟钝。

  lpEnvironment指向一个新进程的环境块。如果此参数为空新进程使用调用进程的环境。

  一个环境块存在于一个由以NULL结尾的字符串组成的块中这个块也是以NULL结尾的。每个字符串都是namevalue的形式。

  因为相等标志被当作分隔符所以它不能被环境变量当作变量名。

  与其使用应用程序提供的环境块不如直接把这个参数设为空系统驱动器上的当前目录信息不会被自动传递给新创建的进程。对于这个情况的探讨和如何处理请参见注释一节。

  请注意一个ANSI环境块是由两个零字节结束的一个是字符串的结尾另一个用来结束这个快。一个Unicode环境块石油四个零字节结束的两个代表字符串结束另两个用来结束块。

  lpCurrentDirectory指向一个以NULL结尾的字符串这个字符串用来指定子进程的工作路径。这个字符串必须是一个包含驱动器名的绝对路径。如果这个参数为空新进程将使用与调用进程相同的驱动器和目录。这个选项是一个需要启动启动应用程序并指定它们的驱动器和工作目录的外壳程序的主要条件。

  另外CreateProcess函数除了创建一个进程还创建一个线程对象。这个线程将连同一个已初始化了的堆栈一起被创建堆栈的大小由可执行文件的文件头中的描述决定。线程由文件头处开始执行。

  新进程和新线程的句柄被以全局访问权限创建。对于这两个句柄中的任一个如果没有安全描述符那么这个句柄就可以在任何需要句柄类型作为参数的函数中被使用。当提供安全描述符时在接下来的时候当句柄被使用时总是会先进行访问权限的检查如果访问权限检查拒绝访问请求的进程将不能使用这个句柄访问这个进程。

  这个进程会被分配给一个32位的进程标识符。直到进程中止这个标识符都是有效的。它可以被用来标识这个进程或在OpenProcess函数中被指定以打开这个进程的句柄。进程中被初始化了的线位的线程标识符。这个标识符直到县城中止都是有效的且可以用来在系统中唯一标识这个线程。这些标识符在PROCESS_INFORMATION结构体中返回。

  调用进程可以通过WaitForInputIdle函数来等待新进程完成它的初始化并等待用户输入。这对于父进程和子进程之间的同步是极其有用的因为CreateProcess函数不会等待新进程完成它的初始化工作。举例来说在试图与新进程关联的窗口之前进程应该先调用WaitForInputIdle。

  首选的结束一个进程的方式是调用ExitProcess函数因为这个函数通知这个进程的所有动态链接库DLLs程序已进入结束状态。其他的结束进程的方法不会通知关联的动态链接库。注意当一个进程调用ExitProcess时这个进程的其他县城没有机会运行其他任何代码包括关联动态链接库的终止代码。

  *在进程启动和DLL初始化阶段新的线程可以被创建但是直到进程的DLL初始化完成前它们都不能开始运行。

  在进程中的所有线程都终止且进程所有的句柄和它们的线程被通过调用CloseHandle函数终止前进程会留在系统中。进程和主线程的句柄都必须通过调用CloseHandle函数关闭。如果不再需要这些句柄最好在创建进程后立刻关闭它们。

  *主线程的线程对象被设置为标志状态供其他等待这个对象的线程使用。

  *进程对象被设置为标志状态供其他等待这个对象的线程使用。

  假设当前在C盘上的目录是\MSVC\MFC且有一个环境变量叫做C:它的值是C:\MSVC\MFC就像前面lpEnvironment中提到过的那样这样的系统驱动器上的目录信息在CreateProcess函数的lpEnvironment参数不为空时不会被自动传递到新进程里。一个应用程序必须手动地把当前目录信息传递到新的进程中。为了这样做应用程序必须直接创建环境字符串并把它们按字母顺序排列因为Windows NT和Windows 95使用一种简略的环境变量并把它们放进lpEnvironment中指定的环境块中。类似的他们要找到环境块的开头又要重复一次前面提到的环境块的排序。

  一种获得驱动器X的当前目录变量的方法是调用GetFullPathName(x:,..)。这避免了一个应用程序必须去扫描环境块。如果返回的绝对路径是X:\就不需要把这个值当作一个环境数据去传递了因为根目录是驱动器X上的新进程的默认当前目录。

  由lpcurrentDirectory参数指定的当前目录室子进程对象的当前目录。lpCommandLine参数指定的第二个项目是父进程的当前目录。

  热寂525:你难道不知道转载要贴原帖的吗,转来完整也就算了,图片什么的也显示不出来,不会转载就不要转载,好吧,csdn现在这么烂,一大错误就是帖子质量低,到处转载,时效性不强,没有好的编辑推荐机制。

友情链接

...

haqcyp.com

宝博国际

关注我们

haqcyp.com 宝博国际