【问题标题】:Cleaning up old job object in windows清理 Windows 中的旧作业对象
【发布时间】:2022-10-25 13:48:18
【问题描述】:

设想

(1) 我的流程有常量 JName = "jobName"。

(2) 进程启动并写入注册表 [Key = Pjob, Vlaue = "jobName"],如果这些值尚不存在。 [这样做是为了让机器上的另一个名为 R 的进程定期查找名为“jobName”的作业对象,并将某些作业内存限制应用于该作业,如果尚未完成的话]

(3) 进程创建一个名为“jobName”的作业对象,

(4) Process 将当前进程分配给jobName。

假设我们从进程 P 开始,它经过 (1),(2),(3),(4) 然后崩溃。 该进程被服务结构唤醒为 P1 并尝试通过 (1) (2) (3) (4)

在 (3) 处,当 P1 尝试创建一个名为 jobName 的作业对象时,我相信它实际上是在取回 P 创建的作业的现有句柄。

'如果对象在函数调用之前已经存在,则函数返回现有作业对象的句柄'

在 (4) 此时将 p1 分配给作业对象失败并出现以下错误

Unhandled exception: System.ComponentModel.Win32Exception (5): Access is denied.
   at Win32Wrappers.AssignProcessToJobObject(IntPtr jobHandle, IntPtr processHandle) in \Win32Wrapperscs.cs:line 100
   JobObjectUtils.CreateJobObject() in 
   JobObjectUtils.cs:line 28
   at Program.Main(String[] args) in Program.cs:line 98

问题:

如何在 P1 运行时清理 P 创建的旧作业对象并从新的作业对象开始? [作业对象的名称必须保持不变]

【问题讨论】:

标签: winapi


【解决方案1】:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-22
  • 1970-01-01
  • 1970-01-01
  • 2016-10-03
  • 2022-07-15
  • 2011-01-21
相关资源
最近更新 更多