当我调用函数CreateProcessAsUser()
时,它会返回失败
然后调用GetLastError()
来检查错误发生的原因,返回值0x16f。
我无法找出错误的含义。
答案 0 :(得分:1)
ERROR_CHILD_PROCESS_BLOCKED
转换为NTSTATUS
- STATUS_CHILD_PROCESS_BLOCKED
(0xC000049D
) - 我在ntoskrnl.exe
中搜索,发现此代码仅在{{{2}时引用1}}被调用 - 来自NtCreateUserProcess
和日志错误:
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_BLOCKED
。
这是新的api,仅存在于1607版本的win10
中CreateProcess
在#if (NTDDI_VERSION >= NTDDI_WIN10_RS1)
NTKERNELAPI
BOOLEAN
SeTokenIsNoChildProcessRestricted(
_In_ PACCESS_TOKEN Token
);// return (Token->TokenFlags & 0x80000) != 0;
#endif
中声明但未记录。
所以进程,失败调用ntifs.h
以某种方式受到限制。 Windows Store沙箱,正如Harry Johnston猜测的那样?