Перенаправления STDIN, STDOUT и STDERR не работают в дочернем процессе WOW64, если дочерний процесс создается функцией CreateProcessWithTokenW

Применяется к
Windows Server 2008 for Itanium-Based Systems Windows Server 2008 Datacenter Windows Server 2008 Enterprise Windows Server 2008 Standard Windows Vista Enterprise 64-bit Edition Windows Vista Home Basic 64-bit Edition Windows Vista Home Premium 64-bit Edition Windows Vista Ultimate 64-bit Edition Windows Vista Business 64-bit Edition Windows Server 2008 R2 Datacenter Windows Server 2008 R2 Enterprise Windows Server 2008 R2 for Itanium-Based Systems Windows Server 2008 R2 Standard Windows 7 Enterprise Windows 7 Home Basic Windows 7 Home Premium Windows 7 Professional Windows 7 Ultimate

Проблема

Рассмотрим следующий сценарий.

  • На вашем компьютере установлена 64-разрядная версия Windows Server 2008, Windows Vista, Windows 7 или Windows Server 2008 R2.
  • На этом компьютере какой-либо процесс вызывает функцию CreateProcessWithTokenW для создания дочернего процесса, который выполняется под управлением 32-разрядной версии Windows в 64-разрядной версии Windows (WOW64).
  • Дочерний процесс WOW64 создается для перенаправления стандартного ввода (STDIN), стандартного вывода (STDOUT) и стандартной ошибки (STDERR).

В этом случае перенаправления не работают в дочернем процессе WOW64. Поэтому все приложения и службы, зависящие от функции перенаправления, не работают.

Причина

Для каждого процесса WOW64child есть два блока среды процесса (PEB). Один PEB используется для 64-битных процессов, а другой — для 32-битных процессов, выполняемых в среде эмуляции WOW64.

Функция CreateProcessWithTokenW дублирует дескрипторы для STDIN, STDOUT и STDERR только из родительского процесса в PEB для 64-разрядных процессов. Однако эта функция не дублирует эти дескрипторы в PEB для 32-битных процессов, выполняемых в среде эмуляции WOW64. Это поведение приводит к тому, что дочерний процесс, выполняемый под WOW64, не может использовать перенаправленные дескрипторы. Поэтому перенаправления завершаются ошибкой.

Решение

Сведения об исправлениях

Поддерживаемое исправление доступно от корпорации Майкрософт. Однако это исправление предназначено только для устранения проблемы, описанной в этой статье. Применяйте это исправление только к системам, в которых возникает проблема, описанная в этой статье. Это исправление может пройти дополнительное тестирование. Поэтому, если вы не серьезно затронуты этой проблемой, мы рекомендуем вам дождаться следующего обновления программного обеспечения, содержащего это исправление.

Если исправление доступно для скачивания, в верхней части этой статьи базы знаний отобразится раздел "Доступно скачивание исправлений". Если этот раздел не отображается, обратитесь в службу поддержки пользователей Майкрософт для получения исправления.

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

http://support.microsoft.com/contactus/?ws=support Примечание. В форме "Доступно скачивание исправления" указаны языки, для которых доступно исправление. Если вы не видите свой язык, это означает, что для него недоступно исправление.

Необходимые условия

Чтобы применить это исправление, на компьютере должна быть установлена одна из следующих операционных систем:

  • Windows Vista с пакетом обновления 1 (SP1)
  • Пакет обновления 2 (SP2) для Windows Vista
  • Windows Server 2008
  • Windows Server 2008 с пакетом обновления 2 (SP2)
  • Windows 7
  • Windows Server 2008 R2

Необходимость перезапуска

После применения этого исправления компьютер необходимо перезагрузить.

Данные реестра

Вносить изменения в реестр не требуется.

Сведения о файлах

Версия этого исправления на английском языке (США) устанавливает файлы с атрибутами, которые перечислены в таблице ниже. Значения даты и времени для этих файлов указаны в формате UTC. Значения даты и времени для этих файлов на локальном компьютере отображаются в местном времени с учетом поправки на летнее время (DST). Кроме того, при выполнении определенных операций с файлами значения даты и времени могут изменяться.

Примечания о сведениях о файлах Windows Vista и Windows Server 2008

