命名管道、邮槽、作业
管道是进程用于通信的共享内存的一部分。 创建管道的过程是 管道服务器。
连接到管道的进程是 管道客户端。 一个进程将信息写入管道,另一个进程从管道读取信息。
有两种类型的管道: 匿名管道 和 命名管道。
与命名管道相比,匿名管道所需的开销更少,但服务有限。
此处使用的术语管道意味着管道用作信息管道。
从概念上讲,管道有两端。 单向管道允许一端的进程写入管道,并允许另一端的进程从管道中读取数据。
双向 (或双工) 管道允许进程从管道端读取和写入。
命名管道 ——相关函数
命名管道打开模式——使用标志
管道模式——使用标志
作业要查询的限制的信息类
匿名管道
匿名管道是一种未命名的单向管道,通常在父进程和子进程之间传输数据。 匿名管道始终是本地管道;它们不能用于通过网络进行通信。匿名管道操作 创建管道 函数创建匿名管道并返回两个句柄:管道的读取句柄和管道的写入句柄。 读取句柄对管道具有只读访问权限,写入句柄对管道具有只读访问权限。 若要使用管道进行通信,管道服务器必须将管道句柄传递给另一个进程。 通常,这是通过继承完成的;也就是说,进程允许子进程继承句柄。 进程还可以使用 复制对象 函数复制管道句柄, 并使用某种形式的进程间通信(例如 DDE 或共享内存)将其发送到不相关的进程。 管道服务器可以将读取句柄或写入句柄发送到管道客户端, 具体取决于客户端是应使用匿名管道发送信息还是接收信息。 若要从管道读取数据,请在调用 读取文件 函数时使用管道的读取句柄。 当另一个进程写入管道时, 读取文件 调用将返回。 如果管道的所有写入句柄都已关闭,或者在读取操作完成之前发生错误,读取文件 调用也可以返回 。 若要写入管道,请在调用 写入文件 函数时使用管道的写入句柄。 写入文件 调用在将指定字节数写入管道或发生错误之前不会返回。 如果管道缓冲区已满,并且有更多字节要写入, 则 写入文件 不会返回, 直到另一个进程从管道读取,从而提供更多的缓冲区空间。 管道服务器在调用 创建管道 时指定管道的缓冲区大小。 匿名管道不支持异步 (重叠) 读取和写入操作。 这意味着不能将 读入文件 和 写出文件 函数用于匿名管道。 此外,当这些函数与匿名管道一起使用时,将忽略 读取文件 和 写入文件 的 重叠类 参数。 匿名管道存在,直到所有管道句柄(读取和写入)都已关闭。 进程可以使用 关闭对象 函数关闭其管道句柄。 当进程终止时,所有管道句柄也会关闭。 匿名管道是使用具有唯一名称的命名管道实现的。 因此,通常可以将匿名管道的句柄传递给需要命名管道句柄的函数。 管道句柄继承 管道服务器控制是否可以通过以下方式继承其句柄: 创建管道 函数接收安全属性类结构。 如果管道服务器将此结构的 继承 成员设置为 真,则可以继承 创建管道 创建的句柄。 管道服务器可以使用 复制对象 函数更改管道句柄的继承。 管道服务器可以创建可继承管道句柄的不可继承副本或不可继承管道句柄的可继承副本。 创建进程 函数使管道服务器能够指定子进程是继承其可继承的所有句柄还是不继承任何句柄。 当子进程继承管道句柄时,系统将允许该进程访问管道。但是,父进程必须将句柄值传达给子进程。 父进程通常通过将标准输出句柄重定向到子进程来执行此操作,如以下步骤所示: 调用 取控制台 函数以获取当前标准输出句柄;保存此句柄,以便在创建子进程后还原原始标准输出句柄。 调用 改控制台 函数,将标准输出句柄设置为管道的写入句柄。 现在,父进程可以创建子进程。 调用 关闭对象 函数以关闭管道的写入句柄。 子进程继承写入句柄后,父进程不再需要其副本。 调用 改控制台 以还原原始标准输出句柄。 子进程使用 取控制台 函数获取其标准输出句柄,该句柄现在是管道写入端的句柄。 然后,子进程使用 写入文件 函数将其输出发送到管道。 当子项完成管道处理后,它应通过调用 关闭对象 或通过终止(自动关闭句柄)来关闭管道句柄。 父进程使用 读取文件 函数从管道接收输入。 数据作为字节流写入匿名管道。 这意味着,从管道读取的父进程无法区分在单独的写入操作中写入的字节, 除非父进程和子进程都使用协议来指示写入操作的结束位置。 关闭管道的所有写入句柄时, 读取文件 函数将返回零。 在调用 读取文件 之前, 父进程必须将其句柄关闭到管道的写入端。 如果未完成此操作, 读取文件 操作将无法返回零,因为父进程具有指向管道写入端的打开句柄。 重定向标准输入句柄的过程与重定向标准输出句柄的过程类似, 只不过管道的读取句柄用作子级的标准输入句柄。 在这种情况下,父进程必须确保子进程 不会继承管道的写入句柄。 如果未完成此操作,则子进程执行的 读取文件 操作无法返回零, 因为子进程具有指向管道写入端的打开句柄。 匿名管道安全性和访问权限 Windows 安全性使你能够控制对匿名管道的访问。 有关安全性的详细信息,请参阅 访问控制模型。 调用 创建管道 函数时,可以为管道指定安全描述符。 安全描述符控制对管道读取和写入端的访问。 如果指定 NULL,管道将获取默认安全描述符。 管道的默认安全描述符中的 ACL 来自创建者的主要令牌或模拟令牌。 若要检索管道的安全描述符,请调用 取安全符 函数。 若要更改管道的安全描述符,请调用 改安全符 函数。 创建管道 函数向匿名管道返回两个句柄: 具有0x80100000 访问权限的读取句柄;以及具有0x40100000 访问权限的写入句柄。 GENERIC_READ和GENERIC_WRITE访问使用与命名管道相同的访问权限映射。 匿名管道GENERIC_READ访问权限结合了从管道读取数据、读取管道属性、读取扩展属性和读取管道的 DACL 的权限。 匿名管道的GENERIC_WRITE访问权限结合了将数据写入管道、向其追加数据、写入管道属性、写入扩展属性和读取管 道 DACL 的权限。
命名管道
命名管道是用于管道服务器与一个或多个管道客户端之间通信的命名、单向或双工管道。 命名管道的所有实例共享相同的管道名称, 但每个实例都有自己的缓冲区和句柄,并为客户端/服务器通信提供单独的管道。 通过使用实例,多个管道客户端可以同时使用同一个命名管道。 任何进程都可以访问命名管道,受到安全检查,使命名管道成为相关或不相关进程之间通信的简单形式。 任何进程都可以充当服务器和客户端,使对等通信成为可能。 在此处使用,术语管道服务器是指创建命名管道的进程,术语管道客户端是指连接到命名管道实例的进程。 用于实例化命名管道的服务器端函数是 创建名管。 用于接受连接的服务器端函数是 连接管道。 客户端进程使用 创建文件 或 调用管道 函数连接到命名管道。 命名管道可用于在同一台计算机上的进程之间或网络上不同计算机上的进程之间提供通信。 如果服务器服务正在运行,则所有命名管道都可以远程访问。 如果打算仅在本地使用命名管道,请拒绝对 NT AUTHORITY\NETWORK 的访问或切换到本地 RPC。 管道名称 每个命名管道都有一个唯一的名称,用于将其与系统命名对象列表中的其他命名管道区分开来。 管道服务器在调用 创建名管 函数以创建命名管道 的一个或多个实例时指定管道的名称。 管道客户端在调用 创建文件 或 调用管道 函数以连接到命名管道实例时指定管道名称。 在 创建文件、等待管道 或 调用管道 函数中指定管道的名称时,请使用以下形式: \\ServerName\pipe\PipeName 其中 ,ServerName 是远程计算机的名称或句点,以指定本地计算机。 PipeName 指定的管道名称字符串可以包含反斜杠以外的任何字符, 包括数字和特殊字符。整个管道名称字符串的长度最多为 256 个字符。管道名称不区分大小写。 管道服务器不能在另一台计算机上创建管道,因此 创建名管 必须为服务器名称使用句点,如以下示例所示。 \\.\pipe\PipeName 管道服务器可以向其管道客户端提供管道名称,以便它们可以连接到管道。 管道客户端从某些永久性源 (例如注册表项、文件或其他应用程序)中发现管道名称。 否则,客户端必须在编译时知道管道名称。 命名管道打开模式 管道服务器在 创建名管 函数的 dwOpenMode 参数中指定管道访问、重叠和写通模式。 管道客户端可以使用 创建文件 函数为其管道句柄指定这些打开模式。 访问模式 设置管道访问模式等效于指定与管道服务器的句柄关联的读取或写入访问权限。 下表显示了可使用 创建名管 指定的每个访问模式的等效泛型访问权限。
访问模式 | 等效的泛型访问权限 |
PIPE_ACCESS_INBOUND | GENERIC_READ |
PIPE_ACCESS_OUTBOUND | GENERIC_WRITE |
PIPE_ACCESS_DUPLEX | GENERIC_READ |GENERIC_WRITE |
如果管道服务器使用 PIPE_ACCESS_INBOUND 创建管道,则管道服务器为只读管道,管道客户端为只读。 如果管道服务器使用PIPE_ACCESS_OUTBOUND创建管道, 则管道服务器为只读管道,管道客户端为只读。 使用 PIPE_ACCESS_DUPLEX 创建的管道对于管道服务器和管道客户端都是可读/写的。 使用 创建文件 连接到命名管道的管道客户端必须在 读写 参数中指定与管道服务器指定的访问模式兼容的访问权限。 例如,客户端必须指定GENERIC_READ访问权限才能打开管道服务器使用 PIPE_ACCESS_OUTBOUND 创建的管道的句柄。 对于管道的所有实例,访问模式必须相同。 若要读取管道属性(如读取模式或阻止模式),管道句柄必须具有FILE_READ_ATTRIBUTES访问权限;若要写入管道属性, 管道句柄必须具有FILE_WRITE_ATTRIBUTES访问权限。 这些访问权限可以与适用于管道的通用访问权限组合使用:GENERIC_READ具有只读管道的FILE_WRITE_ATTRIBUTES, 或对只读管道使用FILE_READ_ATTRIBUTES GENERIC_WRITE。 以这种方式限制访问权限可为管道提供更好的安全性。 重叠模式 在重叠模式下,执行长时间读取、写入和连接操作的函数可以立即返回。 这使线程能够在后台执行耗时操作时执行其他操作。 若要指定重叠模式,请使用 FILE_FLAG_OVERLAPPED 标志。 有关详细信息,请参阅 同步和重叠输入和输出。 创建文件 函数允许管道客户端使用 属性 参数为其管道句柄设置重叠模式 (FILE_FLAG_OVERLAPPED) 。 Write-Through模式 使用 FILE_FLAG_WRITE_THROUGH 指定写通模式。 此模式仅影响对不同计算机上的管道客户端和管道服务器之间的字节类型管道的写入操作。 在写通模式下,写入命名管道的函数在数据通过网络传输并进入远程计算机上的管道缓冲区之前不会返回。 对于每个写入操作需要同步的应用程序,写通模式非常有用。 如果未启用写通模式,系统会通过缓冲数据来提高网络操作的效率,直到累积最小字节数或最长时间段已过。 缓冲使系统能够将多个写入操作合并到单个网络传输中。 这意味着,在系统将数据放入出站缓冲区之后,但在系统通过网络传输数据之前,写入操作可以成功完成。 创建文件 函数允许管道客户端使用 属性 参数为其管道句柄设置写通模式 (FILE_FLAG_WRITE_THROUGH) 。 创建管道句柄后,无法更改管道句柄的写通模式。 对于同一管道实例的服务器和客户端句柄,写通模式可能不同。 管道客户端可以使用 名管模式 函数来控制禁用写通模式的管道的字节数和传输前的超时期限。 对于只读管道,必须使用GENERIC_READ打开管道句柄,并FILE_WRITE_ATTRIBUTES访问权限。
命名管道 ——相关函数
中文名称 | 英文名称 | 示例 | 作用 |
复制对象 | DuplicateHandle | 复制对象(源进程,源对象,目标进程, @目标对象,权限,继承,选项) | 复制对象句柄。继承为真新进程可以继承目标对象;选项:1关闭源对象,2忽略权限 |
对象属性 | GetHandleInformation | 对象属性(对象,@属性) | 检索对象句柄的某些属性。1子进程继承,2不能关闭对象 |
对象改性 | SetHandleInformation | 对象改性(对象,掩码,属性) | 检索对象句柄的某些属性。掩码和属性相同:1子进程继承,2不能关闭对象 |
创建作业 | CreateJobObjectA | 创建作业(属性结构,作业名) | 创建或打开作业对象命名空间。 |
终止作业 | TerminateJobObject | 终止作业(作业,退出码) | 终止当前与作业关联的所有进程。 |
创建管道 | CreatePipe | 创建管道(@读取,@写入,继承,大小) | 创建匿名管道,并将句柄返回到管道的读取端和写入端。 |
创建名管 | CreateNamedPipeA | 创建名管(\\.\pipe\名称,打开,管道,实例数, 输入量,输出量,超时,继承) | 创建命名管道的实例,并返回后续管道操作的句柄。超时:毫秒数 |
调用管道 | CallNamedPipeA | 调用管道(名称,数据,大小,@缓冲,长度,@已读,超时) | 连接到消息类型管道,并在管道实例不可用时等待,对管道进行写入和读取,然后关闭管道。超时:毫秒数,0默认,1不等待,0xffffffff无限等 |
连接管道 | ConnectNamedPipe | 连接管道(管道,重叠类) | 允许命名管道服务器进程等待客户端进程连接到命名管道的实例。 |
创建邮槽 | CreateMailslotA | 创建邮槽(\\.\mailslot\名称,大小,超时,继承) | 使用指定名称创建邮件槽,并返回邮件槽服务器可用于对邮件槽执行操作的句柄。超时:毫秒数,-1永远 |
断开名管 | DisconnectNamedPipe | 断开名管(模块) | 断开命名管道实例的服务器端与客户端进程的连接。 |
邮槽信息 | GetMailslotInfo | 邮槽信息(邮槽,@最大,@下条消息长, @待收,@超时) | 检索有关标识符指定的区域设置的信息。 |
邮槽超时 | SetMailslotInfo | 邮槽超时(邮槽,超时) | 设置指定邮槽用于读取操作的超时值。毫秒:0立即返回,-1永远等待 |
名管机名 | GetNamedPipeClientComputerNameA | 名管机名(命名管道,@名称,大小) | 检索指定命名管道的客户端计算机名称。 |
名管进程 | GetNamedPipeClientProcessId | 名管进程(命名管道,@进程编号) | 检索指定命名管道的客户端进程标识符。 |
名管会话 | GetNamedPipeClientSessionId | 名管会话(命名管道,@会话编号) | 检索指定命名管道的客户端会话标识符。 |
名管状态 | GetNamedPipeHandleStateA | 名管状态(命名,@状态,@例数,@长度, @时间,@用户,@名长) | 检索有关指定命名管道的信息。状态:1非阻塞,2消息读取(否则字节读取) |
名管远程 | GetNamedPipeServerProcessId | 名管远程(命名管道,@进程编号) | 检索指定命名管道的服务器进程标识符。 |
名管对话 | GetNamedPipeServerSessionId | 名管对话(命名管道,@会话编号) | 检索指定命名管道的服务器会话标识符。 |
名管信息 | GetNamedPipeInfo | 名管信息(名管,@类型,@传出,@传入,@例数) | 检索有关指定命名管道的信息。类型:1服务端,4消息管道(否则字节管道) |
名管读取 | PeekNamedPipe | 名管读取(名管,@数据,大小,@已读,@总长,@剩余) | 将数据从命名管道或匿名管道复制到缓冲区中,而不将其从管道中删除。 |
名管模式 | SetNamedPipeHandleState | 名管模式(名管,模式,最大,超时) | 设置指定命名管道的读取模式和阻止模式。0字节流,2消息流,1非阻止 |
名管读写 | TransactNamedPipe | 名管读写(名管,输入,大小,@接收,长度,@已读,重叠类) | 将向指定命名管道写入消息并从中读取消息的函数合并为单个操作。 |
作业信息 | QueryInformationJobObject | 作业信息(作业,分类,@信息,大小,@已收) | 从作业对象检索限制和作业状态信息。 |
改句柄数 | SetHandleCount | 改句柄数(数量) | 更改进程可用的文件句柄数。DOS进程可用的默认最大文件句柄数为20。Windows系统不起作用。 |
等待管道 | WaitNamedPipeA | 等待管道(名称,毫秒) | 等待超时间隔过去或指定命名管道的实例可用于连接;超时为0是默认,-1是无限等待 |
命名管道打开模式——使用标志
英文名称 | 数值 | 作用 |
此参数必须指定以下管道访问模式之一。 必须为管道的每个实例指定相同的模式。 | ||
---|---|---|
PIPE_ACCESS_DUPLEX | 0x00000003 | 管道是双向的;服务器和客户端进程都可以从管道读取和写入管道。 此模式为服务器提供 对管道的等效GENERIC_READ 和 GENERIC_WRITE 访问权限。 当客户端使用 CreateFile 函数连接到管道时,可以指定GENERIC_READ或GENERIC_WRITE,或者同时指定这两者。 |
PIPE_ACCESS_INBOUND | 0x00000001 | 管道中的数据流仅从客户端流向服务器。 此模式为服务器提供对管道 的等效GENERIC_READ 访问权限。 连接到管道时,客户端必须指定 GENERIC_WRITE 访问。 如果客户端必须通过调用 GetNamedPipeInfo 或 GetNamedPipeHandleState 函数来读取管道设置,则客户端必须在连接到管道时指定 GENERIC_WRITE 并 FILE_READ_ATTRIBUTES 访问。 |
PIPE_ACCESS_OUTBOUND | 0x00000002 | 管道中的数据流仅从服务器流向客户端。 此模式为服务器提供等效于 GENERIC_WRITE 访问管道的权限。 连接到管道时,客户端必须指定 GENERIC_READ 访问。 如果客户端必须通过调用 SetNamedPipeHandleState 函数更改管道设置,则客户端必须在连接到管道时指定 GENERIC_READ 和 FILE_WRITE_ATTRIBUTES 访问。 |
此参数还可以包括以下一个或多个标志,这些标志启用写通模式和重叠模式。 | ||
FILE_FLAG_FIRST_PIPE_INSTANCE | 0x00080000 | 如果尝试使用此标志创建管道的多个实例,则创建第一个实例会成功,但创建下一个实例会失败并 ERROR_ACCESS_DENIED。 |
FILE_FLAG_WRITE_THROUGH | 0x80000000 | 已启用写通模式。 此模式仅影响对字节类型管道的写入操作,并且仅当客户端和服务器进程位于不同计算机上时才影响写入操作。 如果启用此模式,则写入命名管道的函数不会返回,直到写入的数据通过网络传输并且位于远程计算机上的管道缓冲区中。 如果未启用此模式,系统会通过缓冲数据,直到最小字节数累积或最长时间结束,来提高网络操作的效率。 |
FILE_FLAG_OVERLAPPED | 0x40000000 | 已启用重叠模式。 如果启用此模式,执行读取、写入和连接操作(可能需要很长时间才能完成)的函数会立即返回。 此模式使启动操作的线程能够在后台执行耗时操作时执行其他操作。 例如,在重叠模式下,线程可以处理同时输入和输出 (多个管道实例上的 I/O) 操作,或在同一管道句柄上同时执行读取和写入操作。 如果未启用重叠模式,则在操作完成之前,对管道句柄执行读取、写入和连接操作的函数不会返回。 ReadFileEx 和 WriteFileEx 函数只能与重叠模式下的管道句柄一起使用。 ReadFile、WriteFile、ConnectNamedPipe 和 TransactNamedPipe 函数可以同步执行,也可以作为重叠操作执行。 |
此参数可以包括以下安全访问模式的任意组合。 对于同一管道的不同实例,这些模式可能不同。 | ||
WRITE_DAC | 0x00040000 | 调用方将具有对命名管道的任意访问控制列表 (ACL) 的写入访问权限。 |
WRITE_OWNER | 0x00080000 | 调用方将具有对命名管道所有者的写入访问权限。 |
ACCESS_SYSTEM_SECURITY | 0x01000000 | 调用方将具有对命名管道的 SACL 的写入访问权限。 有关详细信息,请参阅 访问控制列表 (ACL) 和 SACL 访问权限。 |
管道模式——使用标志
英文名称 | 数值 | 作用 |
可以指定以下类型模式之一。 必须为管道的每个实例指定相同的类型模式。 | ||
---|---|---|
PIPE_TYPE_BYTE | 0x00000000 | 数据作为字节流写入管道。 此模式不能与PIPE_READMODE_MESSAGE一起使用。 管道不区分在不同写入操作期间写入的字节。 |
PIPE_TYPE_MESSAGE | 0x00000004 | 数据作为消息流写入管道。 管道将每次写入操作期间写入的字节视为消息单元。 GetLastError 函数在未完全读取消息时返回ERROR_MORE_DATA。 此模式可与 PIPE_READMODE_MESSAGE 或 PIPE_READMODE_BYTE 一起使用。 |
可以指定以下读取模式之一。同一管道的不同实例可以指定不同的读取模式。 | ||
PIPE_READMODE_BYTE | 0x00000000 | 数据作为字节流从管道中读取。 此模式可用于 PIPE_TYPE_MESSAGE 或 PIPE_TYPE_BYTE。 |
PIPE_READMODE_MESSAGE | 0x00000002 | 数据作为消息流从管道中读取。 仅当还指定 了PIPE_TYPE_MESSAGE 时,才能使用此模式。 |
可以指定以下等待模式之一。 同一管道的不同实例可以指定不同的等待模式。 | ||
PIPE_WAIT | 0x00000000 | 启用阻止模式。 在 ReadFile、 WriteFile 或 ConnectNamedPipe 函数中指定管道句柄时,在有要读取的数据、写入所有数据或连接客户端之前,这些操作不会完成。 在某些情况下,使用此模式意味着无限期等待客户端进程执行操作。 |
PIPE_NOWAIT | 0x00000001 | 启用非阻止模式。 在此模式下, ReadFile、 WriteFile 和 ConnectNamedPipe 始终立即返回。 |
可以指定以下远程客户端模式之一。 同一管道的不同实例可以指定不同的远程客户端模式。 | ||
PIPE_ACCEPT_REMOTE_CLIENTS | 0x00000000 | 可以接受来自远程客户端的连接,并对照管道的安全描述符进行检查。 |
PIPE_REJECT_REMOTE_CLIENTS | 0x00000008 | 来自远程客户端的连接将自动被拒绝。 |
作业要查询的限制的信息类
英文名称 | 数值 | 作用解释 |
JobObjectBasicAccountingInformation | 1 | 信息 参数是指向JOBOBJECT_BASIC_ACCOUNTING_INFORMATION结构的指针。 |
JobObjectBasicAndIoAccountingInformation | 8 | 信息 参数是指向JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION结构的指针。 |
JobObjectBasicLimitInformation | 2 | 信息 参数是指向JOBOBJECT_BASIC_LIMIT_INFORMATION结构的指针。 |
JobObjectBasicProcessIdList | 3 | 信息 参数是指向JOBOBJECT_BASIC_PROCESS_ID_LIST结构的指针。 |
JobObjectBasicUIRestrictions | 4 | 信息 参数是指向JOBOBJECT_BASIC_UI_RESTRICTIONS结构的指针。 |
JobObjectCpuRateControlInformation | 15 | 信息 参数是指向JOBOBJECT_CPU_RATE_CONTROL_INFORMATION结构的指针。 |
JobObjectEndOfJobTimeInformation | 6 | 信息 参数是指向JOBOBJECT_END_OF_JOB_TIME_INFORMATION结构的指针。 |
JobObjectExtendedLimitInformation | 9 | 信息 参数是指向JOBOBJECT_EXTENDED_LIMIT_INFORMATION结构的指针。 |
JobObjectGroupInformation | 11 | 信息 参数是指向接收作业当前分配到的处理器组列表的缓冲区的指针。 lpReturnLength 参数指向的变量设置为组数据的大小。 将此值除以 sizeof(USHORT) 可确定组数。 |
JobObjectGroupInformationEx | 14 | 信息 参数是指向缓冲区的指针,该缓冲区接收GROUP_AFFINITY结构数组,这些结构指示作业当前分配到的处理器组中作业的相关性。 lpReturnLength 参数指向的变量设置为组相关性数据的大小。 将此值除以结构长度可确定组数。 |
JobObjectLimitViolationInformation | 13 | 信息 参数是指向JOBOBJECT_LIMIT_VIOLATION_INFORMATION结构的指针。 |
JobObjectLimitViolationInformation2 | 34 | 信息 参数是指向JOBOBJECT_LIMIT_VIOLATION_INFORMATION_2结构的指针。 |
JobObjectNetRateControlInformation | 32 | 信息 参数是指向JOBOBJECT_NET_RATE_CONTROL_INFORMATION结构的指针。 |
JobObjectNotificationLimitInformation | 12 | 信息 参数是指向JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION结构的指针。 |
JobObjectNotificationLimitInformation2 | 33 | 信息 参数是指向JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION_2结构的指针。 |
JobObjectSecurityLimitInformation | 5 | 不支持此标志。 应用程序必须为每个进程单独设置安全限制。 Windows Server 2003 和 Windows XP: 信息 参数是指向JOBOBJECT_SECURITY_LIMIT_INFORMATION结构的指针。 |