极语言官方网站

进程线程——使用示例

应用程序由一个或多个进程组成。 用最简单的术语来说, 进程是一个执行程序。

一个或多个线程在进程的上下文中运行。

线程是操作系统分配处理器时间的基本单元。

线程可以执行进程代码的任何部分,包括当前由另一个线程执行的部件。

作业对象允许将进程组作为一个单元进行管理。

作业对象是可活动、安全、可共享的对象,用于控制与其关联的进程的属性。

对作业对象执行的操作会影响与作业对象关联的所有进程。

线程池是代表应用程序高效执行异步回调的工作线程集合。

线程池主要用于减少应用程序线程数并提供工作线程的管理。

纤程是必须由应用程序手动安排的执行单元。 光纤在计划它们的线程的上下文中运行。

用户模式计划 (UMS) 是一种轻型机制,应用程序可以使用该机制来计划自己的线程。

UMS 线程与 光纤 的不同之处在于,每个 UMS 线程都有自己的线程上下文,而不是共享单个线程的线程上下文。

每个 进程 都提供执行程序所需的资源。

进程具有虚拟地址空间、可执行代码、系统对象的开放句柄、安全上下文、唯一进程标识符、环境变量、

优先级类、最小和最大工作集大小以及至少一个执行线程。

每个进程都使用单个线程(通常称为 主线程)启动,但可以从其任何线程创建其他线程。

线程是进程内可计划执行的实体。 进程的所有线程共享其虚拟地址空间和系统资源。

此外,每个线程都维护异常处理程序、计划优先级、线程本地存储、唯一线程标识符以及系统将用于保存线程上下文的一组结构,

直到计划线程上下文为止。线程上下文包括线程的计算机寄存器集、内核堆栈、

线程环境块以及线程进程的地址空间中的用户堆栈。

线程还可以有自己的安全上下文,可用于模拟客户端。

Microsoft Windows 支持 抢占式多任务处理,这会产生同时执行多个进程中多个线程的效果。

在多处理器计算机上,系统可以同时执行与计算机上存在处理器一样多的线程。

作业对象允许将进程组作为一个单元进行管理。

作业对象是可访问的、安全的、可共享的对象,用于控制与其关联的进程的属性。

对作业对象执行的操作会影响与作业对象关联的所有进程。

应用程序可以使用 线程池 来减少应用程序线程数并提供工作线程的管理。

应用程序可以对工作项进行排队、将工作与可等待句柄相关联、基于计时器自动排队,并使用 I/O 绑定。

用户模式计划 (UMS) 是一种轻型机制,应用程序可以使用该机制来计划自己的线程。

应用程序可以在用户模式下的 UMS 线程之间切换,而无需涉及 系统计划程序 ,

并在内核中阻止 UMS 线程时重新获得对处理器的控制。

每个 UMS 线程都有自己的线程上下文,而不是共享单个线程的线程上下文。

在用户模式下在线程之间切换的功能使 UMS 比线程池更高效,适合需要少量系统调用的短持续时间工作项。

光纤是必须由应用程序手动安排的执行单元。

光纤在计划它们的线程的上下文中运行。 每个线程可以计划多个光纤。

通常,与设计良好的多线程应用程序不一样,光纤没有优势。

但是,使用光纤可以更轻松地移植设计为计划其自己的线程的应用程序。


线程纤程 ——相关函数

