Пользователь
0,0
рейтинг
15 ноября 2010 в 11:33

«Намертво прибитая к ядру» графическая подсистема



То, что принято называть «графикой в ядре» обычно относится к win32k. Win32k.sys представляет собой ядерную часть графической подсистемы. Загружается пользовательским процессом smss.exe в процессе инициализации всех остальных подсистем. Путь к исполняемому образу для «kmode» подсистемы прописан здесь:


Как же это происходит?



Здесь (на стек трейсе в нижней части скриншота) хорошо видно, что инициирует загрузку win32k процесс пользовательского режима smss (который в том числе инициализирует файлы подкачки, реестр, переменные окружения, сохраняет дамп памяти, если до этого был bugcheck, при посредстве wininit запускает service control manager и local security authority subsystem, создает logon сессии и т.п..), а одна из первых вещей, которые делает сам win32k — это «налаживание связей» с ядром. И вот зачем: win32k находится на более высоком уровне по сравнению с ядром, поэтому ядро не может иметь зависимость (под «зависимостью» в данном случае понимается классический «reason to change») от (конкретной реализации) win32k, но и ядро и win32k могут безопасно зависеть от интерфейса. Таким интерфейсом является структура KWIN32_CALLOUTS_FPNS и функция для регистрации конкретной реализации этого интерфейса в ядре — PsEstablishWin32Callouts.

Кроме того, win32k регистрирует несколько типов объектов (в частности Desktop и WindowStation) через интерфейсы общего назначения, предоставляемые Object Manager-ом.

Таким образом НИКАКИХ зависимостей от win32k у ядра нет. Более того, до NT4 все user/gdi API обрабатывалось в csrss и, естественно, тормозило. Начиная с NT4 ЧАСТЬ user/gdi примитивов была перенесена в ядро для повышения производительности.

В общем win32k можно полностью убрать, можно заменить собственной ядерной частью, а можно реализовать все полностью в пользовательском режиме (используя, например, ioctl-ы для связи с ядром), но это будет тормозить. Единственная причина, по которой это не делается — потому что это не нужно. Можно написать по-другому — да, написать существенно лучше — вряд ли. Ну а переписывание ради самого переписывания — не лучшая идея.

Практика — критерий истины или «MinWin на коленке»


Для исключения недоразумений, хочу сразу же сказать: то что я буду делать не является MinWin-ом. Не является уже хотя бы потому, что настоящий MinWin содержит минимальный набор пользовательских (user mode) бинарников, я же собираюсь продемонстрировать полностью загруженное ядро (еще одно отличие — MinWin содержит минимальный набор драйверов, у меня же набор драйверов не меняется по сравнению с обычной загрузкой) вообще без пользовательского режима (ок, один процесс и одна dll-ка там все таки есть, но надо же хоть как то показать пользователю, что что-то происходит). Дополнительным поводом к размышлению может служить то, что настоящий MinWin появился в связи с работой по «расслоению» кода Windows 7, то же, что буду делать я в принципе возможно и на XP и даже на NT3.51

Итак, если вдумчиво прочитать то, что написано в предыдущем разделе, можно догадаться, что нам нужно заменить smss на такой, который не инициализирует подсистемы, но при этом все еще остается более-менее интерактивным. smss.exe — это обычный native процесс (приближенно, native приложение — это такое приложение, которое линкуется только с ntdll.dll и соотственно использует для работы только Native API). К счастью для меня Alex Ionescu — бывший главный разработчик ReactOS — уже написал подобное приложение в рамках (давно закрытого) проекта tinykrnl. Это приложение не собирается под amd64, не собирается на последнем WDK, имеет несколько багов, но в целом работает. Следующую картинку можно открыть архиватором — там содержатся исходники и скомпилированный amd64 бинарник небольшого приложения native.exe:


Прошу меня простить, но я не могу выложить готовый образ потому что это нелегально, поэтому выкладываю код, который может собрать vhd-образ из инсталляционного образа.
Следующий код можно исполнить ТОЛЬКО на Win7. Соханить его куда нибудь во временный каталог под именем, к примеру minwin.ps1, положить рядом install.wim (находится в каталоге \sources) c en-us инсталляционного диска Windows 7 (это важно — копируются только нужные для этой локализации NLS файлы), сохранить в этот каталог файл native.exe из прикрепленной выше картинки, перейти в этот самый каталог в elevated консоли и выполнить следующее:
powershell -executionpolicy bypass .\minwin.ps1

Для краткости:
1. Рядом в одном каталоге должны лежать следующие файлы: minwin.ps1, install.wim и native.exe
2. Запускать minwin.ps1 нужно только после смены текущего каталога на каталог, содержащий вышеназванные файлы

