在 C# 中设置作业内存限制时异常 ERROR_BAD_LENGTH
Unusual ERROR_BAD_LENGTH while setting job memory limits in C#
我目前正在尝试扩展 this 以允许我访问管理工作对象的更多可能性。但是,每当我尝试设置 Limit 对象中定义的 JobMemoryLimit 时,我都会 运行 遇到问题。
我创建了一个函数,通过一些额外的步骤复制 JobObject 构造函数中的设置信息逻辑。首先我设置附加标志
info.LimitFlags |= (uint)JobObjectLimitFlags.JOB_OBJECT_LIMIT_JOB_MEMORY;
仅此一项就足以破解我的代码。当我调用 SetInformationJobObject 时,它 returns false 并且作业没有被修改。我对 Marshal.GetLastWin32Error() return 的调用是 ERROR_BAD_LENGTH 的代码。设置 extendedInfo.JobMemoryLimit 没有区别。
我应该注意到,在这个例子中我试图修改一个现有的工作,但我已经尝试了两种方法。将上面的行插入 JobObject 构造函数仍然会导致 SetInformationJobObject 的 return 为 false,但现在错误代码为 0.
在这种情况下,ERROR_BAD_LENGTH 是什么意思,为什么更改我的标志会触发它?
事实证明,给定示例中的对象结构不适合我的系统。我不知道这是否仅仅是示例的问题,作者采用的路径未找到该示例,或者架构是否发生了某些变化。
我发现并制作的所有工作代码在 32 位模式下 运行 时使用 4 个字节用于 LimitFlags,在 64 位模式下 运行 时使用 8 个字节。
我目前正在尝试扩展 this 以允许我访问管理工作对象的更多可能性。但是,每当我尝试设置 Limit 对象中定义的 JobMemoryLimit 时,我都会 运行 遇到问题。
我创建了一个函数,通过一些额外的步骤复制 JobObject 构造函数中的设置信息逻辑。首先我设置附加标志
info.LimitFlags |= (uint)JobObjectLimitFlags.JOB_OBJECT_LIMIT_JOB_MEMORY;
仅此一项就足以破解我的代码。当我调用 SetInformationJobObject 时,它 returns false 并且作业没有被修改。我对 Marshal.GetLastWin32Error() return 的调用是 ERROR_BAD_LENGTH 的代码。设置 extendedInfo.JobMemoryLimit 没有区别。
我应该注意到,在这个例子中我试图修改一个现有的工作,但我已经尝试了两种方法。将上面的行插入 JobObject 构造函数仍然会导致 SetInformationJobObject 的 return 为 false,但现在错误代码为 0.
在这种情况下,ERROR_BAD_LENGTH 是什么意思,为什么更改我的标志会触发它?
事实证明,给定示例中的对象结构不适合我的系统。我不知道这是否仅仅是示例的问题,作者采用的路径未找到该示例,或者架构是否发生了某些变化。
我发现并制作的所有工作代码在 32 位模式下 运行 时使用 4 个字节用于 LimitFlags,在 64 位模式下 运行 时使用 8 个字节。