在调试器下运行时,AssignProcessToJobObject失败,并出现"访问被拒绝"错误

时间:2020-03-06 14:19:48  来源:igfitidea点击:

我们执行AssignProcessToJobObject,它会失败,并显示"访问被拒绝",但仅当我们在调试器中运行时才如此。为什么是这样?

解决方案

这个让我困惑了大约30分钟。

首先,我们可能需要在应用程序中嵌入UAC清单(如此处建议)。像这样的东西:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <!-- Identify the application security requirements. -->
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
      <security>
        <requestedPrivileges>
          <requestedExecutionLevel
            level="asInvoker"
            uiAccess="false"/>
        </requestedPrivileges>
      </security>
    </trustInfo>
  </assembly>

其次(这是我坚持的一点),当我们在调试器下运行应用程序时,它将在作业对象中创建进程。我们可以从哪个子进程中脱颖而出,然后才能将其分配给工作。因此,(duh),我们需要在" CreateProcess"的标志中指定" CREATE_BREAKAWAY_FROM_JOB")。

如果我们不在调试器下运行,或者父进程在工作中,则不会发生这种情况。