中文名称英文名称示例作用
远程线程CreateRemoteThread远程线程(进程,属性,堆栈,@函数,参数,标志,标识)创建一个在指定进程的地址空间内运行的线程
创建线程CreateThread创建线程(属性,堆栈,@函数,参数,标志,标识)创建一个在调用进程的地址空间内执行的线程
创建纤程CreateFiber创建纤程(堆栈,@函数,地址)分配一个光纤对象,为其分配一个堆栈,并设置执行以从指定的起始地址开始,通常是光纤函数。
线程转纤ConvertThreadToFiber线程转纤(指针地址)将当前线程转换为光纤。 必须先将线程转换为光纤,然后才能计划其他光纤。
端口关联CreateIoCompletionPort端口关联(文件,端口,键,线程数)创建完成端口并将其与指定的文件句柄关联
删除纤程DeleteFiber删除纤程(指针)删除现有纤程
退出线程ExitThread退出线程(0)强制结束一个线程
当前线程GetCurrentThreadtid=当前线程获得当前线程的句柄
线程标识GetCurrentThreadIdtid=线程标识获得当前线程的标识符
切换线程SwitchToThread切换线程使系统进程切换到其它线程执行
重置线程ResumeThread重置线程(线程)减少线程的挂起计数。当暂停计数递减到零时,线程的执行被恢复
查找线程Thread32First查找线程(快照,线程类)检索进程快照第一个线程的信息
下个线程Thread32Next下个线程(快照,线程类)检索进程快照下一个线程的信息
分配线程TlsAlloc索引=分配线程分配线程本地存储 (TLS) 索引。 进程的任何线程随后都可以使用此索引来存储和检索线程本地的值
释放线程TlsFree释放线程(索引)(TLS) 索引发布线程本地存储,使其可供重复使用。并不释放线程已分配的内存空间
取线程值TlsGetValue取线程值(索引)检索调用线程的线程本地存储中的值
改线程值TlsSetValue改线程值(索引)将值存储在调用线程的线程本地存储 (指定 TLS 索引的 TLS) 槽中。
终止线程TerminateThread终止线程(线程,退出码)终止指定的线程
优先开关SetProcessPriorityBoost优先开关(进程,禁用)禁用或启用系统暂时提升指定进程的线程优先级的功能。
线程状态GetExitCodeThread线程状态(线程,@状态)获得指定线程的终止状态
创建进程CreateProcessA创建进程(名称,命令,进继,线继,全继,标志,
环境,目录,启动,进程)
创建新进程及其主线程的继承属性。全继为真都由新进程继承。
线程禁示DisableThreadLibraryCalls线程禁示(模块)禁用指定动态链接库的线程创建和线程结束通知。这可以减少某些应用程序的工作集的大小。
消息调试FatalAppExitA消息调试(0,内容)显示一个消息框,并在消息框关闭时终止应用程序。调试版可能返回应用程序
转移调试FatalExit转移调试(退出码)将执行控制权转移到调试程序。 此后调试器的行为特定于所使用的调试器类型。
进程掩码GetProcessAffinityMask进程掩码(进程,@进程掩码,@系统掩码)检索指定进程的进程关联掩码和系统的系统关联掩码。
掩码进程SetProcessAffinityMask掩码进程(进程,掩码)为指定进程的线程设置处理器关联掩码。
掩码线程SetThreadAffinityMask掩码线程(线程,掩码)为指定进程的线程设置处理器关联掩码。
取优先态GetProcessPriorityBoost取优先态(进程,@状态)检索指定进程的优先级提升控制状态。状态为真禁用动态提升,为假正常
进程关参GetProcessShutdownParameters进程关参(@优先级,@直接终止)检索当前调用进程的关闭参数。优先级0到0x4FF。直接终止为1不重试。<
关闭等级SetProcessShutdownParameters关闭等级(优先级,直接终止)设置当前调用进程的关闭参数。优先级0到0x4FF。直接终止为1不重试。
进程计时GetProcessTimes进程计时(进程,@创建,@退出,@内核,@用户)检索指定进程的计时信息
进程版本GetProcessVersion进程版本(进程)检索预期运行指定进程的系统的高字主版本号和低字次版本号。
进程工作GetProcessWorkingSetSize进程工作(进程,@最小,@最大)检索指定进程的最小和最大工作集大小(以字节为单位)。
工作进程SetProcessWorkingSetSize工作进程(进程,最小,最大)设置指定进程的最小和最大工作集大小(以字节为单位)。
线程取文GetThreadContext线程取文(线程,@上下文)检索指定线程的上下文。
线程改文SetThreadContext线程改文(线程,@上下文)设置指定线程的上下文。
线程地区GetThreadLocale线程地区返回调用线程的当前区域设置的区域设置 标识符 。
地区线程SetThreadLocale地区线程(地区)设置调用线程的当前区域设置。
线程优先GetThreadPriority线程优先(线程)检索指定线程的优先级值。
优先线程SetThreadPriority优先线程(线程,优先级)设置指定线程的优先级值。
线程提升GetThreadPriorityBoost线程提升(线程,@状态)检索指定线程的优先级提升控制状态。状态为真表示已禁用动态提升。为假表示正常行为。
提升线程SetThreadPriorityBoost提升线程(线程,禁用)禁用或启用系统临时提升线程优先级的功能。
首选线程SetThreadIdealProcessor首选线程(线程,首选处理器)设置线程的首选处理器。系统尽可能在其首选处理器上计划线程。
线程选择GetThreadSelectorEntry线程选择(线程,选择器,@条目)检索指定的选择器和线程的描述符表条目。
线程计时GetThreadTimes线程计时(线程,@创建,@退出,@内核,@用户)检索指定线程的计时信息
加载库LoadLibraryA地址=加载库("jh.dll")获取或者加载某个链接库dll的地址空间
加载程序LoadModule加载程序(程序名,运行参数)载入一个windows应用程序,并在指定的环境中运行
加载模块LoadLibraryExA加载模块(文件名,0,操作)将指定的模块加载到调用进程的地址空间中。指定的模块可能会导致加载其他模块。
用户异步QueueUserAPC用户异步(回调,线程,附加)将用户模式 异步过程调用 (APC) 对象添加到指定线程的 APC 队列。
线程异步QueueUserAPC2线程异步(回调,线程,附加,标志)将用户模式 异步过程调用 对象添加到指定线程的 APC 队列。标志:0无,1特模式,2定向到中断
进程全名QueryFullProcessImageNameA进程全名(进程,标志,@映像名,@大小)检索指定进程的可执行映像的全名。标志:0=Win32路径,1=本机系统路径
引发异常RaiseException引发异常(异常代码,标志,组数,参数组)在调用线程中引发异常。标志:0连续异常,1不连续
请求唤醒RequestWakeupLatency请求唤醒(延迟)请求唤醒计算机。所需的时间的延迟要求:0正常,1低延迟。
取错模式GetErrorMode取错模式检索当前进程的错误模式
改错模式SetErrorMode改错模式(模式)控制系统是处理指定类型的严重错误,还是进程将处理这些错误。
限制作业SetInformationJobObject限制作业(作业,分类,信息,大小)设置作业对象的限制。
线程正用SetThreadExecutionState线程正用(状态)使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入睡眠状态或关闭显示器。
异常处理SetUnhandledExceptionFilter异常处理(筛选器)使应用程序能够取代进程每个线程的顶级异常处理程序。筛选器:0正常执行,1执行异常处理,0xffffffff从异常点继续执行
异常传递UnhandledExceptionFilter异常传递(异常记录)异常处理程序定义的函数,它将未经处理的异常传递给调试器。返回0正在调试,1已经执行
进程内存Toolhelp32ReadProcessMemory进程内存(进程ID,基址,内容,长度,@已读)读取指定进程PID和地址的内存数据
已被调试IsDebuggerPresent值=已被调试判断本进程是否处于调试模式
调试断点DebugBreak调试断点功能暂停程序执行,打开调试器,进入调试模式。
调试进程DebugActiveProcess调试进程(进程ID)调试某一个运行的进程
继续调试ContinueDebugEvent继续调试(进程ID,线程ID,选项)继续报告调试事件。选项$10002停止异常,$80010001继续异常
调试输出OutputDebugStringA调试输出(内容)向当前应用程序的调试器发送一个字符串
调试事件WaitForDebugEvent调试事件(结构,毫秒)等待调试事件发生在被调试的进程中,DEBUG_EVENT结构包含调试信息
调用展开RtlUnwind调用展开(调用帧,延续,结构,回值)启动过程调用帧的展开。
停止ExitProcess停止(0)指定进程的退出代码以及由于此调用而终止的所有线程
刷新指令FlushInstructionCache刷新指令(进程,基址,大小)刷新指定进程的指令高速缓存,让CPU加载新的指令
释放引用FreeLibrary释放引用(模块句柄)减少加载的动态链接库(DLL)模块的引用计数,为零时取消Dll的映射
释放模块FreeLibraryAndExitThread释放模块(模块,退出码)将加载的动态链接库(DLL) 的引用计数递减一,然后调用 退出线程 以终止调用线程。
查找模块Module32First查找模块(快照,模块类)检索与进程相关联的快照第一个模块的信息
下个模块Module32Next下个模块(快照,模块类)检索与进程相关联的快照下一个模块的信息
查找进程Process32First查找进程(快照,进程类)检索进程快照第一个进程的信息
下个进程Process32Next下个进程(快照,进程类)检索进程快照下一个进程的信息
打开进程OpenProcess打开进程(访问,继承,pid)返回现有进程对象pid的句柄
当前进程GetCurrentProcesspro=当前进程获得当前进程的句柄
进程标识GetCurrentProcessIdpid=进程标识获得当前进程的标识符PID
终止进程TerminateProcess终止进程(进程,退出码)终止指定的进程及其所有线程
模块名称GetModuleFileNameA长度=模块名称(模块,路径,长度)获取指定模块的可执行文件的完整路径和文件名,模块为0获取本进程
模块地址GetModuleHandleA模块=模块地址(模块名)获取指定模块(dll)的模块句柄,模块名为0获取本进程句柄
函数地址GetProcAddress函数1=函数地址(模块,函数名)获取指定的动态链接库(DLL)函数的地址,可使用 调用 函数1(参数..)来执行
进程状态GetExitCodeProcess进程状态(进程,@状态)获得指定进程的终止状态
取优先级GetPriorityClasslv=取优先级(进程)获取指定进程的优先级
改优先级SetPriorityClass改优先级(进程,lv)设置指定进程的优先级
最后错误GetLastError错误=最后错误返回调用线程的最后一个错误代码值
设置错误SetLastError设置错误(错误号)设置本程序的最后一个错误代码
挂起线程SuspendThread挂起线程(线程)挂起指定的线程。
切换纤程SwitchToFiber切换纤程(纤程)计划光纤。必须在光纤上调用 函数。
运行WinExec运行(命令,显示)命令是程序路径,若有参数加空格.显示参见窗口显示方式

