CreateProcess __in_opt LPCTSTR lpApplicationName 模块全路径或部分名称。使用部分名称时,默认使用当前驱动器、当前目录。该函数不使用搜索路径,文件名必须带后缀! 该参数可以为NULL,此时模块名由lpCommandLine中以空格字符分隔的第一部分指示。如果路径中带空格,则必须用引号将路径引起来。 执行一个批处理lpApplicationName需要设置为"cmd.exe",lpCommandLine需要设置为"/c BatchFileName"。 __inout_opt LPTSTR lpCommandLine 命令行最长只能包括32,768(0x8000)个字符(包括NULL结束符)。如果lpApplicationName为NULL,则lpCommandLine指示模块名的部分最多只能包括MAX_PATH个字符(260=盘符+:\+256+\0)。 Unicode版本的CreateProcess(CreateProcessW)会修改该字符串的内容,因此该参数不能是一个指向只读内存的指针。如果是,该函数可能引起访问违例! 该参数可以为NULL,此时使用lpApplicationName作为命令行。 如果lpApplicationName为NULL,且lpCommandLine指示模块名的部分不带后缀,则默认追加".exe"。如果模块名以"."结束或者包含路径,则不会追加".exe"。如果模块名不包括路径,则系统按如下顺序进行搜索: 1. 调用者应用程序的加载目录。 2. 调用者进程的当前目录。 3. 32位系统目录(通过GetSystemDirectory可以取得)。 4. 16位系统目录(没有相应的函数可以取得这个路径,但它是System)。 5. Windows目录(通过GetWindowsDirectory可以取得)。 6. 在PATH环境变量中列出的目录。 __in_opt LPSECURITY_ATTRIBUTES lpProcessAttributes 指示返回的新进程的句柄是否可继承。 __in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes 指示返回的新线程的句柄是否可继承。 __in BOOL bInheritHandles 该参数为TRUE时父进程中那些可被继承的句柄才会被继承。注意这些被继承的句柄的值与访问权限都与父进程中的一致。 __in DWROD dwCreationFlags 指示新进程的优先级与创建。 如果优先级的标识未设置则默认为NORMAL_PRIORITY_CLASS。除非创建它的父进程的优先级为IDLE_PRIORITY_CLASS或者BELOW_NORMAL_PRIORITY_CLASS,则设置为与父进程一致。 __in_opt LPVOID lpEnvironment 该参数为NULL则使用父进程的环境块。 环境块由一组以NULL结尾的字符串组成,环境块的结尾是一个NULL空块。字符串的形式如下: name=value\0 由于'='是分隔符,因此'='不能作为一个环境变量(可在设置环境变量处试验)。 环境块可以包含Unicode和ANSI字符,如果lpEnvironment指向的环境块包含Unicode字符,dwCreationFlags必须有CREATE_UNICODE_ENVIRONMENT标识。如果该参数为NULL,且父进程的环境块包含Unicode字符也同上处理。 如果环境块的字符数超过32,767(0x7FFF),ANSI版的CreateProcessA就会失败。 注意ANSI的环境块以2个0字节结束:第1个0字节是最后一个字符串的,第2个0字节是环境块结束。同理Unicode的环境块以4个0字节结束。 __in_opt LPCTSTR lpCurrentDirectory 设置进程当前目录的全路径。 如果该参数为NULL则为父进程的当前目录。 __in LPSTARTUPINFO lpStartupInfo 指示进程启动时的信息 __out LPPROCESS_INFORMATION lpProcessInformation 指示进程创建后的信息