Дисклеймер: все нижеследующее Вы делаете на свой страх и риск. Команды довольно очевидны и не должны нанести никакого вреда, но это «наколеночное» творчество, поэтому оно не обязано работать в любых условиях. Не выполняйте этот скрипт, если Вы не понимаете значение КАЖДОЙ команды (тем более, что выполнение должно производиться из-под повышенного пользователя). Если нет — ниже приведена картинка того, как это в конце концов выглядит. В упрощенном варианте можно просто переименовать native.exe в smss.exe, скопировать его поверх существующей smss.exe в уже загруженной виртуальной машине (подойдет любая x64 винда — от XP до 7) и перегрузиться.
Сам скрипт:
$vhdName = "disk.vhd"
$wimName = "install.wim"
$vhdDisk = "V"
$wimMountName = "MountedWim"

md $wimMountName
dism /mount-wim /wimfile:$wimName /index:1 /mountdir:$wimMountName

#del $vhdName
@"
create vdisk file=$pwd\$vhdName type=expandable maximum=128
select vdisk file=$pwd\$vhdName
attach vdisk
create partition primary
format fs=ntfs quick
assign letter=$vhdDisk
active
"@ | diskpart

bcdboot "$pwd\$wimMountName\Windows" /s "${vhdDisk}:"
#cmd /c "$wimMountName\Windows\System32\bootsect /nt60 ${vhdDisk}: /mbr /force"

$disk = gwmi win32_diskdrive -filter "Model = 'Msft Virtual Disk SCSI Disk Device'"
$part = $disk.GetRelated("win32_diskpartition") | select -first 1
$bootmgr = [wmi]"root\wmi:BcdObject.Id=`"{9dea862c-5cdd-4e70-acc1-f32b344d4795}`",StoreFilePath=`"${vhdDisk}:\\boot\\bcd`""
$osloader = [wmi]"root\wmi:BcdObject.Id=`"$($bootmgr.GetElement(0x23000003).Element.Id)`",StoreFilePath=`"${vhdDisk}:\\boot\\bcd`""

$bootmgr.SetQualifiedPartitionDeviceElement(0x11000001, 0, $disk.Signature, $part.StartingOffset)
$osloader.SetQualifiedPartitionDeviceElement(0x11000001, 0, $disk.Signature, $part.StartingOffset)
$osloader.SetQualifiedPartitionDeviceElement(0x21000001, 0, $disk.Signature, $part.StartingOffset)
$osloader.SetStringElement(0x12000002, "\Windows\system32\winload.exe")
$osloader.SetStringElement(0x22000002, "\Windows")
$osloader.SetBooleanElement(0x26000022, $true)

md "${vhdDisk}:\Windows\System32\config\", "${vhdDisk}:\Windows\Fonts", "${vhdDisk}:\Windows\inf", "${vhdDisk}:\Windows\SysWOW64"
copy -r "$wimMountName\Windows\System32\drivers" "${vhdDisk}:\Windows\System32\drivers"
del "${vhdDisk}:\Windows\System32\drivers\termdd.sys"
copy "$wimMountName\Windows\Fonts\vgaoem.fon" "${vhdDisk}:\Windows\Fonts"
copy "$wimMountName\Windows\inf\errata.inf" "${vhdDisk}:\Windows\inf"
copy "$wimMountName\Windows\System32\config\SYSTEM" "${vhdDisk}:\Windows\System32\config"
copy "$wimMountName\Windows\SysWOW64\ntdll.dll" "${vhdDisk}:\Windows\SysWOW64"
copy native.exe "${vhdDisk}:\Windows\System32\smss.exe"

"ntoskrnl.exe", "hal.dll", "ci.dll", "pshed.dll", "clfs.sys", "kdcom.dll", "ntdll.dll", "apisetschema.dll",
"winload.exe", "bootvid.dll", "bootres.dll", "l_intl.nls", "c_1252.nls", "c_437.nls" |% {
    copy (Join-Path "$wimMountName\Windows\System32" $_) "${vhdDisk}:\Windows\System32"
}

@"
select vdisk file=$pwd\$vhdName
detach vdisk
"@ | diskpart

dism /unmount-wim /mountdir:$wimMountName /discard

Выглядит это примерно так:


Если все сделано правильно (и при определенном везении :-) ), то через какое то время в том же каталоге появится файл disk.vhd — его можно запускать в виртуальной машине (тестировалось в VirtualBox, но не вижу причин, по которым это не должно работать в Virtual PC, Hyper-V или еще где нибудь):


Ну и несколько замечаний напоследок.