Важные исправления для Windows Vista и для Windows Server 2008 включены в один и тот же пакет. Однако на странице запроса на исправление указана только "Windows Vista". Чтобы запросить пакет исправлений, применимый к одной или обеим операционным системам, выберите исправление, указанное в разделе «Windows Vista» на странице. Всегда обращайтесь к разделу "Применимо к" в статьях, чтобы определить фактическую операционную систему, к которой применяется каждое исправление.

  • Файлы, относящиеся к определенному продукту, SR_Level (RTM, SPn) и ветви обслуживания (LDR, GDR), можно определить, изучив номера версий файлов, показанные в следующей таблице.

    Версия Продукт SR_Level Ветвь службы
    6.0.600
    1.
    22х
    Windows Vista и Windows Server 2008 Пакет обновления 1 (SP1) ЛДР
    6.0.600
    2.
    22х
    Windows Vista и Windows Server 2008 Пакет обновления 2 (SP2) ЛДР
  • Пакет обновления 1 (SP1) встроен в версию выпуска Windows Server 2008.

  • Файлы MANIFEST (.manifest) и MUM-файлы (.mum), устанавливаемые для каждой среды, перечислены отдельно в разделе "Дополнительные сведения о файлах для Windows Server 2008 и для Windows Vista". MUM-файлы и файлы MANIFEST, а также связанные с ними файлы каталога безопасности (CAT) чрезвычайно важны для поддержания состояния обновленных компонентов. Файлы каталога безопасности, для которых атрибуты не указаны, подписаны цифровой подписью Майкрософт.

Для всех поддерживаемых 64-разрядных (x64) версий Windows Server 2008 и Windows Vista

Имя файла Версия файла Размер файла Дата Время Платформа
Seclogon.dll 6.0.6001.22431 29 184 12 мая 2009 г. 16:06 x64
Seclogon.dll 6.0.6002.22134 29 184 12 мая 2009 г. 15:41 x64

Для всех поддерживаемых версий Windows Server 2008 на основе Itanium

Имя файла Версия файла Размер файла Дата Время Платформа
Seclogon.dll 6.0.6001.22431 57 856 12 мая 2009 г. 15:46 ИА-64
Seclogon.dll 6.0.6002.22134 57 856 12 мая 2009 г. 15:33 ИА-64

Сведения о файлах Windows 7 и Windows Server 2008 R2

Важные исправления для Windows 7 и для Windows Server 2008 R2 включены в те же пакеты. Однако исправления на странице запроса на исправление перечислены для обеих операционных систем. Чтобы запросить пакет исправлений, относящийся к одной или обеим операционным системам, выберите исправление, указанное в разделе "Windows 7/Windows Server 2008 R2" на этой странице. Всегда обращайтесь к разделу "Применимо к" в статьях, чтобы определить фактическую операционную систему, к которой применяется каждое исправление.

  • Файлы MANIFEST (.manifest) и MUM-файлы (.mum), устанавливаемые для каждой среды, перечислены отдельно в разделе "Дополнительные сведения о файлах для Windows Server 2008 R2 и для Windows 7". Файлы MUM и MANIFEST, а также связанные с ними файлы каталога безопасности (CAT) чрезвычайно важны для поддержания состояния обновленных компонентов. Файлы каталога безопасности, для которых атрибуты не указаны, подписаны цифровой подписью Майкрософт.

Для всех поддерживаемых 64-разрядных (x64) версий Windows 7 и Windows Server 2008 R2

Имя файла Версия файла Размер файла Дата Время Платформа
Seclogon.dll 6.1.7600.20787 30 720 21 августа 2010 г. 07:24 x64

Для всех поддерживаемых версий Windows Server 2008 R2 на основе IA-64

Имя файла Версия файла Размер файла Дата Время Платформа
Seclogon.dll 6.1.7600.20787 65 024 21 августа 2010 г. 06:29 ИА-64

Временное решение

Чтобы обойти эту проблему, вызовите функцию CreateProcessAsUser для создания дочернего процесса.

Состояние

Корпорация Майкрософт подтвердила, что это проблема продуктов Microsoft, перечисленных в разделе «Относится к».

Дополнительные сведения

Дополнительные сведения о функции CreateProcessWithTokenW см. на веб-сайте корпорации Майкрософт по следующему адресу:

http://msdn.microsoft.com/en-us/library/ms682434(VS.85).aspx Дополнительные сведения о функции CreateProcessAsUser см. на веб-сайте корпорации Майкрософт по следующему адресу:

http://msdn.microsoft.com/en-us/library/ms682429(VS.85).aspx Для просмотра статьи в базе знаний Майкрософт щелкните следующий номер статьи:

824684 Стандартные термины, используемые при описании обновлений программного обеспечения Майкрософт

Дополнительные сведения о файле

Дополнительные сведения о файлах для Windows Vista и Windows Server 2008

Дополнительные файлы для всех поддерживаемых 64-разрядных версий Windows Vista и Windows Server 2008