运行类

中文名字英文名称长度作用解释
运行类LOADPARMS3216用来运行一个外部程序。相关函数LoadModule
运行类 成员表
中文英文类型作用解释
环境lpEnvAddress整数指向运行环境的字符串。为空则与调用进程相同的环境启动
参数lpCmdLine整数指向运行程序的命令行参数字符串
显示lpCmdShow整数运行程序显示的模式
备用dwReserved整数必须是0

进程类

中文名字英文名称长度作用解释
进程类PROCESSENTRY32296用来获取系统进程的相关信息。
进程类——成员表
中文英文类型作用解释
长度dwSize整数指定这个结构的大小,以字节为单位。
引用cntUsage整数此进程的引用计数(已不再使用,总是零。)
编号th32ProcessID整数进程ID(任务管理器里进程的PID)
默认th32DefaultHeapID整数进程默认堆ID(已不再使用,总是零。)
模块th32ModuleID整数进程模块ID(已不再使用,总是零。)
线程cntThreads整数此进程开启的线程计数
父进程th32ParentProcessID整数父进程的ID
优先级pcPriClassBase整数线程优先权
标识dwFlags整数已不再使用,总是零。
名称szexeFile文本260字节长度的进程名称(不含路径)

模块类

中文名字英文名称长度作用解释
模块类MODULEENTRY321316用来获取指定进程加载模块(dll)的相关信息。
模块类——成员表
中文英文类型作用解释
长度dwSize整数指定这个结构的大小,以字节为单位。
模组th32ModuleID整数(已不再使用,总是1。)
进程th32ProcessID整数进程ID(任务管理器里进程的PID)
载入GlblcntUsage整数全局模块的载入次数(已不再使用,总是-1。)
引用ProccntUsage整数当前模块的引用次数(已不再使用,总是-1。)
基址modBaseAddr整数模块的基址,在其所属的进程范围内。
大小modBaseSize整数模块的大小,单位字节。
模块hModule整数所属进程的范围内,模块句柄。
名称szModule文本256字节长度的模块名称
路径szExePath文本1024字节长度的模块完整路径

