Что означает значение ошибки 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, как, как догадывается Гарри Джонстон?

Другие вопросы по тегам