Время на прочтение8 мин
Количество просмотров34K
С момента выхода предыдущего издания этой книги операционная система Windows прошла длинный путь обновлений и концептуальных изменений, результатом которых стала новая стабильная архитектура ядра Windows 10.
Книга «Внутреннее устройство Windows» создана для профессионалов, желающих разобраться во внутренней жизни основных компонентов Windows 10. Опираясь на эту информацию, разработчикам будет проще находить правильные проектные решения, создавая приложения для платформы Windows, и решать сложные проблемы, связанные с их эксплуатацией. Системные администраторы, зная, что находится у операционной системы «под капотом», смогут разобраться с поведением системы и быстрее решать задачи повышения производительности и диагностики сбоев. Специалистам по безопасности пригодится информация о борьбе с уязвимостями операционной системы.
Динамика списков страниц
На рис. 5.37 показана диаграмма состояний переходов страничных блоков. Для простоты на ней не представлен список измененных, но не подлежащих записи страниц.
Страничные блоки перемещаются между страничными списками следующими способами.
1. Когда диспетчеру памяти для обслуживания ошибки страницы, связанной с требованием обнуленной страницы (обращение к странице, которая определена как полностью заполненная нулями, или к закрытой подтвержденной странице пользовательского режима, к которой еще не было обращений), нужна страница, заполненная нулями, сначала предпринимается попытка получить эту страницу из списка таких страниц. Если список пуст, страница берется из списка свободных страниц и заполняется нулями. Если пуст и список свободных страниц, происходит обращение к списку ожидающих страниц, и заполняется нулями страница из этого списка.
2. Одна из причин востребованности страниц, заполненных нулями, заключается в выполнении различных требований безопасности — например, общих критериев (Common Criteria). Большинство положений общих критериев указывает на то, что процессы пользовательского режима должны получать обнуленные страничные блоки, чтобы они не могли прочитать содержимое памяти предыдущих процессов. Поэтому диспетчер памяти предоставляет процессам пользовательского режима обнуленные страничные блоки, если только страница не была считана из резервного хранилища. В таком случае диспетчер памяти использует необнуленные страничные блоки, инициализируя их данными с диска или с удаленного хранилища. Список страниц, заполненных нулями, пополняется из списка свободных страниц системным программным потоком, который называется потоком обнуления страниц (zero page thread), — это поток 0 в процессе System. Поток обнуления страниц ждет сигнала на работу от объекта шлюза. Когда в списке свободных имеется восемь и более страниц, шлюз подает сигнал. Но поток обнуления страниц запускается, только если хотя бы у одного процессора нет других выполняемых потоков, поскольку поток обнуления страниц запускается с приоритетом 0, а наименьший приоритет, который может быть установлен для пользовательского потока, равен 1.
ПРИМЕЧАНИЕ Когда память в результате выделения физической страницы драйвером, вызывающим функцию MmAllocatePagesForMdl или MmAllocatePagesForMdlEx, должна быть заполнена нулями Windows-приложением, вызывающим функцию AllocateUserPhysicalPages или AllocateUserPhysicalPagesNuma, или когда приложение выделяет большие страницы, диспетчер памяти обнуляет память, используя высокопроизводительную функцию под названием MiZeroInParallel, которая отображает более крупные области, чем поток обнуления страниц, обнуляющий только одну страницу за раз. Кроме того, на мультипроцессорных системах диспетчер памяти создает дополнительный системный поток для обнуления в параллельном режиме (а на NUMA-платформах это делается в стиле, оптимизированном под технологию NUMA).
3. Когда диспетчеру памяти не нужна страница, заполненная нулями, он сначала обращается к списку свободных страниц. Если этот список пуст, он переходит к списку обнуленных страниц. Если и список обнуленных страниц пуст, он переходит к списку ожидающих страниц. Перед тем как диспетчер памяти сможет воспользоваться страничным блоком из списка ожидающих страниц, он должен сначала вернуться и удалить ссылку из недостоверной PTE-записи (или из прототипной PTE-записи), которая все еще указывает на страничный блок. Поскольку в записях базы данных PFN-номеров содержатся обратные указатели на предыдущую страницу пользовательской таблицы страниц (или на страницу пула прототипной PTE-записи для общих страниц), диспетчер памяти может быстро найти PTE-запись и внести в нее соответствующее изменение.
4. Когда процесс должен отказаться от страницы из своего рабочего набора (либо потому, что он ссылается на новую страницу и его рабочий набор заполнен, либо потому, что диспетчер памяти урезал его рабочий набор), страница переходит в список ожидающих, если она оставалась нетронутой (неизмененной), или в список измененных страниц, если страница была изменена, находясь в физической памяти.
5. Когда процесс завершает работу, все закрытые страницы переходят в список свободных страниц. Кроме того, если при закрытии последней ссылки на раздел, поддерживаемый страничным файлом, в разделе не осталось отображенных представлений, страницы этого раздела также попадают в список свободных страниц.
ЭКСПЕРИМЕНТ: ПРОСМОТР СПИСКОВ СВОБОДНЫХ И ОБНУЛЕННЫХ СТРАНИЦ
За освобождением закрытых страниц при завершении работы процесса можно наблюдать в окне System Information (Системная информация) программы Process Explorer. Сначала нужно создать процесс с большим количеством закрытых страниц в его рабочем наборе. Мы уже делали это в одном из предыдущих экспериментов с помощью утилиты TestLimit:
C:\Tools\Sysinternals>Testlimit.exe -d 1 -c 1500
Testlimit v5.24 - test Windows limits
Copyright (C) 2012-2015 Mark Russinovich
Sysinternals - www.sysinternals.com
Process ID: 13928
Leaking private bytes with touch 1 MB at a time...
Leaked 1500 MB of private memory (1500 MB total leaked). Lasterror: 0
The operation completed successfully.
Ключ –d заставляет TestLimit не только выделить память в качестве закрытой и подтвержденной, но и «прикоснуться» к ней, т. е. обратиться к этой памяти. Это приводит к выделению физической памяти и присвоению ее процессу, чтобы освободить область закрытой подтвержденной виртуальной памяти. Если в системе имеется достаточный объем доступной оперативной памяти, для процесса в оперативной памяти будет выделено целых 1500 Мбайт. Теперь этот процесс будет ждать, пока вы не заставите его завершить или прервать работу (возможно, с комбинацией клавиш Ctrl+C в его командном окне). Выполните следующие действия.
1. Откройте Process Explorer.
2. Выберите команду ViewSystem Information и перейдите на вкладку Memory.
3. Понаблюдайте за размерами списков свободных (Free) и обнуленных (Zeroed) страниц.
4. Завершите или прервите процесс TestLimit.
Возможно, вам удастся увидеть, что список свободных страниц кратковременно увеличился в размере. Мы говорим «возможно», потому что поток обнуления страниц «проснется», как только в списке обнуленных страниц останется всего восемь записей, и отработает очень быстро. Process Explorer обновляет это окно только раз в секунду, и похоже, что остальные страницы уже успевают обнулиться и попасть в список обнуленных страниц, пока нам удалось «поймать» это состояние. Если вам удалось заметить временное увеличение списка свободных страниц, то вслед за этим вы увидите, что его размер упадет до нуля, а в списке обнуленных страниц произойдет соответствующее увеличение. Если же момент будет упущен, вы просто увидите увеличение списка обнуленных страниц.
ЭКСПЕРИМЕНТ: ПРОСМОТР СПИСКОВ ИЗМЕНЕННЫХ И ОЖИДАЮЩИХ СТРАНИЦ
За перемещением страниц из рабочего набора процесса в список измененных страниц и затем в список ожидающих страниц можно понаблюдать при помощи программ VMMap и RAMMap из пакета Sysinternals или в отладчике ядра. Выполните следующие действия.
1.Запустите программу RAMMap и понаблюдайте за спокойным состоянием системы. В данном случае это система x86 с 3 Гбайт оперативной памяти. Столбцы в окне отражают различные состояния страниц (см. рис. 5.37). Некоторые столбцы, которые не имеют значения для данного эксперимента, для удобства были сужены.
2. У системы имеется около 420 Мбайт свободной оперативной памяти (складывающейся из свободных и обнуленных страниц). Около 580 Мбайт фигурирует в списке ожидающих страниц (следовательно, часть из них «доступна», но, скорее всего, содержит данные, ранее утраченные процессами или используемые при супервыборке). Около 830 Мбайт активны, будучи отображенными непосредственно на виртуальные адреса через достоверные записи таблицы страниц.
3. Каждая строка далее разбивается в соответствии с состояниями страниц по использованию или происхождению (закрытые страницы процесса, отображаемый файл и т. д.). Например, на данный момент из активных 830 Мбайт около 400 Мбайт обусловлено выделением закрытых страниц процесса.
4. Теперь, как и в предыдущем эксперименте, воспользуйтесь утилитой TestLimit, чтобы создать процесс с большим количеством страниц в рабочем наборе. Здесь опять мы используем ключ –d, чтобы заставить TestLimit сделать запись в каждую страницу, но на этот раз без ограничения, чтобы создать как можно больше закрытых измененных страниц:
C:\Tools\Sysinternals>Testlimit.exe -d
Testlimit v5.24 - test Windows limits
Copyright (C) 2012-2015 Mark Russinovich
Sysinternals - www.sysinternals.com
Process ID: 7548
Leaking private bytes with touch (MB)...
Leaked 1975 MB of private memory (1975 MB total leaked). Lasterror: 8
5. Теперь программа TestLimit создала 1975 областей выделения по 1 Мбайт каждая. Для обновления экрана в программе RAMMap нужно воспользоваться командой FileRefresh для обновления экрана, поскольку самостоятельно программа RAMMap этого не делает (из-за больших затрат на выполнение этой операции).
6. Как видите, активно свыше 2,8 Гбайт, из которых 2,4 Гбайт находятся в строке закрытых страниц процесса (строка Process Private). Это результат выделения памяти и доступа к ней со стороны процесса TestLimit. Также обратите внимание на то, что списки ожидающих (Standby), обнуленных (Zeroed) и свободных (Free) страниц теперь стали намного меньше. Большая часть памяти, выделенной программе TestLimit, взята из страниц, фигурировавших в этих списках.
7. Далее с помощью RAMMap нужно оценить выделение физических страниц процесса. Перейдите на вкладку Physical Pages и установите фильтр, находящийся в нижней части столбца Process, присвоив ему значение Testlimit.exe. В следующем окне показаны все физические страницы, являющиеся частью рабочего набора процесса.
8. Нам нужно идентифицировать физическую страницу, задействованную в выделении физического адресного пространства, которое было выполнено с помощью ключа –d при запуске программы TestLimit. RAMMap не дает никаких указаний на то, какие виртуальные области были выделены благодаря вызову из RAMMap функции VirtualAlloc. Но мы можем получить ценную подсказку на этот счет с помощью программы VMMap. Вызвав VMMap для
того же процесса, мы получим следующий результат (см. рис. на с. 535 вверху).
9. В нижней части выводимой информации находятся сотни выделенных областей для закрытых данных процесса, каждая из которых имеет размер 1 Мбайт при 1 Мбайт подтвержденной памяти. Это соответствует размеру памяти, выделенной программой TestLimit. В предыдущей копии экрана подсвечен первый из таких вариантов распределения. Заметьте, что его начальный виртуальный адрес равен 0x310000.
10. Теперь вернемся к информации о физической памяти, выводимой на экран программой RAMMap. Перестройте столбцы так, чтобы хорошо был виден столбец Virtual Address. Щелкните на нем, чтобы отсортировать строки по этому значению, и вы сможете найти нужный виртуальный адрес (см. рисунок на с. 535 внизу).
11. Здесь показано, что виртуальная страница, начинающаяся с адреса 0x310000, в данный момент отображена на физический адрес 0x212D1000. С ключом -d программа TestLimit записывает в первые байты каждой выделенной области свое имя. Это можно продемонстрировать с помощью команды !dc локального отладчика ядра (dc — сокращение от «display characters», т. е. вывод символов по физическому адресу):
lkd> !dc 0x212d1000
#212d1000 74736554 696d694c 00000074 00000000 TestLimit.......
#212d1010 00000000 00000000 00000000 00000000 ................
...
12. Если промедлить, попытка может завершиться неудачей — страница может быть уже удалена из рабочего набора. В последней фазе эксперимента мы покажем, что данные остаются неизменными (по крайней мере, на какое-то время) после того, как рабочий набор процесса сократится, а страница переместится сначала в список измененных, а затем — ожидающих страниц.
13. Выбрав в программе VMMap процесс TestLimit, откройте меню View и выберите команду Empty Working Set, чтобы сократить рабочий набор процесса до минимума. Теперь в окне VMMap должна выводиться следующая информация:
14. Обратите внимание на то, что линейка Working Set (Рабочий набор) практически пуста. В средней части для процесса показано, что общий размер рабочего набора равен всего лишь 4 Кбайт, причем почти все его пространство занято таблицами страниц. Теперь вернитесь в RAMMap. На вкладке Use Counts видно, что количество активных страниц существенно сократилось, а большое количество страниц находится в списке измененных и существенное количество страниц — в списке ожидающих.
15. Данные на вкладке Processes программы RAMMap подтверждают, что большинство этих страниц появилось в данных списках из-за процесса TestLimit.
» Более подробно с книгой можно ознакомиться на сайте издательства
» Оглавление
» Отрывок
Для Хаброжителей скидка 20% по купону — Windows
С момента выхода предыдущего издания этой книги операционная система Windows прошла длинный путь обновлений и концептуальных изменений, результатом которых стала новая стабильная архитектура ядра Windows 10. Книга «Внутреннее устройство Windows» создана для профессионалов, желающих разобраться во внутренней жизни основных компонентов Windows 10. Опираясь на эту информацию, разработчикам будет проще находить правильные проектные решения, создавая приложения для платформы Windows, и решать сложные проблемы, связанные с их эксплуатацией. Системные администраторы, зная, что находится у операционной системы «под капотом», смогут разобраться с поведением системы и быстрее решать задачи повышения производительности и диагностики сбоев. Специалистам по безопасности пригодится информация о борьбе с уязвимостями операционной системы. Прочитав эту книгу, вы будете лучше разбираться в работе Windows и в истинных причинах того или иного поведения ОС.
Provide feedback
Saved searches
Use saved searches to filter your results more quickly
Sign up
- About
- Blog
- Projects
- Help
-
Donate
Donate icon
An illustration of a heart shape - Contact
- Jobs
- Volunteer
- People
Bookreader Item Preview
texts
windows-internals-part1-7th
Windows Internals
- Addeddate
- 2017-09-13 02:55:18
- Foldoutcount
- 0
- Identifier
- windows-internals-part1-7th
- Identifier-ark
- ark:/13960/t3kx1mc2x
- Ocr
- ABBYY FineReader 11.0
- Ocr_converted
- abbyy-to-hocr 1.1.7
- Ocr_module_version
- 0.0.13
- Page_number_confidence
- 41.58
- Pages
- 1432
- Ppi
- 300
- Scanner
- Internet Archive HTML5 Uploader 1.6.3
comment
Reviews
There are no reviews yet. Be the first one to
write a review.
38,190
Views
30
Favorites
DOWNLOAD OPTIONS
Uploaded by
barnavo
on
SIMILAR ITEMS (based on metadata)
Об авторах этого издания ………………………………………………………………………………..16
Предисловие………………………………………………………………………………………………….18
Введение………………………………………………………………………………………..21
История серии…………………………………………………………………………………………………………………21
Изменения в седьмом издании………………………………………………………………………………..22
Изменения в томе 2…………………………………………………………………………………………………..23
Практические эксперименты…………………………………………………………………………………….23
Незатронутые темы……………………………………………………………………………………………….23
Предупреждение и предостережение…………………………………………………………………………..24
Чего мы ожидаем от читателя……………………………………………………………………………………….24
Структура книги………………………………………………………………………………………………….24
Шрифтовые выделения………………………………………………………………………………………25
Благодарности………………………………………………………………………………………………..25
Остаемся на связи……………………………………………………………………………………………27
От издательства………………………………………………………………………………………………..27
Глава 8 Системные механизмы…………………………………………………………………………28
Модель выполнения кода процессором………………………………………………………………………29
Сегментация………………………………………………………………………………………………………………29
Сегменты состояния задач……………………………………………………………………………………….34
Аппаратные уязвимости к атакам по сторонним каналам………………………………………..37
Внеочередное выполнение команд…………………………………………………………………………38
Блок предсказания переходов…………………………………………………………………………………39
Кэш процессора…………………………………………………………………………………………………………40
Атаки по сторонним каналам…………………………………………………………………………………..42
Меры борьбы с атаками по сторонним каналам в Windows…………………………………….46
Затенение KVA………………………………………………………………………………………………………….47
Аппаратный контроль непрямых переходов (IBRS, IBPB, STIBP, SSBD)……..51
Retpoline и оптимизация импорта………………………………………………………………………….53
Сопряжение STIBP…………………………………………………………………………………………………..57
Диспетчеризация системных прерываний………………………………………………………………….61
Диспетчеризация прерываний………………………………………………………………………………..63
Конвейерные и инициируемые сообщениями прерывания………………………………..84
Обработка таймера………………………………………………………………………………………………….103
Системные рабочие потоки……………………………………………………………………………………120
Управление исключениями…………………………………………………………………………………..125
Обработка действий системных служб………………………………………………………………..132
WoW64 (Windows-on-Windows)……………………………………………………………………………….147
Ядро WoW64……………………………………………………………………………………………………………148
Перенаправление путей в файловой системе……………………………………………………..152
Перенаправление в системном реестре………………………………………………………………..154
Симуляция X86 на платформах AMD64……………………………………………………………..155
ARM…………………………………………………………………………………………………………………………..157
Модели памяти………………………………………………………………………………………………………..157
Симуляция ARM32 на платформах ARM64……………………………………………………….158
Симуляция x86 на платформах ARM64………………………………………………………………159
Диспетчер объектов………………………………………………………………………………………………………169
Объекты исполнительной системы………………………………………………………………………172
Структура объектов………………………………………………………………………………………………..176
Синхронизация…………………………………………………………………………………………………..222
Высокоуровневая IRQL-синхронизация…………………………………………………………….223
Низкоуровневая IRQL-синхронизация……………………………………………………………….230
Продвинутый локальный вызов процедур………………………………………………………………..267
Модель подключения……………………………………………………………………………………………..268
Модель сообщений………………………………………………………………………………………………….270
Асинхронные операции………………………………………………………………………………………….273
Просмотры, области и разделы……………………………………………………………………………..274
Атрибуты…………………………………………………………………………………………………………………..275
Двоичные объекты, дескрипторы и ресурсы……………………………………………………….276
Передача дескрипторов………………………………………………………………………………………….277
Безопасность…………………………………………………………………………………………………………….279
Производительность……………………………………………………………………………………………….280
Управление электропитанием……………………………………………………………………………….281
Атрибут прямого события ALPC………………………………………………………………………….282
Отладка и трассировка……………………………………………………………………………………………282
Средство уведомлений Windows………………………………………………………………………………..284
Возможности WNF…………………………………………………………………………………………………285
Пользователи WNF…………………………………………………………………………………………………286
Именованные состояния WNF и хранение…………………………………………………………292
Агрегация событий WNF……………………………………………………………………………………….297
Отладка в пользовательском режиме…………………………………………………………………………299
Поддержка со стороны ядра…………………………………………………………………………………..299
Платформенно-зависимая поддержка………………………………………………………………….301
Поддержка подсистемы Windows…………………………………………………………………………303
Пакетные приложения…………………………………………………………………………………………………304
Приложения UWP………………………………………………………………………………………………….306
Приложения Centennial………………………………………………………………………………………….307
Диспетчер активности хоста………………………………………………………………………………….311
Репозиторий состояний………………………………………………………………………………………….313
Мини-репозиторий зависимостей………………………………………………………………………..317
Фоновые задачи и инфраструктура брокеров…………………………………………………….318
Установка и запуск пакетных приложений…………………………………………………………321
Активация пакетов………………………………………………………………………………………………….321
Регистрация пакетов……………………………………………………………………………………………….328
Заключение……………………………………………………………………………………………………………….330
Глава 9 Технологии виртуализации……………………………………………………………………..331
Гипервизор Windows……………………………………………………………………………………………………331
Разделы, процессы и потоки………………………………………………………………………………….333
Запуск гипервизора…………………………………………………………………………………………………338
Диспетчер памяти гипервизора…………………………………………………………………………….344
Планировщики Hyper-V………………………………………………………………………………………..353
Гипервызовы и TLFS гипервизора……………………………………………………………………….365
Перехваты…………………………………………………………………………………………………………………367
Синтетический контроллер прерываний…………………………………………………………….368
API платформы гипервизора Windows и разделы EXO……………………………………371
Вложенная виртуализация…………………………………………………………………………………….374
Гипервизор Windows на ARM64…………………………………………………………………………..382
Стек виртуализации……………………………………………………………………………………………………..383
Служба диспетчера виртуальных машин и рабочие процессы…………………………384
Драйвер VID и диспетчер памяти стека виртуализации…………………………………..386
Работа виртуальной машины ……………………………………………………………………………….387
VMBus……………………………………………………………………………………………………………………….393
Первичный обмен квитирующими сообщениями VMBus………………………………..394
Поддержка виртуального оборудования……………………………………………………………..400
Виртуальные машины с поддержкой VA…………………………………………………………….408
Безопасность на основе виртуализации (VBS)………………………………………………………..413
Виртуальные уровни доверия и виртуальный безопасный режим………………….414
Сервисы, предоставляемые VSM, и требования…………………………………………………416
Безопасное ядро (Secure Kernel)…………………………………………………………………………………419
Виртуальные прерывания………………………………………………………………………………………420
Безопасный перехват………………………………………………………………………………………………423
Системные вызовы VSM………………………………………………………………………………………..425
Защищенные потоки и планирование………………………………………………………………….432
Hypervisor-Enforced Code Integrity (HVCI)……………………………………………………….435
Виртуализация UEFI во время выполнения………………………………………………………435
Запуск VSM……………………………………………………………………………………………………………..437
Диспетчер памяти безопасного ядра…………………………………………………………………….441
Горячее исправление………………………………………………………………………………………………447
Изолированный пользовательский режим……………………………………………………………….450
Создание трастлетов……………………………………………………………………………………………….451
Защищенные устройства………………………………………………………………………………………..455
Анклавы на основе VBS………………………………………………………………………………………….458
Аттестация среды выполнения System Guard…………………………………………………….466
Заключение……………………………………………………………………………………………………..471
Глава 10 Управление, диагностика и трассировка……………………………………………..472
Реестр………………………………………………………………………………………………………………472
Просмотр и изменение реестра……………………………………………………………………………..472
Использование реестра…………………………………………………………………………………………..473
Типы данных реестра………………………………………………………………………………………………474
Логическая структура реестра……………………………………………………………………………….475
Кусты приложений………………………………………………………………………………………………….484
Расширение для работы с реестром в режиме транзакций — Transactional Registry (TxR)………………………………………………………………………………….486
Мониторинг активности реестра…………………………………………………………………………..487
Внутреннее устройство Process Monitor……………………………………………………………..488
Внутреннее устройство реестра…………………………………………………………………………….489
Реорганизация кустов…………………………………………………………………………………………….499
Пространство имен и работа реестра……………………………………………………………………500
Обеспечение надежного хранения………………………………………………………………………..503
Фильтрация реестра……………………………………………………………………………………………….508
Виртуализация реестра…………………………………………………………………………………………..508
Оптимизация реестра……………………………………………………………………………………………..512
Службы Windows………………………………………………………………………………………………………….512
Приложения служб…………………………………………………………………………………………………513
Учетные записи служб……………………………………………………………………………………………522
Диспетчер управления службами…………………………………………………………………………536
Программы управления службами……………………………………………………………………….541
Запуск служб……………………………………………………………………………………………………………542
Службы с отложенным автозапуском………………………………………………………………….549
Службы с запуском по триггеру……………………………………………………………………………549
Ошибки, возникающие при запуске……………………………………………………………………..551
Признание загрузки и последняя удачная конфигурация………………………………..552
Сбои служб………………………………………………………………………………………………………………..554
Завершение работы службы…………………………………………………………………………………..556
Процессы, общие для нескольких служб……………………………………………………………..557
Теги служб………………………………………………………………………………………………………………..561
Пользовательские службы……………………………………………………………………………………..562
Пакетные службы……………………………………………………………………………………………………566
Защищенные службы……………………………………………………………………………………………..566
Планирование задач и UBPM……………………………………………………………………………………..569
Планировщик задач………………………………………………………………………………………………..569
Унифицированный диспетчер фоновых процессов…………………………………………..576
COM-интерфейсы планировщика задач……………………………………………………………..581
Инструментарий управления Windows…………………………………………………………………….582
Архитектура WMI…………………………………………………………………………………………………..582
Поставщики WMI…………………………………………………………………………………………………..584
Общая информационная модель и язык формата управляемых объектов…….585
Связи классов…………………………………………………………………………………………………………..589
Реализация WMI…………………………………………………………………………………………………….592
Безопасность WMI………………………………………………………………………………………………….594
Трассировка событий для Windows…………………………………………………………………………..594
Инициализация ETW…………………………………………………………………………………………….597
Сеансы ETW…………………………………………………………………………………………………………….599
Поставщики ETW…………………………………………………………………………………………………..602
Поставка событий……………………………………………………………………………………………………607
Поток ETW Logger………………………………………………………………………………………………….608
Потребление событий…………………………………………………………………………………………….610
Системные средства ведения журнала (логгеры)………………………………………………614
Безопасность ETW………………………………………………………………………………………………….621
Динамическая трассировка………………………………………………………………………………………….625
Внутренняя архитектура………………………………………………………………………………………..628
Библиотека типов DTrace………………………………………………………………………………………635
Отчеты об ошибках Windows………………………………………………………………………………………637
Сбой пользовательского приложения………………………………………………………………….638
Сбой в режиме ядра (системы)……………………………………………………………………………..645
Обнаружение зависания процесса………………………………………………………………………..655
Глобальные флаги………………………………………………………………………………………………..658
Прослойки ядра……………………………………………………………………………………………………661
Инициализация механизма прослоек…………………………………………………………………..662
База данных прослоек…………………………………………………………………………………………….664
Прослойки драйверов……………………………………………………………………………………………..665
Прослойки устройств……………………………………………………………………………………………..669
Заключение……………………………………………………………………………………………………………669
Глава 11 Кэширование и файловые системы……………………………………………………….670
Терминология………………………………………………………………………………………………………….670
Ключевые функции диспетчера кэша………………………………………………………………………..672
Единый централизованный системный кэш……………………………………………………….672
Диспетчер памяти……………………………………………………………………………………………………672
Когерентность кэша………………………………………………………………………………………………..673
Виртуальное блочное кэширование……………………………………………………………………..674
Потоковое кэширование…………………………………………………………………………………………675
Поддержка восстанавливаемых файловых систем…………………………………………….675
Усовершенствования рабочего набора NTFS MFT……………………………………………676
Поддержка разделов памяти………………………………………………………………………………….677
Управление виртуальной памятью кэша…………………………………………………………………..678
Размер кэша……………………………………………………………………………………………………….680
Виртуальный размер кэша……………………………………………………………………………………..680
Размер рабочего набора кэша………………………………………………………………………………..680
Физический размер кэша……………………………………………………………………………………….681
Структуры данных кэша………………………………………………………………………………………………683
Общесистемные структуры данных кэша……………………………………………………………683
Структуры данных кэша для отдельного файла…………………………………………………686
Интерфейсы файловой системы…………………………………………………………………………………689
Копирование в кэш и из него…………………………………………………………………………………691
Кэширование с помощью интерфейсов отображения и закрепления……………..691
Кэширование с помощью интерфейсов прямого доступа к памяти………………..692
Быстрый ввод-вывод……………………………………………………………………………………….692
Чтение с упреждением и отложенная запись……………………………………………………………694
Интеллектуальное упреждающее чтение…………………………………………………………….694
Усовершенствования, связанные с упреждающим чтением…………………………….696
Кэширование с отложенной записью и поздняя запись……………………………………697
Отключение поздней записи для файла………………………………………………………………703
Принудительная запись кэша на диск………………………………………………………………….704
Сброс отображенных файлов на диск…………………………………………………………………..704
Дросселирование записи………………………………………………………………………………………..705
Системные потоки…………………………………………………………………………………………………..706
Агрессивная отложенная запись и низкоприоритетная поздняя запись………..707
Динамическая память……………………………………………………………………………………………..708
Учет дисковых операций ввода-вывода в диспетчере кэша……………………………..709
Файловые системы…………………………………………………………………………………………….711
Форматы файловой системы Windows………………………………………………………………..712
CDFS…………………………………………………………………………………………………………………………712
UDF…………………………………………………………………………………………………………………………..712
FAT12, FAT16 и FAT32………………………………………………………………………………………….713
exFAT………………………………………………………………………………………………………………………..716
NTFS………………………………………………………………………………………………………………………….717
ReFS…………………………………………………………………………………………………………………………..718
Архитектура драйвера файловой системы…………………………………………………………..719
Локальные FSD……………………………………………………………………………………………………….719
Сетевые FSD…………………………………………………………………………………………………………….721
Операции с файловой системой……………………………………………………………………………728
Явный файловый ввод-вывод……………………………………………………………………………….729
Запись измененной и отображенной страницы диспетчера памяти………………..733
Система поздней записи диспетчера кэша…………………………………………………………..733
Поток упреждающего чтения диспетчера кэша………………………………………………….734
Обработчик отказов страниц диспетчера памяти………………………………………………734
Драйверы фильтров файловой системы и мини-фильтры……………………………….735
Фильтрация именованных каналов и мейлслоты………………………………………………736
Управление поведением точки повторной обработки……………………………………….737
Process Monitor………………………………………………………………………………………………………..739
Файловая система NT ………………………………………………………………………………740
Требования к файловой системе высокого класса……………………………………………..741
Восстанавливаемость……………………………………………………………………………………………..741
Безопасность…………………………………………………………………………………………………………….741
Резервирование данных и отказоустойчивость………………………………………………….742
Дополнительные возможности NTFS………………………………………………………………….742
Несколько потоков данных……………………………………………………………………………………743
Имена на основе Юникода…………………………………………………………………………………….745
Общее средство индексирования………………………………………………………………………….746
Динамическое перераспределение плохих кластеров………………………………………..746
Жесткие ссылки………………………………………………………………………………………………………746
Символические (мягкие) ссылки и соединения…………………………………………………747
Сжатие и разреженные файлы………………………………………………………………………………750
Регистрация изменений………………………………………………………………………………………….751
Пользовательские квоты в томе…………………………………………………………………………….752
Отслеживание ссылок…………………………………………………………………………………………….752
Шифрование…………………………………………………………………………………………………………….753
Семантика удаления в стиле POSIX…………………………………………………………………….754
Дефрагментация………………………………………………………………………………………………………757
Динамическая разбивка на разделы……………………………………………………………………..760
Поддержка NTFS для многоуровневых томов……………………………………………………762
Драйвер файловой системы NTFS……………………………………………………………………………..766
Структура NTFS на диске……………………………………………………………………………………………769
Тома…………………………………………………………………………………………………………………………..769
Кластеры…………………………………………………………………………………………………………………..770
Главная файловая таблица…………………………………………………………………………………….771
Номера файловых записей…………………………………………………………………………………….775
Файловые записи…………………………………………………………………………………………………….776
Имена файлов………………………………………………………………………………………………………….779
Туннелирование………………………………………………………………………………………………………782
Резидентные и нерезидентные атрибуты…………………………………………………………….783
Сжатие данных и разреженные файлы………………………………………………………………..787
Сжатие разреженных данных………………………………………………………………………………..787
Сжатие неразреженных данных……………………………………………………………………………789
Разреженные файлы……………………………………………………………………………………………….791
Файл журнала изменений………………………………………………………………………………………791
Индексирование………………………………………………………………………………………………………796
Идентификаторы объектов……………………………………………………………………………………798
Контроль над квотами…………………………………………………………………………………………….799
Консолидированная безопасность………………………………………………………………………..800
Точки повторной обработки………………………………………………………………………………….801
Storage Reserves и NTFS Reservations…………………………………………………………………..803
Поддержка транзакций…………………………………………………………………………………………..806
Изоляция………………………………………………………………………………………………………………….807
Транзакционные API………………………………………………………………………………………………808
Реализация на диске……………………………………………………………………………………………….809
Реализация протоколирования……………………………………………………………………………..812
Поддержка восстановления NTFS……………………………………………………………………………..812
Конструкция…………………………………………………………………………………………………………….813
Регистрация метаданных……………………………………………………………………………………….814
Служба файла журнала………………………………………………………………………………………….814
Типы записей в журнале………………………………………………………………………………………..816
Восстановление……………………………………………………………………………………………………….819
Проход анализа………………………………………………………………………………………………………..819
Проход повтора………………………………………………………………………………………………………..820
Проход отмены………………………………………………………………………………………………………..821
Восстановление плохих кластеров NTFS…………………………………………………………….823
Самовосстановление……………………………………………………………………………………………….827
Проверка диска в режиме онлайн и быстрое восстановление………………………….828
Зашифрованная файловая система…………………………………………………………………………….831
Первичное шифрование файла …………………………………………………………………………….834
Процесс расшифровки……………………………………………………………………………………………837
Резервное копирование зашифрованных файлов………………………………………………837
Копирование зашифрованных файлов………………………………………………………………..838
Передача шифрования в BitLocker……………………………………………………………………….839
Поддержка шифрования в режиме онлайн………………………………………………………….840
Диски с прямым доступом…………………………………………………………………………………………..842
Модель драйвера DAX……………………………………………………………………………………………844
Тома DAX…………………………………………………………………………………………………………………845
Кэшированный и некэшированный ввод-вывод в томах DAX………………………..846
Отображение исполняемых образов…………………………………………………………………….847
Блоковые тома…………………………………………………………………………………………………………851
Драйверы фильтров файловой системы и DAX…………………………………………………852
Сброс ввода-вывода в режиме DAX……………………………………………………………………..854
Поддержка больших и огромных страниц…………………………………………………………..855
Поддержка виртуальных дисков постоянной памяти и Storage Spaces………….859
Устойчивая файловая система……………………………………………………………………………………863
Архитектура Minstore……………………………………………………………………………………………..864
Физическая схема B+-дерева………………………………………………………………………………….866
Распределители……………………………………………………………………………………………………….867
Таблица страниц……………………………………………………………………………………………………..870
Ввод-вывод Minstore………………………………………………………………………………………………871
Архитектура ReFS…………………………………………………………………………………………………..873
Дисковая структура ReFS………………………………………………………………………………………877
Идентификаторы объектов……………………………………………………………………………………878
Безопасность и журнал изменений………………………………………………………………………879
Расширенные возможности ReFS………………………………………………………………………………880
Клонирование блоков файлов (поддержка моментальных снимков) и разреженный VDL……………………………………………………………………………………………….880
Сквозная запись в ReFS…………………………………………………………………………………………883
Поддержка восстановления ReFS…………………………………………………………………………885
Обнаружение утечек……………………………………………………………………………………………….887
Тома магнитной записи внахлест………………………………………………………………………….888
Поддержка ReFS для многоуровневых томов и SMR………………………………………..890
Уплотнение контейнеров……………………………………………………………………………………….893
Сжатие и фантомные файлы………………………………………………………………………………….896
Storage Spaces……………………………………………………………………………………………………897
Внутренняя архитектура Storage Spaces………………………………………………………………898
Услуги, предоставляемые Storage Spaces…………………………………………………………….899
Заключение…………………………………………………………………………………………………..903
Глава 12. Запуск и завершение работы системы………………………………………………..905
Процесс загрузки…………………………………………………………………………………………………………..905
Загрузка UEFI…………………………………………………………………………………………………………906
Процесс загрузки BIOS………………………………………………………………………………………….910
Безопасная загрузка………………………………………………………………………………………………..910
Диспетчер загрузки Windows………………………………………………………………………………..914
Меню загрузки…………………………………………………………………………………………………………933
Запуск загрузочного приложения…………………………………………………………………………934
Измеренная загрузка………………………………………………………………………………………………935
Доверенное исполнение………………………………………………………………………………………….940
Загрузчик операционной системы Windows………………………………………………………943
Загрузка из iSCSI…………………………………………………………………………………………………….946
Загрузчик гипервизора…………………………………………………………………………………………..947
Политика запуска VSM………………………………………………………………………………………….949
Безопасный запуск………………………………………………………………………………………………….952
Инициализация ядра и исполнительных подсистем…………………………………………955
Фаза 1 инициализации ядра………………………………………………………………………………….961
Smss, Csrss и Wininit……………………………………………………………………………………………….967
ReadyBoot…………………………………………………………………………………………………………………972
Автоматически запускаемые образы…………………………………………………………………….974
Завершение работы…………………………………………………………………………………………………975
Спящий режим и быстрый запуск………………………………………………………………………..979
Среда восстановления Windows (WinRE)………………………………………………………….984
Безопасный режим………………………………………………………………………………………………….986
Загрузка драйвера в безопасном режиме……………………………………………………………..988
Пользовательские программы с поддержкой безопасного режима…………………990
Файл состояния загрузки………………………………………………………………………………………990
Заключение……………………………………………………………………………………………………………991