进程基址类

中文名字英文名称长度作用解释
进程基址类PROCESS_BASIC_INFORMATION24包含了某个进程的相关信息。函数NtQueryInformationProcess
进程基址类——成员表
状态ExitStatus整数进程终止状态
基址PebBaseAddress整数进程环境块地址
掩码AffinityMask整数进程关联掩码
优先级BasePriority整数进程的优先级
进程UniqueProcessId整数进程ID
父进程InheritedFromUniqueProcessId整数父进程ID

加载模块操作标志

英文名称数值作用解释
DONT_RESOLVE_DLL_REFERENCES0x00000001如果使用此值,并且可执行模块是 DLL,则系统不会调用 DllMain 进行进程和线程初始化和终止。 此外,系统不会加载指定模块引用的其他可执行模块。
LOAD_IGNORE_CODE_AUTHZ_LEVEL0x00000010如果使用此值,则系统不会检查 AppLocker 规则或对 DLL 应用软件限制策略。 此操作仅适用于正在加载的 DLL,不适用于其依赖项。 建议在安装程序中使用此值,这些安装程序必须在安装过程中运行提取的 DLL。
LOAD_LIBRARY_AS_DATAFILE0x00000002如果使用此值,系统会将文件映射到调用进程的虚拟地址空间,就像它是数据文件一样。 执行或准备执行映射文件没有任何操作。 因此,不能使用此 DLL 调用 GetModuleFileName、 GetModuleHandle 或 GetProcAddress 等函数。 使用此值会导致写入只读内存引发访问冲突。 如果只想加载 DLL 以从中提取消息或资源,请使用此标志。
LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE0x00000040与 LOAD_LIBRARY_AS_DATAFILE类似,只不过 DLL 文件是使用调用进程的独占写入访问权限打开的。 其他进程在使用 DLL 文件时无法打开该文件进行写入访问。 但是,DLL 仍可由其他进程打开。
LOAD_LIBRARY_AS_IMAGE_RESOURCE0x00000020如果使用此值,系统会将文件作为图像文件映射到进程的虚拟地址空间中。 但是,加载程序不会加载静态导入或执行其他常规初始化步骤。 如果只想加载 DLL 以从中提取消息或资源,请使用此标志。
LOAD_LIBRARY_SEARCH_APPLICATION_DIR0x00000200如果使用此值,则会在应用程序的安装目录中搜索 DLL 及其依赖项。 不搜索标准搜索路径中的目录。 此值不能与 LOAD_WITH_ALTERED_SEARCH_PATH组合使用。
LOAD_LIBRARY_SEARCH_DEFAULT_DIRS0x00001000此值是 LOAD_LIBRARY_SEARCH_APPLICATION_DIR、 LOAD_LIBRARY_SEARCH_SYSTEM32和 LOAD_LIBRARY_SEARCH_USER_DIRS的组合。 不搜索标准搜索路径中的目录。 此值不能与 LOAD_WITH_ALTERED_SEARCH_PATH组合使用。
LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR0x00000100如果使用此值,则包含 DLL 的目录将暂时添加到要搜索 DLL 依赖项的目录列表的开头。 不搜索标准搜索路径中的目录。
LOAD_LIBRARY_SEARCH_SYSTEM320x00000800如果使用此值,则会搜索 %windows%\system32 来查找 DLL 及其依赖项。 不搜索标准搜索路径中的目录。 此值不能与 LOAD_WITH_ALTERED_SEARCH_PATH组合使用。
LOAD_LIBRARY_SEARCH_USER_DIRS0x00000400如果使用此值,则使用 AddDllDirectory 或 SetDllDirectory 函数添加的目录将搜索 DLL 及其依赖项。 如果已添加多个目录,则未指定搜索目录的顺序。 不搜索标准搜索路径中的目录。 此值不能与 LOAD_WITH_ALTERED_SEARCH_PATH组合使用。
LOAD_WITH_ALTERED_SEARCH_PATH0x00000008如果使用此值并且 lpFileName 指定绝对路径,则系统会使用“备注”部分中讨论的备用文件搜索策略来查找指定模块导致加载的关联可执行模块。 如果使用此值,并且 lpFileName 指定相对路径,则行为未定义。
LOAD_LIBRARY_REQUIRE_SIGNED_TARGET0x00000080指定必须在加载时检查二进制映像的数字签名。
LOAD_LIBRARY_SAFE_CURRENT_DIRS0x00002000如果使用此值,则仅当 DLL 位于“安全加载”列表中的某个目录下时,才允许从当前目录加载要执行

