Welcome to The Passion Of Code Laboratory!!!Статьи

Реестр Windows изнутри и снаружи

Автор: Bill Prisoner / TPOC

Введение

Реестр Windows(windows registry) это база данных операционной системы Windows. Реестр появился в Windows начиная с версии Windows NT 3.5. До этого в ОС фирмы Microsoft использовались ini файлы, а также autoexec.bat, config.sys и подобные им. Эта база данных нужна для того чтобы хранить информацию о конфигурации операционной системы и программах установленных в ней. Решение об изменении вида хранения конфигурационной информации было принято из-за того, что ini файлы не могли удовлетворить всех потребностей, а также затормаживали систему. Представьте себе что при загрузке ОС считывает информацию из файлов. После чтения информации из одного файла она зарывает его и переходит к другому и т.д. Работа с большим количеством файлов могла сильно замедлять работу системы. Такая же картина была и с приложениями. Структура самих ini файлов была удобной для человека, но не для компьютера. Размер ini файлов был ограничен. В файл Win.ini записывалась информация о приложениях. И представьте когда его размер был уже 64 Кбайта новые приложения устанавливать было нельзя. На практике граница была не 64 Кбайта, а 32. А всё что было записано выше младших 32-х плохо считывалось. Разработчики Windows объединили все ini файлы в одну централизованную базу данных которую и назвали – реестр. Если и после этого и остались какие файлы, то только для совместимости со старыми версиями ОС. С Win32 API функциями также имена и некоторые структуры остались называться также хотя иногда это противоречит здравому смыслу. Всё это было сделано для того чтобы облегчить переход к новому.
Теперь вся информация о вашей рабочей среде храниться в реестре. Даже то, что вы сейчас делаете – нажимаете на клавиши или двигаете мышкой, всё это отражается в реестре, не говоря уже о том, какие программы установлены, информации о типах файлов, оборудовании, сетевых настройках. Если конфигурационной информации слишком много по объёму, то в реестре храниться ссылка на файл, где находиться эта конфигурационная информация. «Много по объему» означает – больше 1 или 2х кБайт. Обычно двоичный выполняемый код никогда не храниться в реестре.

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

Файлы реестра

Реестр храниться в нескольких файлах в зависимости от версии ОС. В этом документе описывается реестр Windows NT. Я подразумеваю под «Windows NT» - Windows NT, Windows 2000,Windows XP. В Windows NT реестр в хранится в файлах находящихся в каталогах %SystemRoot%\system32\config и %SystemDrive%\Documents and Settings\%USERNAME%. Каждый файл в этом каталоге является кустом реестра. Куст в терминологии ОС означает набор разделов не изменяющихся в процессе работы, т.е. например, при выключении компьютера куст не удаляется в отличии от некоторый разделов которые могут создаваться динамически, например при загрузке компьютера. Так, раздел HKEY_LOCAL_MACHINE\Hardware, который строиться динамически распознавателем аппаратных средств, кустом не является. Каждый куст реестра ассоциирован с набором стандартных файлов. В таблице ниже перечислены кусты реестра и ассоциированные с ними файлы.

Ветвь реестра 

Имена файлов

HKLM\SAM

HKLM\Security

HKLM\Software

HKLM\System

HKCC

HKU\.DEFAULT

Файлы не ассоциированные с разделами

HKCU

Sam, Sam.log, Sam.sav

Security, Security.log, Security.sav

Software, Software.log, Software.sav

System, System.alt, System.log, System.sav

System, System.alt, System.log, System.sav

Default, Default.log, Default.sav

Userdiff, Userdiff.log

Ntuser.dat, Ntuser.dat.log

 

Все файлы ассоциированные с кустами кроме файлов Ntuser.dat, Ntuser.dat.log находятся в каталоге %SystemRoot%\system32\config, а Ntuser.dat, Ntuser.dat.log находятся в %SystemDrive%\Documents and Settings\%USERNAME%. Файлы не ассоциированные не с одним их кустов Userdiff и Userdiff.log чтобы старые профили(до Windows NT 4.0) могли использоваться в новых версиях ОС. Т.е. мы берем файл профиля пользователя из например Windows NT 3.5 и вместо текущего Userdiff вставляем этот и наш профиль обновляется.
В таблице были перечислены файлы 4х типов. Давайте посмотрим что они означают:

файл без расширения – Содержит копию куста

alt – содержит резервную копию куста HKML\System. Только раздел с именем System имеет файл с расширением alt.

log – Содержит журнал транзакций, т.е. информацию об изменениях в соответствующем кусте. Этот файл служит дл поддержки надёжности ОС.

sav – содержит копии файлов куста в том виде в котором они были на момент завершения текстовой фазы установки.

В Windows присутствует ограничение на максимальный размер реестра. Чтобы задать в Windows 2000 максимальный размер реестра зайдите Свойства системы\Дополнительно\Параметры быстродействия\Изменить\Виртуальная память\Размер системного реестра. В Windows XP почему-то убрали эту возможность и нам надо править реестр. Нужное значение находиться в параметре HKLM\System\CurrentControlSet\Control\RegistrySizeLimit и указывается в байтах. Этот параметр предохраняет заполнение невыгружаемого пула приложения данными реестра. Невыгружаемый пул – это виртуальная память процесса предоставленная системой для хранения кода и данных и которая может выгружена(сброшена на диск).

Структура реестра

Реестр состоит из 6 корневых разделов(root keys). В этих разделах могут содержатся другие вложенные разделы(subkeys) и параметры т.д. Важно заметить, что в отличии от обычных разделов корневые разделы удалять нельзя. В каждом разделе реестра храниться безымянный параметр обозначаемый в regedit.exe как (По умолчанию). Собственно сама информация храниться в параметрах реестра. Параметры могут быть различных типов которые перечислены в таблице ниже.
 

Тип

Описание

REG_BINARY

REG_DWORD

REG_EXPAND_SZ

REG_MULTI_SZ

REG_SZ

REG_LINK

REG_DWORD_BIG_ENDIAN

 

REG_DWORD_LITTLE_ENDIAN

 REG_NONE 

Двоичные данные произвольной длины

32-битное число

Строка переменной длины

Массив строк

Текстовая строка фиксированной длины

Символьная ссылка

32-битное число, в котором первым является старший байт. Эквивалентно REG_DWORD.

32-битное число, в котором первым является младший байт. Эквивалентно REG_DWORD.

Нетипизированный параметр


Всего параметров 11. Описание остальных можно посмотреть в Win32 API Reference. В большинстве случаев используются первые 5. Все строковые параметры хранятся в Unicode-формате. В этом формате каждый символ кодируется 2 байтами. Служебным типом данных является тип REG_LINK который позволяет создавать символические ссылки на другие параметры или разделы. Но в regedit.exe нельзя использовать тип REG_LINK. Если вам это необходимо, то используйте стороннее программное обеспечение или API функции(см. ниже). Все названия корневых разделов начинаются с буквы «H», потому что они представляют собой Win32-хэндлы.
Вот описание корневых разделов:

Раздел HKEY_LOCAL_MACHINE

Содержит глобальную информацию о конфигурации компьютера. Информация содержащаяся здесь действует применительно ко всем пользователям в системе. На верхнем уровне иерархии для подразделов этого раздела имеются ссылки которые называются HKEY_CLASSES_ROOT, HKEY_CURRENT_CONFIG и HKEY_DYN_DATA.

Подраздел HARDWARE

Описание аппаратного обеспечения системы и все сопоставления драйверов с устройствами. Диспетчер устройств Windows смотрит всего лишь этот раздел реестра. Если смотреть через редактор реестра, то мы мало чего увидим, потому что много параметров скрыто. Но мы можем использовать API функции для получения этих значений.

Подраздел SAM

Здесь находиться информация о локальных учётных записях и группах, например пароли, определения групп и сопоставления с доменами. Windows 2000 Server, работающий как контроллер, хранит учетные данные домена и групп в Active Directory – базе данных, которая содержит общедоменные параметры и сведения. По умолчанию дескриптор защиты раздела SAM сконфигурирован так, что к нему не имеет доступ даже администратор.

