Безопасность и права доступа для буфера консоли

Модель безопасности Windows позволяет управлять доступом к буферам ввода консоли и буферам экрана консоли. Дополнительные сведения о безопасности см. в статье "Модель управления доступом".

Дескрипторы безопасности объектов консоли

При вызове функции CreateFile или CreateConsoleScreenBuffer можно указать дескриптор безопасности для буферов ввода и экрана консоли. При указании NULL объект получает дескриптор безопасности по умолчанию. Списки управления доступом в дескрипторе безопасности по умолчанию для буфера консоли получены из первичного или олицетворения маркера создателя.

Маркеры, возвращаемые CreateFile, CreateConsoleScreenBuffer и GetStdHandle, имеют права доступа GENERIC_READ и GENERIC_WRITE.

Допустимые права доступа включают GENERIC_READ и GENERIC_WRITEуниверсальные права доступа.

Значение Значение
GENERIC_READ (0x80000000000L) Запрашивает доступ на чтение к буферу экрана консоли, что позволяет процессу считывать данные из буфера.
GENERIC_WRITE (0x40000000000L) Запрашивает доступ на запись к буферу экрана консоли, что позволяет процессу записывать данные в буфер.

Примечание.

консольные приложения универсальная платформа Windows и те, которые с более низким уровнем целостности, чем подключенная консоль, будут запрещены как считывать выходной буфер, так и записывать в входной буфер, даже если дескрипторы безопасности, указанные выше, обычно разрешают его. Дополнительные сведения см. в разделе "Неправильный способ глаголов" ниже.

Команды, которые выполняются в обратном направлении

Некоторые операции с объектами консоли будут отклонены даже в том случае, если объект имеет дескриптор безопасности, который, как указано, специально разрешает чтение или запись. Это особенно касается приложений командной строки, работающих в контексте с уменьшенными привилегиями, которые совместно используют сеанс консоли, созданный приложением командной строки в более неизбежном контексте.

Термин "неправильный способ глаголов" предназначен для применения к операции, которая является обратным потоком для одного из объектов консоли. В частности, обычный поток для выходного буфера записывается, а обычный поток для входного буфера считывается. Таким образом, "неправильный способ" будет чтение выходного буфера или запись входного буфера. Это функции, описанные в документации по функциям консоли нижнего уровня.

Два сценария, в которых это можно найти:

  1. универсальная платформа Windows консольных приложений. Так как это двоюродные братья других приложений универсальная платформа Windows, они содержат обещание, что они изолированы от других приложений и предоставляют пользователям гарантии вокруг последствий их работы.
  2. Любое консольное приложение намеренно запущено с более низким уровнем целостности, чем существующий сеанс, который можно выполнить с помощью меток или обработки маркеров во время CreateProcess.

Если обнаружен любой из этих сценариев, консоль применит флаг "неправильные команды" к подключению приложения командной строки и отклонит вызовы следующих API, чтобы уменьшить поверхность взаимодействия между уровнями:

Отклоненные вызовы получат код ошибки с отказом доступа, как если разрешение на чтение или запись было отклонено дескрипторами безопасности объекта.