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

时间:2017-01-25 08:43:17

标签: windows winapi createprocess createprocessasuser getlasterror

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

我无法找出错误的含义。

1 个答案:

答案 0 :(得分:1)

ERROR_CHILD_PROCESS_BLOCKED转换为NTSTATUS - STATUS_CHILD_PROCESS_BLOCKED0xC000049D) - 我在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猜测的那样?