1. Копируются почти 300 драйверов, загружаются — примерно 100, реально нужны на конкретной системе — штук 10-20.
2. Восьмимегабайтный SYSTEM хайв из install.wim можно вполне нормально заменить на двухмегабайтный из boot.wim, а можно и вообще вручную слепить что нибудь на сотню килобайт.
3. bcdboot копирует все локализации bootmgr-а и несколько мегабайт шрифтов (в основном для CJK) — можно вырезать
4. Можно заметить, что при создании образа удаляется termdd.sys — это сделано не потому, что он не работает. Просто он создает еще одно устройство-клавиатура (которое в нормальном режиме используется для «нажатия кнопок» на удаленной машине в терминальной сессии), а модифицировать native.exe на чтение нажатий со всех клавиатур мне оказалось лень.
5. Графику при загрузке можно подавить и отказаться от bootvid.dll и bootres.dll

Ну и самое главное, win32k.sys в создаваемый образ не копируется, что не мешает этому образу относительно сносно работать вообще без графики. При большом желании, как я уже говорил, можно прикрутить полностью консольную оболочку, можно вырезать Windows подсистему и оставить только Posix (это было бы весьма странным желанием, как по мне, но люди довольно часто хотят странного). Или (еще более странное желание) реализовать нативный X11 поверх NT ядра. Можно заменить smss и «полностью контролировать» все что работает выше ядра, а можно оставить smss и парой правок в реестре изменить набор загружаемых подсистем. Короче, никакой «намертво прибитой к ядру» графики попросту нет.