进程信息类

中文名字英文名称长度作用解释
进程信息类PROCESS_INFORMATION16包含有关新创建的进程及其主线程的信息。
进程信息类 成员表
中文英文类型作用解释
进程hProcess整数新创建进程的句柄。句柄用于指定对进程对象执行操作的所有函数中的进程。
线程hThread整数新创建的进程的主线程的句柄。句柄用于指定对线程对象执行操作的所有函数中的线程。
进程号dwProcessId整数一个值,可用于标识进程。 值从创建进程时起有效,直到关闭进程的所有句柄并释放进程对象;此时,可以重复使用标识符。
线程号dwThreadId整数可用于标识线程的值。值从创建线程时起有效,直到关闭线程的所有句柄并释放线程对象;此时,可以重复使用标识符。

启动进程类

中文名字英文名称长度作用解释
启动进程类STARTUPINFOEXA72指定新进程的窗口工作站、桌面、标准句柄和属性。
启动进程类 成员表
中文英文类型作用解释
信息StartupInfo启动信息类STARTUPINFO 结构。
属性lpAttributeList整数属性列表。此列表由 InitializeProcThreadAttributeList 函数创建。

启动信息类

中文名字英文名称长度作用解释
启动信息类STARTUPINFOA68指定创建时进程的窗口工作站、桌面、标准句柄和main窗口的外观。
启动信息类 成员表
中文英文类型作用解释
大小cb整数结构的大小(以字节为单位)。
预留lpReserved整数保留;必须为 0。
桌面lpDesktop整数桌面的名称,或此过程的桌面和窗口工作站的名称。字符串中的反斜杠指示字符串同时包含桌面和窗口工作站名称。
标题lpTitle整数对于控制台进程,这是在创建新的控制台窗口时显示在标题栏中的标题。
dwX整数如果 标志 指定4,则此成员是创建新窗口时窗口左上角的 x 偏移量(以像素为单位)。
dwY整数如果 标志 指定4,则此成员是创建新窗口时窗口左上角的 y 偏移量(以像素为单位)。
dwXSize整数如果 标志 指定2,则此成员是创建新窗口时窗口的宽度(以像素为单位)。
dwYSize整数如果 标志 指定2,则此成员是创建新窗口时窗口的高度(以像素为单位)。
dwXCountChars整数如果 标志 指定8,如果在控制台进程中创建新的控制台窗口,则此成员以字符列为单位指定屏幕缓冲区宽度。
dwYCountChars整数如果 标志 指定8,如果在控制台进程中创建新的控制台窗口,则此成员以字符行为单位指定屏幕缓冲区高度。
属性dwFillAttribute整数如果 标志 指定0x10,则如果在控制台应用程序中创建新的控制台窗口,则此成员为初始文本和背景色。
标志标志整数确定进程创建窗口时是否使用某些成员的信息标志位域。
显示wShowWindow整数如果 标志 指定1,则此成员可以是SW_SHOWDEFAULT除外的任何窗口显示模式。否则,将忽略此成员。
备用lpReserved2整数保留供 C 运行时使用;必须为零。
输入hStdInput整数如果 标志 指定0x100,则此成员是进程的标准输入句柄。如果 标志 指定0x200,则此成员将指定一个热键值
输出hStdOutput整数如果 标志 指定0x100,则此成员是进程的标准输出句柄。 否则,将忽略此成员,标准输出的默认值为控制台窗口的缓冲区。
错误hStdError整数如果 标志 指定0x100,则此成员是进程的标准错误句柄。 否则,将忽略此成员,标准错误的默认值为控制台窗口的缓冲区。

