1

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

我无法找出错误应该是什么意思。

4

1 回答 1

2

ERROR_CHILD_PROCESS_BLOCKED已转换NTSTATUS- STATUS_CHILD_PROCESS_BLOCKED( 0xC000049D) - 我搜索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您可以ERROR_CHILD_PROCESS_BLOCKEDCreateProcess.

这是新的 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 Store 沙盒,Harry Johnston 怎么猜?

于 2017-01-25T15:49:57.447 回答