Каковы эффекты поля подсистемы заголовка PE?

У меня есть несколько вопросов о поле "подсистема" PE, которые могут частично совпадать. Чтобы не засорять это место каждым вопросом по отдельности, я решил задать их вместе, а затем переспрашивать по отдельности все, что не получило ответа. Надеюсь, это нормально...

Я знаю, что IMAGE_SUBSYSTEM_WINDOWS_CUI заставляет ОС «предварительно прикреплять» процесс к консоли, либо к его родительскому процессу, либо к созданию новой консоли, если это необходимо. IMAGE_SUBSYSTEM_WINDOWS_GUI этого не делает.

Есть ли другие различия между этими двумя в современной версии Windows? Было ли больше в прошлом?

А как насчет других значений? Используются ли они Windows просто для отклонения EXE-файла или они заставляют Windows эмулировать другой API? Расширяется ли этот процесс «эмуляции» конечными пользователями или он встроен в ОС?


person Roman Starkov    schedule 01.02.2011    source источник


Ответы (1)


Да, предварительное подключение консоли, кажется, единственное текущее отличие. Если мне не изменяет память, с 16-битными версиями Windows (95/98/SE/Me) дело обстояло иначе.

Старые версии NT допускали другие значения для подсистем POSIX и OS/2.

Теоретически вы можете написать свою собственную подсистему, используя собственный API NT. Хотя для этого есть достаточно документации, если вы посмотрите, я совсем не уверен, что этого достаточно для этой задачи. Подсистема Win32 в любом случае всегда имела скорее «особый» статус, и теперь, когда другие подсистемы ушли, я совсем не уверен, что они даже пытались гарантировать, что другие подсистемы могут быть интегрированы. На NT 4 (для одного примера) я бы сказал «сложно, но почти наверняка возможно». Я бы сказал, что в текущей версии Windows есть примерно равные шансы на то, что некоторые изменения в ядре помешают ему работать, и гораздо ниже, чем даже шансы, что доступная в настоящее время документация подойдет кому угодно, кроме MS. реализация подсистемы.

person Jerry Coffin    schedule 01.02.2011