Сегодня я представлю вам новую функцию Windows 7/Windows Server 2008 R2 — хост консоли (ConHost.exe).
Фактически, будь то обычные пользователи или администраторы предприятия, мы будем более или менее использовать консольные приложения в наших повседневных приложениях Windows, а также в процессах эксплуатации и обслуживания. Консольное приложение не имеет пользовательского интерфейса. Нам нужно выполнять на нем операции ввода и вывода через командную строку (CMD, это не DOS, многих это смущает).
Итак, давайте задумаемся, какие консольные приложения входят в комплект Windows?
Фактически, наиболее типичными являются cmd.exe, nslookup.exe и telnet.exe.
В более ранних версиях Windows все приложения, которые выполняли действия, не связанные с графическим интерфейсом пользователя (т. е. консольные приложения), координировались через системный процесс Csrss.exe, когда они хотели запускаться на рабочем столе. Когда консольному приложению необходимо получить символы, оно вызывает небольшой «консольный API» в Kernel32.dll, чтобы позволить Kernel32 генерировать LPC для вызова CSRSS. В это время CSRSS проверит очередь ввода окна консоли и вернет результаты символьного режима консольному приложению через Kernel32 для ассоциации. Механизм обработки сообщений консольных приложений в ранних версиях Windows показан на рисунке ниже:
Этот механизм обработки создал проблему: даже если консольное приложение выполняется в контексте обычного пользователя, Csrss.exe всегда запускается с разрешениями локальной системной учетной записи. Поэтому в некоторых случаях вредоносное ПО, разработанное «плохими парнями», может получить больше привилегий через Csrss.exe, запускаемый с разрешениями локальной системной учетной записи. Этот режим атаки называется Shatter Attack.
В эпоху Win7 и Windows Server 2008 R2 все консольные приложения помещаются в новый контекстный процесс ConHost.exe для выполнения, а ConHost (хост консоли) и консольные программы запускаются в одном и том же контексте уровня безопасности, а не выдаются. запрос сообщения LPC в CSRSS для обработки, вместо этого он запрашивает ConHost. Таким образом, любая попытка приложения использовать запрос сообщения для автоматического повышения привилегий не увенчается успехом. На следующем рисунке схематически показан новый механизм, используемый в Windows 7 и Windows Server 2008 R2:
ConHost заменяет постоянное изменение в способе обработки ввода-вывода консольными приложениями. Пользователи не могут заставить Windows вернуться к поведению консоли «устаревшего режима» через реестр или групповую политику. Поэтому пользователям необходимо тщательно тестировать приложения перед обновлением до Windows 7 или Windows Server 2008 R2. Не забывайте, что хотя большинство функций некоторых приложений реализованы через графический интерфейс, данные по-прежнему обрабатываются пакетно через консоль или другие функциональные интерфейсы в фоновом режиме. Поэтому перед миграцией или выравниванием очень важно провести комплексное функциональное тестирование приложения.
Если приложение не может нормально использоваться в Windows 7, мы должны сначала протестировать и запустить его еще раз с правами администратора, чтобы увидеть, возникает ли проблема. Фактически, мы можем затем использовать Process Monitor, чтобы проверить, есть ли у приложения права доступа к файлам или реестру. нормальны. Если приложение по-прежнему не может нормально работать после устранения вышеуказанных проблем, вам необходимо рассмотреть возможность обращения к независимому поставщику программного обеспечения или его разработчику.
В случае сбоя приложения соответствующий файл аварийного дампа наиболее полезен разработчикам и независимым поставщикам программного обеспечения для выявления сути проблемы. Если приложение перестает отвечать на запросы, вы можете попробовать использовать ADPlus, чтобы получить его и связанный с ним дамп процесса ConHost.exe. Консольные приложения могут совместно использовать многие подпроцессы консоли Windows. Например, когда пользователь запускает Telnet из окна CMD, Telnet.exe становится подпроцессом Cmd.exe. В этом случае хост ConHost.exe обрабатывает экземпляры сообщений как родительского, так и дочернего процесса. Используя Process Explorer, мы можем проверить, какие процессы обрабатывает ConHost.exe:
Вы также можете использовать функцию «Анализ цепочки ожидания» в мониторе ресурсов Windows 7, чтобы просмотреть процесс приложения процесса ConHost.exe:
Наконец, не забудьте полностью протестировать приложение перед миграцией!