Имя файла Amd64_4a7908b357eecad45497e7a614da5ab2_31bf3856ad364e35_6.0.6001.22431_none_eff62086a34ac976.manifest
Версия файла Неприменимо
Размер файла 713
Дата (в формате UTC) 13 мая 2009 г.
Время (в формате UTC) 03:32
Платформа Неприменимо
Имя файла Amd64_e18aeae085cca5f39361c0ace1ecfedf_31bf3856ad364e35_6.0.6002.22134_none_c800fbe0d1aafeca.manifest
Версия файла Неприменимо
Размер файла 713
Дата (в формате UTC) 13 мая 2009 г.
Время (в формате UTC) 03:32
Платформа Неприменимо
Имя файла Amd64_microsoft-windows-secondarylogonservice_31bf3856ad364e35_6.0.6001.22431_none_48ed2db26d293c6b.manifest
Версия файла Неприменимо
Размер файла 7,582
Дата (в формате UTC) 12 мая 2009 г.
Время (в формате UTC) 19:30
Платформа Неприменимо
Имя файла Amd64_microsoft-windows-secondarylogonservice_31bf3856ad364e35_6.0.6002.22134_none_4ad6a0786a4cdd94.manifest
Версия файла Неприменимо
Размер файла 7,582
Дата (в формате UTC) 12 мая 2009 г.
Время (в формате UTC) 19:25
Платформа Неприменимо
Имя файла Update.mum
Версия файла Неприменимо
Размер файла 2,598
Дата (в формате UTC) 13 мая 2009 г.
Время (в формате UTC) 03:32
Платформа Неприменимо

Дополнительные файлы для всех поддерживаемых версий Windows Server 2008 на основе IA-64

Имя файла Ia64_23caceaa3d7286a9ff4a23775ef4da54_31bf3856ad364e35_6.0.6002.22134_none_d01b4e8816bf0190.manifest
Версия файла Неприменимо
Размер файла 711
Дата (в формате UTC) 13 мая 2009 г.
Время (в формате UTC) 03:32
Платформа Неприменимо
Имя файла Ia64_68069bedf1d5a4bd9f3dc637561ff507_31bf3856ad364e35_6.0.6001.22431_none_349d44d96d664fea.manifest
Версия файла Неприменимо
Размер файла 711
Дата (в формате UTC) 13 мая 2009 г.
Время (в формате UTC) 03:32
Платформа Неприменимо
Имя файла Ia64_microsoft-windows-secondarylogonservice_31bf3856ad364e35_6.0.6001.22431_none_ecd03624b4c9d431.manifest
Версия файла Неприменимо
Размер файла 7,572
Дата (в формате UTC) 12 мая 2009 г.
Время (в формате UTC) 19:14
Платформа Неприменимо
Имя файла Ia64_microsoft-windows-secondarylogonservice_31bf3856ad364e35_6.0.6002.22134_none_eeb9a8eab1ed755a.manifest
Версия файла Неприменимо
Размер файла 7,572
Дата (в формате UTC) 12 мая 2009 г.
Время (в формате UTC) 19:07
Платформа Неприменимо
Имя файла Update.mum
Версия файла Неприменимо
Размер файла 1,924
Дата (в формате UTC) 13 мая 2009 г.
Время (в формате UTC) 03:32
Платформа Неприменимо

Дополнительные сведения о файлах для Windows 7 и Windows Server 2008 R2

Дополнительные файлы для всех поддерживаемых 64-разрядных версий Windows 7 и Windows Server 2008 R2

Имя файла Amd64_445df96a83014fe57068b08a79da6683_31bf3856ad364e35_6.1.7600.20787_none_20591bc8c261086c.manifest
Версия файла Неприменимо
Размер файла 713
Дата (в формате UTC) 21 августа 2010 г.
Время (в формате UTC) 12:03
Платформа Неприменимо
Имя файла Amd64_microsoft-windows-secondarylogonservice_31bf3856ad364e35_6.1.7600.20787_none_48e4f3e3ce639760.manifest
Версия файла Неприменимо
Размер файла 4,810
Дата (в формате UTC) 21 августа 2010 г.
Время (в формате UTC) 08:37
Платформа Неприменимо
Имя файла Update.mum
Версия файла Неприменимо
Размер файла 1,886
Дата (в формате UTC) 21 августа 2010 г.
Время (в формате UTC) 12:03
Платформа Неприменимо

Дополнительные файлы для всех поддерживаемых версий Windows Server 2008 R2 на основе IA-64

Имя файла Ia64_a48ab9ecdf2f4b1206e2ae93b7bb6a43_31bf3856ad364e35_6.1.7600.20787_none_172788f1fbdb93a7.manifest
Версия файла Неприменимо
Размер файла 711
Дата (в формате UTC) 21 августа 2010 г.
Время (в формате UTC) 12:03
Платформа Неприменимо
Имя файла Ia64_microsoft-windows-secondarylogonservice_31bf3856ad364e35_6.1.7600.20787_none_ecc7fc5616042f26.manifest
Версия файла Неприменимо
Размер файла 4,808
Дата (в формате UTC) 21 августа 2010 г.
Время (в формате UTC) 08:17
Платформа Неприменимо
Имя файла Update.mum
Версия файла Неприменимо
Размер файла 1,684
Дата (в формате UTC) 21 августа 2010 г.
Время (в формате UTC) 12:03
Платформа Неприменимо