Подраздел Security

Здесь хранятся данные которые относятся к общесистемным политикам безопасности, а также сведения о правах назначенных пользователям и хранящихся паролей не относящихся к учетным записям системы. По умолчанию содержимое этого подраздела недоступно для просмотра, поскольку параметры защиты разрешают доступ только по учетной записи System.

Подраздел Software

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

Подраздел System

Здесь хранится общесистемная конфигурационная информация требуемая при загрузке системы. Эта информация критична для загрузки системы поэтому Windows делает её копию, называемую последней удачной конфигурацией(last known good control set).

Раздел HKEY_CLASSES_ROOT

Cодержит двух основных типов – сопоставления расширений файлов и регистрационные данные COM-классов. Информация о классах хранится в разделе HKCU\Software\Classes. Регистрационные данные классов специфичные для текущего пользователя хранятся в файле “\Documents and Settings\%USERNAME%\Local Settings\Application Data\Microsoft\Windows\Usrclass.dat”. До ОС Windows 2000 не было регистрационных данных классов для каждого пользователя, были только общесистемные данные. С связи с этим непривилегированные пользователи не могут изменять общесистемные данные классов.

Раздел HKEY_CURRENT_USER

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

Раздел HKEY_USERS

Здесь содержаться копии разделов HKEY_CURRENT_USER для всех профилей пользователей в системе. Имя подраздела соответствует SID’у пользователя. Здесь также присутствует подраздел .DEFAULT связанный с профилем рабочей станции по умолчанию. Этот профиль предназначен для процессов выполняемых под системной учетной записью.

Раздел HKEY_CURRENT_CONFIG

Это ссылка на текущих профиль оборудования, хранящийся в HKLM\System\CurrentControlSet\Hardware Profeles\Current.

Раздел HKEY_PERFORMANCE_DATA

Это раздел который обеспечивает доступ к счетчикам производительности Windows. Но получить доступ к нему можно только используя API-функции.

Резервирование реестра

Реестр является базой данных, критичной для функционирования системы. Если файлы реестра повредятся, это чревато потерей работоспособности ОС. Для того, чтобы поврежденный реестр можно было восстановить производят его резервирование. Скопировать файлы обычным способом не получиться, потому что они открыты другими приложениями. Есть несколько различных способов для резервного копирования. Ниже приводиться их описание.

1) Резервирование с помощью программы архивации Windows. Запустить эту программу можно из меню пуск: "Пуск\Программы\Стандартные\Служебные\Архивация данных" или в командной строке набрать ntbackup. При выполнении резервного копирования в этой программе из набора Состояние cHCTeMbi(System State) система сохраняет копии файлов реестра в папке %SystemRoot%\repair. Для восстановления необходимо создать дискету аварийного восстановления(ЕRD) в этой же программе. При создании этой дискеты делается резервная копия системы. Фйалы реестра копируются в папку указанную выше. Понадобиться всего одна дискета. При загрузке с этой дискеты программа будет использовать файлы из папки repair.

2) Можно экспортировать весь реестр или его часть в reg-файл иcпользуя редактор реестра Windows. Используя такой способ естественно реестр резервируется не полностью. Например раздел SAM не резервируется вообще.

3) Если на системном диске файловая система FAT32, то можно загрузиться с системной дискеты и скопировать файлы реестра куда-нибудь. Если файловая система NTFS, то необходимо применять спец программы для доступа к NTFS из операционных систем DOS,Win9x/ME и др. Одна из таких программ называется NTFSDOS. В этом случае можно также использовать параллельно установленную ОС Windows 2000/XP для копирования файлов.
Наиболее предпочтительным является первый способ, т.к. он поддерживается системой.
Безопасность реестра
В ОС Windows 2000/XP можно поставить специальные разрешения на доступ к любому разделу для определенного пользователя. Такая схема называется управление избирательным доступом. Вот список всех разрешений которые могут быть применены для разделов реестра:


• Полный доступ
• Запрос значения
• Задание значения
• Создание подраздела
• Перечисление подразделов
• Уведомление
• Создание связи
• Запись DAC
• Смена владельца
• Чтение разрешений

