Долгая история системных папок Microsoft Windows

Вместе с автором этой небольшой статьи мы совершим экскурсию по каталогам, в имени которых содержится слово «system». А начнем с того, что давным-давно, еще во времена 16-разрядной Windows, когда все было просто и понятно, жил да был каталог по имени C:\Windows\System...

02.11.2010 16:44,

С появлением Win32 возник второй системный каталог, получивший название C:\Windows\System32. В нем хранились 32-разрядные системные файлы, а 16-разрядные остались в старом системном каталоге. Pа одним исключением — в Windows 95 и 32-разрядные, и 16-разрядные системные файлы «жили» в одном каталоге, сохранившем свое старое имя C:\Windows\System. Сказанное дальше никакого отношения к Windows 95 иметь не будет.

Пакетные файлы выполняли программы из каталога C:\Windows\System32 , предполагая, что разрядность программы соответствует разрядности операционной системы. Это было неявное предположение, но оно подразумевалось по самой природе происходящего. Если бы каталог System32 содержал только 32-разрядные программы, то пакетный файл, запускающий программу C:\Windows\System32\REG .EXE для модификации параметров реестра, выполнял бы 32-разрядную версию REG.EXE, меняя таким образом 32-разрядную имитацию реестра, а не реальную 64-разрядную версию. С другими типами файлов со сценариями (например, с REG-файлами) возникала бы такая же проблема.

Есть масса 32-разрядных программ, в которых в коде «зашито» обращение к каталогу System32, а не к функции GetSystemDirectory. После перекомпиляции этих программ для работы в 64-разрядной Windows они все равно в поисках 64-разрядных файлов будут обращаться к каталогу System32. Пути, указанные в конфигурационных файлах или реестре, должны быть «понятными» как 32-, так и 64-разрядным процессам и при этом ссылаться на тот или иной каталог в зависимости от «разрядности» вызывающей программы.

Дело ясное, что дело темное…

Чтобы выбраться из этой запутанной ситуации, в команде разработчиков Windows решили, что в 64-разрядной системе каталог System32 будет содержать 64-разрядные файлы, а на 32-разрядной — 32-разрядные же файлы. Число «32» — всего лишь часть имени и ничего не означает. Это похоже на «DVD» — это только имя и в действительности никого интересует, как оно расшифровывается и расшифровывается ли вообще. А сколько крупных компаний официально поменяли название на последовательности символов, которые раньше что-то означали, но теперь утратили первоначальный смысл — HSBC, KFC, BP или KPMG.

Перенаправление в файловой системе для 32-разрядных процессов добавляет еще один уровень сложности к этой и так уже сильно запутанной истории. Когда 32-разрядный процесс обращается к каталогу C:\Windows\System32в 64-разрядной системе, он перенаправляется в каталог C:\Windows\SysWOW64 , где собственно и хранятся 32-разрядные системные DLL-библиотеки.

В итоге System32 следует считать немного странным имеем для каталога, где хранятся DLL-библиотеки той же разрядности, что и приложение, обращающееся к этому каталогу. В более идеальном мире что-то подобное назвали бы, к примеру, каталогом SysExec, потому что именно в таком каталоге размещались бы файлы разрядности, соответствующей среде выполнения.

…но это не конец истории!

Что, если надо обратиться к реальному 64-разрядному системному каталогу из 32-разрядного процесса? Механизм перенаправления в файловой системе обращение к каталогу C:\Windows\System32переадресует в каталог C:\Windows\SysWOW64 . Можно в программе использовать функции с неуклюжими названиями типа Wow64DisableWow64FsRedirection, но это отключит перенаправление для всех операций, пока его снова не включат. Это создает неудобства, когда надо сделать что-то более сложное, чем открытие одного файла. При выполнении сложной операции это может привести к обращению к многим файлам одновременно или созданию рабочих потоков.

На этом наша экскурсия по каталогам, содержащим слово «system», заканчивается. Если вы все еще путаетесь, просто помните, что функция каталога редко соответствует его имени.

Оцените материал:  
(Голосов: 25, Рейтинг: 4.04)

Каждый вечер мы будем присылать вам одно письмо со всеми опубликованными за день материалами. Нет материалов - нет писем, просто и удобно (другие варианты).

Материалы по теме


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