GetLastError() 函数返回的错误值0x16f的含义是什么



>当我调用函数CreateProcessAsUser()时,它返回失败。
然后调用 GetLastError() 检查发生错误的原因将返回值 0x16f。

我无法找出错误应该意味着什么。

ERROR_CHILD_PROCESS_BLOCKED被转换NTSTATUS - STATUS_CHILD_PROCESS_BLOCKED0xC000049D ) - 我在ntoskrnl.exe中搜索,发现NtCreateUserProcess调用时仅从 2 个位置引用此代码 - 从SeSubProcessToken和日志错误:

NtCreateUserProcess
  PspAllocateProcess
    PspInitializeProcessSecurity
      SeSubProcessToken
        if (!SeTokenIsNoChildProcessRestricted(Token))
        {
            status = STATUS_CHILD_PROCESS_BLOCKED;
        }

  if (PspAllocateProcess() == STATUS_CHILD_PROCESS_BLOCKED)
  {
    EtwTraceDeniedTokenCreation();
  }

所以当SeTokenIsNoChildProcessRestricted(Token)回来时FALSE你可以从CreateProcess得到ERROR_CHILD_PROCESS_BLOCKED

这是新的 API,仅存在于 Win10 的 1607 版本中

#if (NTDDI_VERSION >= NTDDI_WIN10_RS1)
NTKERNELAPI
BOOLEAN
SeTokenIsNoChildProcessRestricted(
    _In_ PACCESS_TOKEN Token
    );// return (Token->TokenFlags & 0x80000) != 0;
#endif

ntifs.h中声明,但未记录在案。

因此,失败调用CreateProcessAsUser的进程在某种程度上受到限制。Windows商店沙盒,正如哈利约翰斯顿如何猜测?

相关内容

  • 没有找到相关文章

最新更新