Безопасность реестра поддерживается стандартными механизмами защиты объектов Windows.

Структура reg-файлов

Reg-файл - это файл имеющий определенный формат и позволяющий импортировать параметры в реестр. В первой строке файла обязательно должно быть введено REGEDIT4 или Windows Registry Editor Version 5.00(для Windows 2000/XP). Соблюдайте регистр. После этого текста ОБЯЗАТЕЛЬНО должна быть пустая строка. Затем, указывается раздел реестра, в котором надо прописать или изменить какие-то параметры. Название раздела должно быть заключено в квадратные скобки [...]. Ниже прописываются параметры, которые надо добавить, по одному параметру в строке. Вот пример, чтобы мне не расписывать элементарные вещи:

REGEDIT4
[HKEY LOCAL_MACHINE\HARDWARE] ;просто создание раздела HARDWARE
[HKEY_LOCAL_MACHINE\HARDWARE1];запись в раздел HARDWARE 1 параметры со значениями
"paraml "= "znacheniel"
"param2 "= "znachenei2 "
"раrатЗ "= "znachenie3 "
Последняя строка в файле должна быть ПУСТОЙ. Вот формат параметров которые можно добавлять:
REG_SZ: "param"="znacheniel"
REGBINARY: "param"=hex:XX,XX,XX,XX,XX.. .("param"=hex:4d,5d,33,02,51) – двоичные данные
REG_DWORD:"param"=hex:XXXXXXXX("param"=hex:00000002) – число DWORD
В реестре существуют параметры "По умолчанию" ("Default"). Чтобы присвоить им какое-то значение
через reg-файл, надо добавить такую строку:
@="znachenie"
Для удаления раздела можно использовать конструкцию следующего вида
[-имя_раздела], например [-HKEY_LOCAL_MACHINE\Software\QuickSoft\QuickStart]
Для удаления параметра используют конструкцию следующего вида
[HKEY CURRENT USER\Software]
"ххх"=-, где ххх-имя удаляемого параметра.

Чтобы посмотреть примеры reg-файлов можно экспортировать какой-нибудь раздел из реестра.

API функции для работы с реестром

При программировании приложений программы используют реестр для хранения своих
конфигурационных данных, а также для получения различной информации. Интерфейс WinAPI
предоставляет набор функций для работы с реестром. Вот их список:
RegCloseKey - закрыть ключ
RegConnectRegistry - подключиться к удаленному реестру
RegCreateKey - создать раздел (для Windows 3.1)
RegCreateKeyEx - создать раздел (для всех версий Windows выше Windows 3.1)
RegDeleteKey - удаление раздела
RegDeleteValue - удалить параметр
RegEnumKey- перечисление всех ключей в данном открытом ключе (для Windows 3.1)
RegEnumKeyEx - перечисление всех ключей в данном открытом ключе (для всех версий Windows
выше Windows 3.1)
RegEnumValue - перечисление всех параметров в данном открытом ключе
RegFlushKey - записывает все изменения данного открытого ключа на диск в файл реестра
RegGetKeySecurity - восстанавливает копию описателя защиты для данного открытого ключа
RegLoadKey - загружает подключ в разделы HKEY_USER или HKEY_LOCAL_MACHINE из HIV файла
RegNotifyChangeKeyValue - уведомляет вызывающую программу об изменении атрибутов или состава
ключа
RegOpenKey - открыть ключ (для Windows 3.1)
RegOpenKeyEx - открыть ключ (для всех версий Windows выше Windows 3.1)
RegQuerylnfoKey - возвращает информацию о ключе
RegQueryMultipleValues - возвращает тип и данные для списка параметров
RegQueryValue - считать значение параметра (для Windows 3.1)
RegQueryValueEx - считать значение параметра (для всех версий Windows выше Windows 3.1)
RegReplaceKey - заменяет файл ассоциированный с ключом и все его подключи новым файлом
RegRestoreKey - читает информацию из файла реестра и записывает в реестр
RegSaveKey - сохраняет ключ и все его подключи в новый файл
RegSetKeySecurity - задает параметры безопасности для текущего открытого ключа
RegSetValue - изменить параметр (для Windows 3.1)
RegSetValueEx - изменить параметр (для всех версий Windows выше Windows 3.1)
RegUnLoadKey - выгружает ключ и подключ из реестра
 