启动信息标志

英文名称数值作用解释
STARTF_FORCEONFEEDBACK0x00000040指示在调用 创建进程 后光标处于反馈模式两秒钟。 显示“在后台工作”光标 (查看鼠标控制面板实用工具) 中的“指针”选项卡。如果在这两秒内进程进行第一次 GUI 调用,则系统会再给进程 5 秒。 如果在这五秒内进程显示一个窗口,则系统再给进程 5 秒以完成绘制窗口。系统在第一次调用 获取消息 后关闭反馈光标,无论进程是否正在绘制。
STARTF_FORCEOFFFEEDBACK0x00000080指示在进程启动时强制关闭反馈光标。 将显示“普通选择”光标。
STARTF_PREVENTPINNING0x00002000指示进程创建的任何窗口都不能固定在任务栏上。此标志必须与 STARTF_TITLEISAPPID 组合使用。
STARTF_RUNFULLSCREEN0x00000020指示进程应在全屏模式下运行,而不是在窗口模式下运行。此标志仅对 x86 计算机上运行的控制台应用程序有效。
STARTF_TITLEISAPPID0x00001000lpTitle 成员包含 AppUserModelID。 此标识符控制任务栏和 “开始” 菜单呈现应用程序的方式,并使它能够与正确的快捷方式和跳转列表相关联。 通常,应用程序将使用 SetCurrentProcessExplicitAppUserModelID 和 GetCurrentProcessExplicitAppUserModelID 函数,而不是设置此标志。 有关详细信息,请参阅 应用程序用户模型 ID。如果使用STARTF_PREVENTPINNING,则应用程序窗口不能固定在任务栏上。 应用程序使用与 AppUserModelID 相关的任何窗口属性仅覆盖该窗口的此设置。此标志不能与STARTF_TITLEISLINKNAME一起使用。
STARTF_TITLEISLINKNAME0x00000800lpTitle 成员包含用户为启动此过程而调用的快捷方式文件 (.lnk) 的路径。 这通常是在调用指向已启动应用程序的 .lnk 文件时由 shell 设置的。 大多数应用程序不需要设置此值。此标志不能与STARTF_TITLEISAPPID一起使用。
STARTF_UNTRUSTEDSOURCE0x00008000命令行来自不受信任的源。 有关详细信息,请参阅“备注”。
STARTF_USECOUNTCHARS0x00000008dwXCountChars 和 dwYCountChars 成员包含其他信息。
STARTF_USEFILLATTRIBUTE0x00000010dwFillAttribute 成员包含其他信息。
STARTF_USEHOTKEY0x00000200hStdInput 成员包含其他信息。此标志不能与 STARTF_USESTDHANDLES一起使用。
STARTF_USEPOSITION0x00000004dwX 和 dwY 成员包含其他信息。
STARTF_USESHOWWINDOW0x00000001wShowWindow 成员包含其他信息。
STARTF_USESIZE0x00000002dwXSize 和 dwYSize 成员包含其他信息。
STARTF_USESTDHANDLES0x00000100hStdInput、hStdOutput 和 hStdError 成员包含其他信息。如果在调用其中一个进程创建函数时指定此标志,则句柄必须是可继承的,并且函数的 bInheritHandles 参数必须设置为 TRUE。 有关详细信息,请参阅 处理继承。如果在调用 GetStartupInfo 函数时指定此标志,则这些成员要么是在进程创建期间指定的句柄值,要么INVALID_HANDLE_VALUE。当不再需要句柄时,必须使用 CloseHandle 关闭这些句柄。此标志不能与 STARTF_USEHOTKEY一起使用。