Спасибо за внимание
@amirul
карма
465,7
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (120)

  • +6
    Я не совсем понял — а для чего это нужно? Что мы получим в итоге? vhd на котором можно будет запускать Х? Или это модифицирует нашу систему? =)
    • +18
      Это нужно исключительно в рамках моего крестового похода за здравым смыслом. Вместо того, чтоб каждый раз доказывать, что «графику в ядре» можно вырезать — мне показалось проще один раз более менее полно изложить свои мысли и теперь можно давать ссылку.
      • +1
        Да, но для чего ее нужно вырезать/невырезать? :) Сделать из windows — windows-core-core? =)
        • +5
          Отличный вопрос на самом деле :-)
          Но есть миф о прибитой намертво графике (на самом деле с точки зрения дизайна это в общем то плохо). Мне показалось не лишним побороться и этой мельницей.

          Да и вообще задача вырезания «лишнего» показалась интересным развлечением на выходные.
          • 0
            Хм… значит говорите можно попробовать поднять свой домен на кофеварке для микроволновки, электроплиты, посудомойки и холодильника? :)
            Хотя наверное лучше на холодильнике, там вроде хард побольше :))))

            З.Ы. А что умеет делать такая ммм… минимальная система? Ну в смысле — для чего ее можно эффективно использовать?
            • +15
              Насчет домена не знаю, но апач «взлетит». Опять таки, повторю, для меня загадка на фига это надо


              Сам MS занялся расслоением, насколько я понимаю для компонентизации. То что пара нижних слоев может работать вообще без всякой мишуры сверху — не более, чем забавный побочный эффект. В винде сейчас что-то около 50 слоев и каждый бинарник принадлежит какому нибудь слою.
              • +2
                В теории это может быть полезно т.к. на серверах все равно мониторов нету, равно как и видеокарт и лишняя сущность в виде графической оболочки — лишняя.
                На практике — не очень представляю как можно виндой пользоваться без графической оболочки и по этому на этих серверах стоит линух.
                • +3
                  где нибудь, когда нибудь:
                  «В вашей винде одна черная консоль! Да все работает, но работать же просто не возможно. Пойду поставлю линукс, там хоть оконный интерфейс есть, не говорю уже о всяких визардах»
                • 0
                  Вы не поверите, но таки есть редакция Windows Server 2008 R2 Server Core, в которой убрали графическую оболочку. Оставили один powershell, а он по мощности ничуть не уступает линуховым шеллам, а местами в силу своей обьектности даже удобнее.
    • +2
      Ну и еще одно следствие из этого: можно сделать версию Win7 «для кофеварок». Ограничения здесь не столько технологические, сколько экономические.
  • +2
    Насколько это всё отличается от устройства ReactOS? Судя по всему, реально с ней сделать такое же?

    Я имею ввиду, что если бы пример базировался на ней, можно было бы смело выкладывать образ, это было бы законно.
    • +3
      На базе реактоса можно сделать подобное — архитектурно они повторяют винду.
      Я, честно говоря, писал это для того, чтоб приоткрыть еще одну грань архитектуры Windows. Вы знаете какое нибудь реальное применение подобному? (без айрони)
      • +2
        Интерес исключительно академический.

        Хотя, в принципе, можно предложить такое применение: существуют разные сервисы только-для-винды, которым не нужна графика — можно было бы их запускать на виртуалке вот в такой обрезаной системе, получая некоторую экономию памяти. Типа веб-интерфейса паруса.
        • 0
          Если при таком раскладе запустится связка IIS + MSSQL, и оно сможеть управляться допустим через ssh, то почему бы и нет? Памяти никогда не бывает много :)
          • 0
            Управляться через ssh однозначно сможет — я ставил в винде openssh, проблема была только с кодировкой (у меня на десктопе utf-8, там — 866).

            Другое дело, что, насколько я понимаю, связка IIS+MSSQL сама по себе достаточно прожорлива. Может статься так, что на её фоне загруженная и уложенная в подкачку графика будет мелкими процентами. Тогда и огород городить нет смысла.
          • 0
            А чем вас не устраивает Windows Server 2008? В нем-же гуй можно вообще штатными средствами отключить. Если что — не бейте — сужу, в целом, как юзер. Не закапывался в подробности реализации
            • +3
              Вы имеете ввиду Server Core? В варианте Server Core гуй есть, т.е. остаётся обычный графический логин-скрин, но при входе в систему запускается только cmd.exe и ничего кроме него. Там можно развернуть AD, соответственно DNS и DHCP, IIS, и есть несколько графических программ — notepad, taskmanager.

              То, что в топике — кардинально другое.
  • +1
    Вот за такие статьи я и люблю Хабр!
    • +38
      Вот смотрите, на Хабре был долгий период отличных низкоуровневых статей, потом пошло на убыль, сейчас эпоха возрождения, когда действительно интересные (и не только низкоуровневые) статьи встречаются все чаще. Самое главное — что таким и должен быть уровень хабра (таким и закладывался, имхо), народ не должен визжать при одном виде hex-редактора или куска power shell скрипта, не должно перехватывать дыхание от патча двух байт.

      Поэтому важно выдержать баланс ситуации, у amirula есть ряд статей, которые улетели в небо, будучи даже толком не осмысленными. Народ просто тупо проорал нечто вида «Хабр торт!» и забился в диком экстазе не прочитав и первой страницы. Нечто похожее вышло со многими топиками за последние пару месяцев — народ видит низкоуровневость темы, херачит плюс и уходит без обсуждения, либо тупо кинув хабрторт в автора.

      К чем я это все. Давайте не будем превращаться в пендосов, у которых 90% треда — «thank you» & etc. Статья (да и весь цикл в целом) действительно заслуживает как минимум уважения и желания взять на работу :) Давайте будем стараться обсуждать серьезные вещи, а не выкрикивать хабрторт и листать дальше. Ну и в таком духе.

      Извините за выхлоп. Мое почтение amirulу.
      • +8
        Извините меня за мое наивное восхищение работой автора, работой, которую никто, кроме него, на Хабре почему-то не догадался проделать, в том числе и я. На мой взгляд, эта статья выгодно отличается от статей уровня «Тысяча и один способ сделать скругленные уголки». Но это сугубо мое личное мнение.
        • 0
          Не хотел вас обидеть, да и цеплять вас было не за что. Не хотел чтоб вас минусовали. Цель преследовалась иная. И про уголки я с вами соглашусь. Но с «не догадался проделать» и прочей шляпой идите в лес :) Лишнее это все, имхо. Если есть желание — в личку, попробую пояснить о чем речь.
      • +2
        С обсуждением проблема в том, что на хабре похоже не так много людей, которые действительно могут вести серьёзное обсуждение по настолько низкоуровневым темам как в этом топике или в статьях этого же автора про управление памятью. Таких людей просто достаточно мало.

        Мне вот например, кроме как сказать «Хабр торт!», обсудить по теме особо и нечего.
        • 0
          С таким же успехом можно десктоп-девелоперам заходить в каждый топик про очередной js-фреймворк & etc и писать «Хабр торт!». Вот я о чем. Если все скатится до банального хабртортания — то как держать планку?
      • +1
        Теоретические выкладки без системного применения не найдут толкового обсуждения на Хабре, здесь же не wasm. Другое дело — новый JS-фреймворк.
        • +1
          Все-таки Хабра — это агрегатор с гигантским коммунити, тут все что угодно приживется. Тем более многие интересные персонажи, в том числе и с андеграунда, здесь периодически появляются.

          Вот вы про wasm вспомнили. Там десяток адекватов, пара адекватов-наркоманов и толстый слой нубов в перемешку с новоявленными «коммерсантами». Тоже самое cracklab (там вообще рейтингомастурбаторы) и прочие. Смотрю последнее время — аж слезы наворачиваются.
  • +10
    Консольная винда. Линуксоиды негодуэ.
    • +14
      Почему, наоборот, безумно интересно. Говорю за себя.
      • –1
        ну да. Я бы еще туда цигвин поставил…
        • +1
          Цигвин работает поверх Win32 и соответственно win32k/csrss должны быть запущены. С другой стороны В ПРИНЦИПЕ можно попробовать открутить win32 подсистему и оставить только posix (psxss.exe), но если бы меня кто нибудь спрашивал, я бы сказал, что от чистого Win32 я не в восторге, но от Posix меня вообще тошнит
          • 0
            Вот насчёт POSIX это зря, он гораздо более логично устроен, чем Win32. У меня в студенческие годы была idée fixe, написать нормальную POSIX-подсистему к NT kernel, т.е. сделать что-то вроде GNU/NT. Правда, к реализации этой затеи я так и не приступил, уж не знаю, к счастью или к сожалению, но вот как-то так.
            • 0
              Какая часть там логична?
            • 0
              >У меня в студенческие годы была idée fixe, написать нормальную POSIX-подсистему к NT kernel
              Зачем? Сертифицированная POSIX подсистема есть в винде ещё начиная с Windows NT.
              Я ставил на винду Gentoo и emerge'ил XFCE (+несколько сотен зависимостей), который вполне сносно работал.
              fotki.yandex.ru/users/sad-wind/view/65339/?page=0
              fotki.yandex.ru/users/sad-wind/view/65344?page=0
              • 0
                Затем, что она фиговая.
        • 0
          Цигвин-то там зачем? Тут уж если ставить, то SUA.
          • 0
            а он тоже имитирует набор утилит GNU? я просто не пользовался SUA. А вот цигвином приходится…
            • 0
              Даже не имитирует, а именно реализует.

              Как выше упоминалось, даже можно запустить Portage в этом SUA и получить «Gentoo Windows». На самом деле это называется «Gentoo Prefix/Portage for Windows». И в этом окружении собирается много что — например, mc мне удалось собрать, openvpn.

              • 0
                Ух ты, а готовые там есть типа демона SSH или cron?
                • 0
                  Кажется, openssh есть.
                • 0
                  Учтите только, что в голом SUA/Interix всё довольно древнее, скажем, gcc 3 и т. п.

                  Лучше сразу ставить Prefix/Portage или что-то подобное.
                  • 0
                    В совсем голом SUA в семёре кроме posix подсистемы вообще ничего нет. Поэтому сразу можно ставить генту, а на пачку GNU от MS забить.
            • 0
              Что значит «имитирует»? Там есть gcc
    • 0
      Кто круче: виндузятник, который через консоль может заставить винду работать или линуксойд, которому, в общем-то, ничего другого не остается (да, я знаю, что есть всякие убунты и т.д.)?
      • +2
        виндузятник круче
    • 0
      Перестал работать в линуксе и стал работать в венде
      Console 2 + Powershell + пара скриптов = нормальная работа
      так что жизнь есть и под вендой

      P.S. Правда подтолкнули к переходу игры и ограниченные ресурсы ноута для виртуализации, а не удобства указанной выше конфигурации
      • +2
        Console2 просто поражает обилием глюков, хоть внешне он и выглядит удобнее, но когда простейший копипаст превращается в мучение из за «особенностей» работы приложения в win7 хочется выть от тоски.
        • 0
          хм… ставил его давно и может быть чего-то настраивал, но глюков нет.
          ставил его именно из-за копипаста ибо cmd и powershell 2 вообще через ":%*:%" копируют.
          Единственное неудобство — копирует тока мышкой, зато автоматом по выделению(выделил, отпустил кнопку и всё в буфере)

          опять же удобно — можно завести большой набор пресетов из микса интерпритатор\startup dir\тема
          • 0
            >Единственное неудобство — копирует тока мышкой, зато автоматом по выделению(выделил, отпустил кнопку и всё в буфере)

            Вот собственно эта часть в вин7 и не работает нормально. Вот все думал отодрать там часть, ответственную за собственно консоль и приделать к этому Qt4 гуй, но код там настолькокривой и ужасный выше моего понимания, что никак не могу это сделать.
            • 0
              я ставил все на win vista, потом перешел на win 7 и всё ок.
              если надо — могу скинуть консоль 2 с конфигом
              но лучше бы Вы сделали гуй хотя на Qt4, хоть на чём еще — цены бы Вам не было!
              еще б с нормальным хистори… эх…
              • +1
                Я бы сделал, но я так и не понял как оно вообще работает. Код там представляет собой наслоение макросов, ужасных конструкций в стиле MFC и прочего спагетти-ада. А каким образом в винде с нуля делать эмулятор терминала я даже ума не приложу.
            • 0
              Гляньте QTermWidget — его не так давно подхватил другой разработчик и довольно активно пилит. В «былые времена» он собирался и под винду, как сейчас обстоят с ней дела — не в курсе, но в любом случае по-моему это будет проще и быстрее, чем приделывать Qt-гуй к Console2.
              • 0
                А это всего лишь отодранная от konsole часть. К сожалению, таки тоже не поддерживает вин.
                Хотя я однажды видел konsole с поддержкой cmd и она даже работала! Но неимоверно криво. Но таскать в винде половину кед ради этого малость неудобно.
          • 0
            Строго говоря, cmd и powershell сами ничего не копируют. В Windows 7 консольное окно рисует и производит обработку всего происходящего внутри процесс conhost, в остальных виндах — процесс csrss. Отличие между этими окнами по дефолту только в цвете и «Quick Edit Mode/Insert Mode».
            • 0
              > Отличие между этими окнами
              «Этими» в смысле между окнами powershell и cmd.
        • 0
          Единственный глюк, с которым я столкнулся в console2 — это не всегда адекватная работа в многомониторных конфиругациях (если свернуть окно в таскбар — оно может развернуться в произвольное место на виртуальном десктопе). С копипастом никогда проблем не имел (может просто не замечал) — не подскажете, в чем именно проблема?
          • 0
            а работает он как-то странно. Особенно непонятно, как вставку текста делать. Нету нормальной истории введённых команд (как и в cmd кстати).
            Ну и из придирок конечно вырвиглазные убогие MFC тулбары. И вообще эмуляторы в стиле yakuake куда удобнее, места не экране вообще не занимают пока нет в них нужды.
            • 0
              Копипаст там настраиваемый. Как клавиатурный так и мышиный:


              История команд есть (F7 — список, F8 — автокомплит и т.п.), но наверное она не нормальная.

              Тулбары — действительно уродские (я их отключаю), хотя они не имеют отношения непосредственно к MFC. Quake-style консоль — можно сделать нечто вроде того (on demand в углу экрана, но без красивых эффектов появления/исчезания), нацепив console2 на горячую клавишу
      • 0
        А зачем для PowerShell Console 2? Есть же PowerShell ISE.
        • 0
          Ну он, мягко говоря, вообще ниразу не подходит.
          К примеру, запуск dev сервера Django в ISE и Console 2
          floomby.ru/content/FSwRPfmCFk/
          Смысл в том, что демон не может выводить логи своей работы
  • НЛО прилетело и опубликовало эту надпись здесь
  • +14
    Просмотрел и понял, что всетаки я в Windows еще чайник…
  • –5
    Так и не понял что к чему. Длинющая последовательность нетривиальных действий, а в итоге нечто, по юзабельности между академическими микроядерными ОС и юниксами времен кислотной революции.
  • 0
    Я правильно понимаю что на этом образе можно поднять какой нить MSSQL/AD/IIS сэкономив сколько то RAM и HDD?
    • +1
      А чем оно кардинально будет отличаться от Windows 2008 R2 (к примеру), кроме возможного пучка геморроя?
    • +2
      поднять их может и получится; но любые веб-сайты, которые хотя-бы ресайзят картинки, содержат вызовы к GDI/GDI+, который вырезан
    • 0
      скорее всего нет, т.к. MSSQL — не native NT application
  • 0
    2 первых ваши статьи воспроизвел дома на ноутбуке и был приятно «удивлен»(-ли?) тому как моя машинка начала грузиться гораздо шустрее. Открытие Моего компьютера стало происходить гораздо быстрее.
    «Пришлось»(это было приятно и полезно) расширить свой кругозор по устройству windows.

    И вот очередная стотья, которая заставит меня покапаться — спасибо вам большое — жду продолжения.
    Вы заставляете меня учиться, а не только смотреть в сторону своей специализации!
  • 0
    Тортище!
  • +1
    >>При большом желании, как я уже говорил, можно прикрутить полностью консольную оболочку, можно вырезать Windows подсистему и оставить только Posix (это было бы весьма странным желанием, как по мне, но люди довольно часто хотят странного). Или (еще более странное желание) реализовать нативный X11 поверх NT ядра.

    Ну если разрабы реактоси что-то такое родят, то можно будет на родную винду это портировать ради фана. Мне вот интересно, есть ли какая-нибудь теоретическая возможность поменять видеорежим в консоле и есть ли там вообще кадровый буффер?
    • 0
      Судя по тому, что всякие «текстовые режимы» (ну, там, сообщение «APIC или не поставлюсь» при установке и прочее подобное) в 2008, Vista и 7 выглядят иначе, нежели в XP, есть подозрение что они что-то такое прикрутили.

      • 0
        «что-то такое» прикручено уже со времён win2k, если не раньше
        • 0
          Не, в NT, 2K, XP, 2003 инсталляция начинается одинаково — экраном с голубым фоном в стандартном текстовом режиме (80x25). Ничего там не прикручено.

          Сравните с инсталлатором Vista, 7 и 2008.
          • 0
            а вы на autochkdsk гляньте, а также на BSOD.
          • 0
            и, кстати, в режиме 25x80 работает только досовая часть инсталлятора, потом оно переключается не то в 30x80, не то ещё во что-то
    • 0
      Любая аналогия лжива (с) Кто вспомнит из какой это книги, напишите пожалуйста — забыл :(
      • +1
        Звезды — холодные игрушки (С. Лукьяненко)
  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      Я думал помру со смеху…
      Спасибо! =)

      <Вытирая слезы> Этот коммент разъяснил мне что к чему мне в этой статье!
    • +1
      Поправьте, если я ошибаюсь, но это Вы так искрометно шутите о том, что Win32 приложения не будут работать без Win32 подсистемы? Хм, кто бы мог подумать?

      «При помощи нехитрых приспособлений» можно вообще открутить win32, оставить там только SUA/Interix и пугать детей (видел человека, запустившего портаж на SUA). Но зачем?

      Цель показать, что никаких архитектурных препятствий полной смены (или полного отказа) графики нет, а то, что не реализовано — ну так помимо того, что это на фиг не надо (в отличие от X — win32 «не поломана» и чинить там особо ничего и не надо), так еще и "в принципе можно прикрутить на скриптах" — это же любимый аргумент «против винды».
      • 0
        > чинить там особо ничего и не надо
        «Чинить» as in «complete rewrite» (как в случае с Wayland). Естественно никто в здравом уме не будет утверждать, что win32 совершенна и там не может быть никаких усовершенствований.
        • 0
          «complete rewrite» (как в случае с Wayland)

          Думаю, я не единственный скептик по поводу Wayland. Он перспективен, но не как замена X. А Xorg не сломан.
      • НЛО прилетело и опубликовало эту надпись здесь
        • НЛО прилетело и опубликовало эту надпись здесь
          • 0
            И вот здесь встает вопрос, заданный в первом же комментарии: «Но зачем?». Ну то есть, да, я слышал об attack surface и все такое, но есть ли какие конкретные примеры хотя бы local EoP уязвимостей в win32k (хотя удаленный вектор был бы гораздо интереснее)? Я также слышал о ненужном использовании ресурсов — если оно не будет использоваться — оно попадет в своп и всего делов, в физической памяти останется только какой нибудь WS-Man/PSRemoting.

            В общем, чисто практически никаких проблем никогда и не было. Теоретически, сильное связывание (tight coupling) могло бы означать проблему в дизайне — но его там, как видим, нет.
  • 0
    Не знаю спрашивал кто нибудь уже или нет, но если какая нибудь литература в которой хорошо описываются все внутренности Windows?
    • +1
      соломон + руссинович
    • +1
      Есть и обычно бережно хранится внутри Microsoft ;)
    • 0
      Выше сказали про Соломона с Руссиновичем(а в свежем издании ещё и Ионеску) и исходники ReactOS. Там хоть и не дословная реализация, но пониманию способствуют.
  • НЛО прилетело и опубликовало эту надпись здесь
    • +4
      win:  copy /b image.jpg+archive.rar result.jpg
      *nix: cat  image.jpg archive.rar >  result.jpg
      
    • +1
      на самом деле больше интересует вопрос «зачем?»
  • +5
    >Следующую картинку можно открыть архиватором — там содержатся исходники и скомпилированный amd64 бинарник небольшого приложения native.exe

    извращенцы на хабре! :)
    • +1
      а по мне так удобно и в контексте. самораспаковывающиеся архивы тоже можно открыть. тоже изврат? :)
  • +2
    А я бы посмотрел на X поверх NT ядра:)
  • –2
    Если честно, я нихуя не понял, но, как говорится, на всякий случай удачи :)
  • 0
    я ничерта не понял из топика :(
    Совсем не разбираюсь во всем этом низкоуровневом программировании, поэтому хотелось бы где нибудь в начале или конце топика описание простыми словами что и зачем делается и что получается в итоге
    • +5
      Хм. Дело началось с того, что автору надоело (ветка) в спорах постоянно приводить одни и те же аргументы по поводу того, что в Windows графическая подсистема (штука, рисующая окошки-кнопочки, раб. стол…) «вшита» в ядро Windows, потому она (Windows) тормозит. В статье автор описал, как он «отключил» эту подсистему без функционального ограничения остальных частей. Этим автор говорит нам, что ядро никак не зависит от наличия этой подсистемы — она находится вне его, потому просто не может тормозить именно из-за этого. Вот и всё, как говорится, just for fun.
      • 0
        Спасибо, теперь все намного яснее!
  • 0
    Вы, выражаясь языком линуксоидов, удалили ядерный модуль и обнаружили, что система продолжает работать? Похвально :)

    Ответьте на один вопрос: код win32k.sys выполняется в пространстве пользователя или ядра?
    • 0
      Возможно, я чего-то действительно не понимаю, но если я дебаггером изуродую структуры win32k — система падает в BSOD. А это, если мне память не изменяет, чисто ядерный механизм.
      • 0
        Даже если не уродовать дебаггером структуры x server — он и без того падает частенько. Утягивая за собой всю несохраненную работу, да. А если брать дебаггер, то через /dev/kmem (открытый на запись) очень легко увести систему в кернел паник. Usermode-овость x server-а не более, чем ширма, «под капотом» там все так же низкоуровнево, но гораздо более запутанно — как раз таки для повышения производительности
        • 0
          Не путайте: одно дело — уронить графическую подсистему, другое — уронить всю ОС.
        • –1
          Да, дебаггер на kmem — это прямое вмешательство в ядро. Вы утверждаете, что win32k.sys не является частью ядра. Взаимоисключающие параграфы?
          X-сервер работает в чистом юзерспейсе, вся ядерная часть — это драйвера видеокарты.
          • 0
            вообще говоря, win32k.sys — не часть ядра, формально, а всего лишь модуль, который, да, работает внутри ядра, но не является его частью.
            • 0
              No comment.
              • 0
                а что комментировать-то? сморозили глупость, чего уж там…
            • 0
              не часть ядра, формально, а всего лишь модуль

              Не надо рассказывать линуксоидам о том, что модули не являются частями ядра. Потому, что почти весь линукс можно собрать как модулями, так и монолитом. И разницы ровно 0.
              • 0
                Вот именно, не надо линуксоидам-то рассказывать. Есть разница между Linux kernel и NT kernel. То, что у нас некоторые части ядра можно собрать модулями, не значит, что у них это тоже так, всё же win32k.sys есть вещь очень обособленная.
                • 0
                  >всё же win32k.sys есть вещь очень обособленная.
                  Настолько, что без неё подняли WinNT без WinAPI. Офигенно. Китайцы WinAPI в ядро линукса вкомпиливают, а тут его из NT выковырнули вместе с графикой.
    • 0
      Да, выполняется в ядре. Если Вы паче чаянья соберетесь сравнивать с X11, ответьте на вопрос: от имени какого пользователя запускается x server, какие ограничения имеет этот пользователь, открывает ли x server «устройство» /dev/kmem на запись.
      • 0
        от имени какого пользователя запускается x server, какие ограничения имеет этот пользователь, открывает ли x server «устройство» /dev/kmem на запись.

        root, никаких, иногда. Но это происходит в ring3.
        И иксы при особом желании запускаются без прав рута. Особенно с KMS, который чем-то похож на win32k.sys, но делает на порядки меньше.
      • +2
        X-сереры разные бывают. Xvfb, например. От любого пользователя можно запустить, даже без KMS. :)

  • 0
    за наглядную демонстрацию большое спасибо, но, не умаляя её значимости, замечу, что вообще такие финты известны уже очень давно, а «живой» вариант винды без гуёв давно был как минимум в 1999 году — windows recovery console или как-то так.

    P.S. Linux ileemo 2.6.35-trunk-686 #1 SMP Tue Aug 17 14:30:48 UTC 2010 i686 GNU/Linux
    • 0
      Спасибо за уточнение — забыл о нем. WinRE инициализирует графику, поэтому в качестве примера не рассматривался, а о recovery console как то даже и не вспомнил.
    • 0
      Своеобразно. Что же, в recovery console можно сервисы стартовать?
      • 0
        В этой штуке, которая здесь описана — тоже нельзя (ну то есть «в принципе» можно, ага).
  • 0
    Работа Recovery Console в Windows 2000 (http://support.microsoft.com/kb/229716) — насколько близка к тому режиму работы, который вы описываете?
  • 0
    Или, например, работа в Native режиме (например через native shell hex.pp.ua/nt-native-applications-shell.php)? Графики в этот момент тоже ведь нет?
    • 0
      О, так это же тот бинарник и есть. Все понятно.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.