Пример приложения работающего с реестром

В этом разделе находиться пример приложения работающего с реестром. Программа при нажатии на кнопку изменяет файл подкачки на два - c:\pagefile1.sys и d:\pagefile1.sys.

;файл ресурсов l.rc
#define IDD_DIALOG1 101
#define IDC_EDIT1 1000
#define IDC_BUTTON1 1001
MYDIALOG DIALOG DISCARDABLE 0, 0, 134, 50
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Change Paging File by ТРОС"
FONT 8, “MS Sans Serif”
BEGIN
LTEXT "Эта программа изменяет файл покачки с текущего на c:\\pagefile.sys",
IDC_STATIC,4,4,128,18
PUSHBUTTON "Изменить",IDC_BUTTON1 ,42,26,51,17
END


 

;исходный файл work.asm
.386p
.model flat,stdcall
option casemap:none
;----------------------IncludeLib and Include----------------------------
includelib f:\tools\masm32\lib\user32.lib
includelib f:\tools\masm32\lib\kernel32.lib
includelib f:\tools\masm32\lib\gdi32.lib
includelib f:\tools\masm32\lib\advapi32.lib
include f:\tools\masm32\include\windows.inc
include F:\Tools\masm32\include\proto.inc
;----------------------End IncludeLib and Include-----------------------
IDC_BUTTON1 equ 1001
.data
hInstance dd ?
hDialog dd ?
DlgName db "MyDialog",0
hHook dd ?
RegName1 db "SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management",0
Name1 db "PagingFiles",0
Value db "C:\pagefile1.sys 384 512",13,10,"D:\pagefile1.sys 384 511",0
Size1=$-Value
hKey dd ?
.code
start:
;------------------------------------
push 0
call GetModuleHandleA@4
mov hInstance,eax
push 0
push DialogProc
push 0
push offset DlgName
push hInstance
call DialogBoxParamA@20
mov hDialog,eax
push 0
call ExitProcess@4
DialogProc proc
;-----------------------------------Enter procedure------------------------------
push ebp
mov ebp,esp
push ebx
push esi
push edi
;-------------------------------End Enter procedure----------------------------
mov eax,dword ptr [EBP+0Ch]
cmp eax,WM_CLOSE
je CLOSE
cmp eax,WM_COMMAND
je COMMAND
mov eax,FALSE
jmp exit
;------------------------------WM_COMMAND-------------------------------
COMMAND:
mov ax,word ptr [EBP+10h]
cmp ax,IDC_BUTTON1
je KILL
jmp exit
KILL:
push offset hKey;адрес hKey
push KEY_SET_VALUE;права доступа
push 0
push offset RegName1;адрес строки с именем раздела
push HKEY_LOCAL_MACHINE
call RegOpenKeyExA@20
push Size1;размер записываемого значения
push offset Value
push REG_MULTI_SZ
push 0
push offset Name1;имя параметра
push hKey; хэндл открытого ключа реестра
call RegSetValueExA@24
push hKey
call RegCloseKey@4
jmp exit
;------------------------------End WM_COMMAND-------------------------
;------------------------------Close Window-------------------------------------
CLOSE:
push 0
push dword ptr [EBP+8h]
call EndDialog@8
mov eax,TRUE
;------------------------------End Close Window-------------------------------
exit:
;-----------------------------------Leave procedure------------------------------
pop edi
pop esi
pop ebx
pop ebp
ret 16
;--------------------------------End Leave procedure---------------------------
DialogProc endp
end start

Реестр изнутри

