Что означает значение ошибки 0x16f, возвращаемое функцией GetLastError()
Когда я вызываю функцию CreateProcessAsUser()
, он возвращает ошибку.
И тогда звонок GetLastError()
чтобы проверить, почему произошла ошибка, возвращается значение 0x16f.
Я не мог выяснить, что должна означать ошибка.
1 ответ
ERROR_CHILD_PROCESS_BLOCKED
превращается NTSTATUS
- STATUS_CHILD_PROCESS_BLOCKED
(0xC000049D
) - ищу в ntoskrnl.exe
и обнаружил, что на этот код ссылаются только с 2 места, когда 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
от CreateProcess
,
это новый API, существует только с 1607 года сборки win10
#if (NTDDI_VERSION >= NTDDI_WIN10_RS1)
NTKERNELAPI
BOOLEAN
SeTokenIsNoChildProcessRestricted(
_In_ PACCESS_TOKEN Token
);// return (Token->TokenFlags & 0x80000) != 0;
#endif
объявлено в ntifs.h
но не задокументировано.
разный процесс, который не удаётся назвать CreateProcessAsUser
как-то ограничен. Песочница в Магазине Windows, как, как догадывается Гарри Джонстон?