线程执行状态

可使用以下一个或多个值。

英文名称数值作用解释
ES_AWAYMODE_REQUIRED0x00000040启用离开模式。 必须使用 ES_CONTINUOUS 指定此值。离开模式只能由媒体录制和媒体分发应用程序使用,这些应用程序必须在计算机似乎处于睡眠状态时在台式计算机上执行关键后台处理。
ES_CONTINUOUS0x80000000通知系统正在设置的状态应保持有效,直到使用 ES_CONTINUOUS 的下一次调用和清除其他状态标志之一。
ES_DISPLAY_REQUIRED0x00000002通过重置显示空闲计时器强制显示处于打开状态。
ES_SYSTEM_REQUIRED0x00000001通过重置系统空闲计时器强制系统处于工作状态。
ES_USER_PRESENT0x00000004不支持此值。 如果 ES_USER_PRESENT 与其他值组合使用,则调用将失败,并且不会设置任何指定的状态。

进程错误模式

可使用以下一个或多个值

英文名称数值作用
所有错误0使用系统默认值,即显示所有错误对话框。
SEM_FAILCRITICALERRORS0x0001系统不显示严重错误处理程序消息框。 相反,系统会将错误发送到调用进程。最佳做法是,所有应用程序在启动时调用参数为 SEM_FAILCRITICALERRORS 的进程范围的 SetErrorMode 函数。 这是为了防止错误模式对话框挂起应用程序。
SEM_NOALIGNMENTFAULTEXCEPT0x0004系统自动修复内存对齐错误,并使它们对应用程序不可见。 它为调用进程和任何后代进程执行此操作。 此功能仅受某些处理器体系结构支持。为进程设置此值后,将忽略后续尝试清除该值。
SEM_NOGPFAULTERRORBOX0x0002系统不显示Windows 错误报告对话框。
SEM_NOOPENFILEERRORBOX0x8000OpenFile 函数在找不到文件时不显示消息框。 相反,错误将返回到调用方。 此错误模式将替代 OF_PROMPT 标志。