Ну что же копнём поглубже и заглянем внутрь ОС Windows. Взглянем как же устроен реестр изнутри. Эта информация дана только для ознакомления. Если вы хотите больше знать внутреннем устройстве реестра, то читайте справочный файл Technical Reference to the Windows 2000 Registry(Regentry.chm) который можно достать вместе с Microsoft Windows Resourse Kit.
Реестром Windows управляет диспетчер конфигурации – компонент исполнительной системы отвечающий за поддержку реестра. Как упоминалось выше, реестр состоит из нескольких кустов. Имена файлов кустов и их пути фиксированы. Куст делиться на блоки по 4 кБ(4096 байт). Размер куста увеличивается кратно размеру блоков. Первый блок куста называется базовым блоком. Он включаем базовую информацию о кусте в том числе сигнатуру regf, идентифицирующую файл как куст, порядковые номера, метку времени последней записи в куст, номер версии формата, контрольную сумму и внутреннее имя файла реестра. Диспетчер конфигурации упорядочивает хранимые в кусте данные с помощью контейнеров, которые называются ячейками. Ячейка может содержать раздел, параметр, дескриптор защиты, список подразделов или список параметров раздела. В зависимости от того что храниться в ячейке в её заголовке присутствует сигнатура kn – раздел, kl – символьная ссылка, kv – параметр, ks – дескриптор защиты. Над ячейками по размеру находятся приемники(bin). Размер приемника равен размеру ячейки, округленного до ближайшего большего значения кратного размеру блока. Пространство между концом ячейки и концом приемника считается свободным, и диспетчер конфигурации может помещать в него новые ячейки. Приемник также имеет заголовок в котором есть сигнатура hbin, размер приемника и смещение в файле куста. Приемники используются для ускорения работы реестра. Система определяет пустой приемник(приемник не содержащий ячейки) или нет и может не загружать его. Также система в целях оптимизации может объединять смежные пустые приемники. Эта оптимизация происходит при работе API функций.
Ссылки, образующие структуру реестра, называются индексами ячеек. Индекс ячейки представляет собой смещение в файле куста. Например, ячейка раздела называемая также узлом раздела, содержит в заголовке индекс родительской ячейки, т.е. смещение в файле куста на раздел родителя для данного раздела. Для оптимизации поиска подразделов и параметров диспетчер конфигурации сортирует ячейки списков подразделов в алфавитном порядке. Если нужно найти подраздел диспетчер конфигурации использует двоичный поиск. При этом он сразу обращается в середину списка. Если искомое имя в соответствии с алфавитным порядком находиться перед разделами из середины списка, диспетчер узнает что оно храниться в первой половине списка подразделов. В ином случае оно должно быть во второй половине списка подразделов. И так до тех пор, пока диспетчер конфигурации не найдет искомый подраздел или не обнаружит его отсутствие. Ячейки списка параметров не сортируются, так что новый параметры добавляются в конец списка.
Для получения более отчетливого представление я советую вам просмотреть какой-нибудь файл куста. Например хранящийся в папке %SystemRoot%\system32\config. Если вы хотите знать все структуры читайте файл справки про реестр указанный выше. Там содержится исчерпывающая информация для программистов. Используя полученные знания вы можете написать свой редактор реестра под DOS или Windows.

Советы для работы

• С помощью программы reg можно редактировать реестр из командной строки. Для получения информации об использовании этой программы наберите reg в командном интерпретаторе.
• Доступ к реестру можно получить вне ОС, загрузившись с помощью программы ERD Commander компании WinInternals. Она позволяет получить доступ к реестру, файловой системе NTFS(New Technology File System), и изменять пароли пользователей в том числе и администратора.
• Запретите доступ непривилигированным пользователям к каталогу %SystemRoot%\repair, а лучше перенесите эти файлы в более безопасное место.

[C] Bill Prisoner / TPOC 2004

Наши новости

Новые события из жизни нашей лаборатории

Статьи

Статьи и переводы лаборатории TPOC

Программы

Программы лаборатории TPOC

Релизы

Здесь мы сообщаем Вам, какие творения скоро появятся

Ссылки

Ссылки на сайты, где можно найти больше информации

Наша лаборатория

История нашей лаборатории и ее члены

Дата последнего обновления: 25 июля 2005 года
У вас есть предложения по нашему сайту?
Напишите сюда
Любимые сайты вирмейкеров:
(WASM)   (RSDN)