在 C# 中设置作业内存限制时出现异常ERROR_BAD_LENGTH



>我目前正在尝试扩展它,以允许我访问管理作业对象的更多可能性。但是,每当我尝试设置限制对象中定义的 JobMemoryLimit 时,我都会遇到问题。

我创建了一个函数,通过一些额外的步骤复制 JobObject 构造函数中的设置信息逻辑。首先我设置了附加标志

info.LimitFlags |= (uint)JobObjectLimitFlags.JOB_OBJECT_LIMIT_JOB_MEMORY;

仅此一项就足以破解我的代码。当我调用 SetInformationJobObject 时,它返回 false 并且作业不会被修改。我对 Marshal.GetLastWin32Error() 的调用返回了ERROR_BAD_LENGTH的代码。设置 extendedInfo.JobMemoryLimit 没有区别。

我应该注意,在这个例子中,我正在尝试修改现有的作业,但我尝试了两种方式。将上述行插入 JobObject 构造函数仍会导致从 SetInformationJobObject 返回 false,但现在错误代码为 0。

在这种情况下,ERROR_BAD_LENGTH是什么意思,为什么通过更改我的标志来触发它?

事实证明,给定示例中的对象结构对于我的系统不正确。我不知道这是否只是作者所采用的路径找不到的示例的问题,或者架构是否发生了变化。

我发现并制作的所有工作代码在 32 位模式下运行时使用 4 个字节的 LimitFlags,在 64 位模式下运行时使用 8 个字节。

最新更新