Шестое издание этой легендарной книги посвящено внутреннему устройству и алгоритмам работы основных компонентов операционной системы Microsoft Windows 7. а также Windows Server 2008 R2.
В первой части определяются ключевые понятия и термины Windows, дается представление об инструментальных средствах, используемых для исследования внутреннего устройства системы, рассматривается общая архитектура и компоненты ОС.
Также в книге дается представление о ключевых основополагающих системных и управляющих механизмах Windows, охватываются основные компоненты операционной системы: процессы, потоки и задания безопасность и работа в сети.
Вторая часть книги охватывает основные подсистемы Windows: ввод-вывод, хранение данных, управление памятью, диспетчер кэша и файловые системы. Рассмотрены процессы запуска и завершения работы и дано описание анализа аварийного дампа.
Книга предназначена для системных администраторов, разработчиков сложных приложений и всех, кто хочет понять, как устроена операционная система Windows.
Author(s): Марк Руссинович, Дэвид Соломон
Series: Мастер-класс
Edition: 6
Publisher: Питер
Year: 2013
Language: Russian
Pages: 800
Tags: Библиотека;Компьютерная литература;WinAPI;
История этой книги......Page 14
Предупреждение и предостережение......Page 15
Благодарности......Page 16
Версии операционной системы Windows......Page 18
Windows API......Page 19
Службы, функции и стандартные программы......Page 20
Процессы, потоки и задания......Page 22
Волокна и потоки планировщика пользовательского режима......Page 30
Виртуальная память......Page 32
Сравнение режима ядра и пользовательского режима......Page 34
Службы терминалов и множественные сеансы работы......Page 39
Объекты и дескрипторы......Page 40
Безопасность......Page 41
Unicode......Page 43
Подробное исследование внутреннего устройства Windows......Page 44
Системный монитор......Page 45
Средства отладки для Windows......Page 47
Инструментальное средство LiveKd......Page 51
Windows Driver Kit......Page 52
Заключение......Page 53
Требования и цели разработки......Page 54
Модель операционной системы......Page 55
Краткий обзор архитектуры......Page 56
Переносимость......Page 58
Симметричная мультипроцессорная обработка......Page 60
Масштабируемость......Page 62
Различия между клиентскими и серверными версиями......Page 63
Эксперимент: Определение факта запуска отладочной сборки......Page 67
Основные компоненты системы......Page 69
Эксперимент: просмотр типа подсистемы образа......Page 70
Подсистема Windows......Page 72
Подсистема для приложений на Unix-основе......Page 75
Ntdll.dll......Page 76
Исполняющая система......Page 77
Объекты ядра......Page 80
Поддержка оборудования......Page 83
Уровень аппаратных абстракций......Page 84
Драйверы устройств......Page 87
Модель драйверов Windows (WDM)......Page 88
Эксперимент: просмотр установленных драйверов устройств......Page 89
Системные процессы......Page 92
Процесс простоя системы......Page 93
Процесс System и системные потоки......Page 94
Диспетчер сеанса (Smss)......Page 97
Процесс инициализации Windows (Wininit.exe)......Page 98
Эксперимент: Вывод списка установленных служб......Page 99
Эксперимент: просмотр подробностей службы в ее процессах......Page 101
Winlogon, LogonUI и Userinit......Page 102
Заключение......Page 103
Диспетчеризация системных прерываний......Page 104
Диспетчеризация прерываний......Page 106
Эксперимент: просмотр IDT......Page 107
Контроллер прерываний x86......Page 109
Эксперимент: просмотр PIC и APIC......Page 110
Уровни запросов программных прерываний (IRQL)......Page 111
Программные прерывания......Page 131
Обработка таймера......Page 141
Истечение времени таймера......Page 144
Выбор процессора......Page 147
Интеллектуальное распределение обработки таймерного такта......Page 150
Объединение таймеров......Page 152
Диспетчеризация исключений......Page 154
Эксперимент: просмотр реального пользовательского стартового адреса для Windows-потоков......Page 158
Система Windows Error Reporting......Page 160
Диспетчеризация системных служб......Page 164
Таблицы дескрипторов служб......Page 170
Эксперимент: исследование диспетчера объектов......Page 173
Объекты исполняющей системы......Page 176
Структура объекта......Page 178
Заголовки и тела объектов......Page 179
Объекты типа......Page 185
Методы объекта......Page 189
Дескрипторы объекта и таблица дескрипторов процесса......Page 192
Резервные объекты......Page 199
Безопасность объекта......Page 200
Сохранение объектов......Page 202
Учет ресурсов......Page 206
Имена объектов......Page 207
Каталоги объектов......Page 208
Пространство имен сеанса......Page 212
Фильтрация объектов......Page 215
Синхронизация......Page 216
Высокоуровневая IRQL-синхронизация......Page 217
Спин-блокировки......Page 218
ЭКСПЕРИМЕНТ: Просмотр глобальных
спин-блокировок с очередью......Page 221
Взаимоблокируемые операции исполняющей системы......Page 222
Низкоуровневая IRQL-синхронизация......Page 223
Объекты диспетчера ядра......Page 224
Ожидание объектов диспетчера......Page 225
Что переводит объект в сигнальное состояние?......Page 226
Структуры данных......Page 229
События с ключом......Page 237
Быстрые мьютексы и защищенные мьютексы......Page 239
Ресурсы исполняющей системы......Page 241
Пуш-блокировки......Page 243
Ресурсы пользовательского режима......Page 245
Условные переменные......Page 246
Гибкие блокировки чтения-записи (Slim Reader-Writer Locks)......Page 247
Единовременная инициализация......Page 248
Системные рабочие потоки......Page 250
ЭКСПЕРИМЕНТ: Вывод списка системных рабочих потоков......Page 252
ЭКСПЕРИМЕНТ: просмотр и установка NtGlobalFlag......Page 253
Модель подключения......Page 255
Модель сообщений......Page 256
Асинхронные операции......Page 259
Просмотры, области и разделы......Page 260
Блобы, дескрипторы и ресурсы......Page 261
Безопасность......Page 262
Производительность......Page 263
ЭКСПЕРИМЕНТ: Вывод дампа порта подключения......Page 264
Отслеживание событий ядра......Page 266
Схема адресного пространства процессов Wow64......Page 270
Системные вызовы......Page 271
Перенаправления в файловой системе......Page 272
Перенаправления в реестре......Page 273
Запросы на управление вводом-выводом......Page 274
Ограничения......Page 275
Поддержка со стороны ядра......Page 276
ЭКСПЕРИМЕНТ: просмотр объектов отладчика......Page 278
Поддержка подсистемы Windows......Page 279
Загрузчик образов......Page 280
Ранняя стадия инициализации процесса......Page 282
Разрешение имен DLL-библиотек и перенаправление......Page 283
Перенаправление имени DLL......Page 284
База данных загруженных модулей......Page 287
Анализ импорта......Page 291
Инициализация процесса после импортирования......Page 292
Технология SwitchBack......Page 294
Наборы API-функций......Page 295
Гипервизор (Hyper-V)......Page 297
Разделы......Page 299
Операционная система родительского раздела......Page 300
Драйвер инфраструктуры виртуальных машин и API-библиотека гипервизора......Page 301
Дочерние разделы......Page 302
Просвещения......Page 304
Эмуляция и поддержка оборудования......Page 305
Эмулированные устройства......Page 306
Синтетические устройства......Page 307
Виртуализация памяти......Page 309
Динамическая миграция......Page 318
Диспетчер транзакций ядра......Page 321
Поддержка горячих исправлений......Page 324
Защита ядра от исправлений......Page 326
Целостность кода......Page 329
Заключение......Page 331
Просмотр и изменение реестра......Page 332
Использование реестра......Page 333
Типы данных реестра......Page 334
Логическая структура реестра......Page 335
HKEY_CURRENT_USER......Page 336
HKEY_USERS......Page 337
Эксперимент: Наблюдение за загрузкой и выгрузкой профилей......Page 338
HKEY_LOCAL_MACHINE......Page 339
Расширение для работы с реестром в режиме транзакций — Transactional Registry (TxR)......Page 343
Эксперимент: Просмотр активности реестра на простаивающей системе......Page 346
Технологии поиска и устранения неисправностей с помощью Process Monitor......Page 348
Регистрационная активность при работе с непривилегированными учетными записями или в процессе входа-выхода из системы......Page 349
Кусты......Page 350
Ограничения размера куста......Page 351
ЭКСПЕРИМЕНТ: Загрузка и выгрузка кустов вручную......Page 352
ЭКСПЕРИМЕНТ: просмотр дескрипторов кустов......Page 353
Отображения ячеек......Page 357
Пространство имен и работа реестра......Page 359
Обеспечение надежного хранения......Page 361
Оптимизации реестра......Page 363
Службы......Page 364
Приложения служб......Page 365
Учетная запись локальной системы......Page 371
Учетная запись сетевой службы (Network Service)......Page 373
Запуск с наименьшими привилегиями......Page 374
Изоляция служб......Page 376
Интерактивные службы и изоляция нулевого сеанса (Session 0)......Page 380
Диспетчер управления службами......Page 382
Запуск службы......Page 385
Признание загрузки и последняя удачная конфигурация......Page 390
Сбои служб......Page 392
Остановка службы......Page 393
Процессы, общие для нескольких служб......Page 395
Теги служб......Page 399
Инициализация Initialization......Page 400
Регистрация поставщика......Page 402
ЭКСПЕРИМЕНТ: Просмотр того, какие службы реагируют на какие триггеры......Page 404
Task Host......Page 405
Программы управления службами......Page 406
Архитектура WMI......Page 407
Поставщики......Page 409
Common Information Model и язык Managed Object Format......Page 410
ЭКСПЕРИМЕНТ: Просмотр пространств имен WMI......Page 414
Связи классов......Page 415
Реализация WMI......Page 417
Безопасность WMI......Page 419
Инструментарий WDI......Page 420
Служба политики диагностики......Page 421
Проведение диагностики......Page 422
Заключение......Page 423
Структуры данных......Page 424
Защищенные процессы......Page 432
Порядок работы функции CreateProcess......Page 434
Этап 1: Преобразование и проверка приемлемости параметров и флагов......Page 435
Этап 2: Открытие образа, предназначенного для выполнения......Page 439
Этап 3: Создание объекта процесса исполняющей системы Windows (PspAllocateProcess)......Page 442
Этап 3А: Настройка объекта EPROCESS......Page 443
Этап 3В: Создание находящейся в ядре структуры процесса......Page 445
Этап 3Г: Завершение настройки адресного пространства процесса......Page 446
Этап 3Е: Завершение настройки объекта процесса исполняющей системы (PspInsertProcess)......Page 447
Этап 4: Создание исходного потока, а также его стека и контекста......Page 448
Этап 5: Выполнение следующих за инициализацией действий, относящихся к подсистеме Windows......Page 451
Этап 6: Начало выполнения исходного потока......Page 452
Этап 7: Выполнение инициализации процесса в контексте нового процесса......Page 453
Структура данных......Page 459
ЭКСПЕРИМЕНТ: Изучение структуры W32THREAD......Page 465
Изучение активности потока......Page 466
Ограничения, накладываемые на потоки защищенного процесса......Page 469
Рабочие фабрики (пулы потоков)......Page 471
Обзор организации планирования в Windows......Page 475
Уровни приоритета......Page 478
Состояния потоков......Page 484
База данных диспетчера......Page 490
Кванты времени......Page 492
Повышение приоритета......Page 500
Сценарии планирования......Page 521
ЭКСПЕРИМЕНТ: Вывод структуры потоков простоя
и их процесса......Page 526
Выбор потока......Page 530
Мультипроцессорные системы......Page 532
Выбор потока на мультипроцессорных системах......Page 543
Выбор процессора......Page 544
Планирование, основанное на долевом использовании процессора......Page 546
Распределенное справедливое долевое планирование......Page 547
Ограничения норм использования центрального процессора......Page 555
Динамическое добавление и удаление процессоров......Page 557
Ограничения заданий......Page 559
Наборы заданий......Page 560
Заключение......Page 563
Критерии оценки заслуживающих доверия компьютерных систем......Page 564
Общие критерии......Page 566
Системные компоненты безопасности......Page 567
ЭКСПЕРИМЕНТ: Изучение HKLM\SAM и HKLM\Security изнутри......Page 571
Проверки прав доступа......Page 573
Идентификаторы безопасности......Page 576
Виртуальные учетные записи служб......Page 597
Дескрипторы безопасности и управление доступом......Page 601
AuthZ API......Page 618
Права доступа и привилегии......Page 620
Права учетной записи......Page 622
ЭКСПЕРИМЕНТ: наблюдение за включением привилегии......Page 623
ЭКСПЕРИМЕНТ: привилегия обхода промежуточных проверок......Page 629
Маркеры доступа процессов и потоков......Page 631
Аудит безопасности......Page 632
Аудит доступа к объекту......Page 633
Глобальная политика аудита......Page 636
Вход в систему......Page 639
Инициализация Winlogon......Page 641
Этапы входа пользователя в систему......Page 642
Гарантированная аутентификация......Page 647
Биометрическая среда для аутентификации пользователей......Page 649
Управление учетными записями пользователей и виртуализация......Page 651
Файловая система и виртуализация реестра......Page 652
Повышение привилегий......Page 659
Идентификация приложений (AppID)......Page 670
AppLocker......Page 672
Политики ограниченного использования программ......Page 678
ЭКСПЕРИМЕНТ: просмотр принудительного применения политик ограниченного использования программ......Page 680
Исходная модель OSI......Page 681
Сетевые компоненты Windows......Page 685
Сокеты Windows......Page 688
Ядро Winsock......Page 695
Вызов удаленной процедуры......Page 697
API-интерфейсы веб-доступа......Page 703
Именованные каналы и почтовые слоты......Page 705
NetBIOS......Page 712
Другие сетевые API......Page 714
Маршрутизатор многосетевого доступа (MPR)......Page 722
Многосетевой UNC-поставщик (MUP)......Page 725
Заменители поставщиков......Page 727
Редиректор......Page 728
Миниредиректоры......Page 730
Протокол блока сообщений сервера и подчиненные редиректоры......Page 731
Пространство имен распределенной файловой системы......Page 732
Репликация распределенной файловой системы......Page 734
Автономные файлы......Page 735
Режимы кэширования......Page 737
Призраки......Page 739
Структура кэша......Page 740
BranchCache......Page 742
Режимы кэширования......Page 744
Оптимизированное извлечение данных приложением с помощью BranchCache: SMB-последовательность......Page 750
Оптимизированное извлечение данных приложением с помощью BranchCache: HTTP‑последовательность......Page 752
Система имен домена......Page 754
Протокол разрешения имен одноранговой сети......Page 755
Служба сведений о подключенных сетях......Page 757
Индикатор состояния сетевого подключения......Page 758
Обнаружение топологии Link-Layer......Page 761
Драйверы протокола......Page 762
Платформа фильтрации Windows Filtering Platform......Page 767
NDIS-драйверы......Page 773
NDIS-драйверы, ориентированные на установку соединения......Page 778
Remote NDIS......Page 781
QoS......Page 782
Привязка......Page 785
Active Directory......Page 787
Network Load Balancing......Page 789
Защита сетевого доступа......Page 790
Direct Access......Page 796
Заключение......Page 799
Эксперимент: просмотр дерева процессов......Page 23
Эксперимент: просмотр информации о процессах с помощью Диспетчера задач......Page 25
Эксперимент: просмотр подробностей процесса с помощью Process Explorer......Page 27
Эксперимент: Сравнение времени работы в режима ядра
и в пользовательском режиме......Page 37
Эксперимент: Отображение информации о типах для структур ядра......Page 50
Эксперимент: Определение возможностей, разрешенных политикой лицензирования......Page 65
Эксперимент: просмотр KPCR и KPRCB......Page 82
эксперимент: просмотр зависимостей NTOSKRNL и HAL......Page 85
Эксперимент: отображение системного потока
на драйвер устройства......Page 95
Эксперимент: просмотр IRQL......Page 114
Эксперимент: Использование средства профилирования ядра (Kernrate) для замера производительности......Page 117
Эксперимент: Изучение внутреннего устройства прерываний......Page 123
Эксперимент: отслеживание активности прерываний и DPC......Page 135
Эксперимент: Идентификация таймеров, работающих с повышенной частотой......Page 142
Эксперимент: вывод списка системных таймеров......Page 148
Эксперимент: Определение местоположения
диспетчера системных служб......Page 165
Эксперимент: отображение номеров системных служб на функции и аргументы......Page 171
Эксперимент: Просмотр заголовков объектов
и объектов типа......Page 187
Эксперимент: просмотр открытых дескрипторов......Page 193
ЭКСПЕРИМЕНТ: Создание максимального количества дескрипторов......Page 195
Эксперимент: Просмотр таблицы дескрипторов
с помощью отладчика ядра......Page 197
Эксперимент: Поиск открытых файлов
с помощью отладчика ядра......Page 198
Эксперимент: Просмотр безопасности объекта......Page 201
ЭКСПЕРИМЕНТ: Просмотр основных объектов с именами......Page 210
ЭКСПЕРИМЕНТ: Самовольное вмешательство в процесс использования единственного экземпляра......Page 211
ЭКСПЕРИМЕНТ: Просмотр экземпляров пространства имен......Page 214
ЭКСПЕРИМЕНТ: Просмотр очередей ожиданий......Page 233
ЭКСПЕРИМЕНТ: Вывод списка полученных ресурсов исполняющей системы......Page 242
ЭКСПЕРИМЕНТ: просмотр объектов ALPC-порта подсистмы......Page 257
ЭКСПЕРИМЕНТ: Отслеживание активности TCP/IP
с помощью регистратора ядра......Page 268
ЭКСПЕРИМЕНТ: наблюдение за работой загрузчика образов......Page 281
ЭКСПЕРИМЕНТ: наблюдение порядка поиска при загрузке DLL......Page 286
ЭКСПЕРИМЕНТ: Вывод дампа базы данных
загруженных модулей......Page 288
ЭКСПЕРИМЕНТ: Исследование дочерних разделов из родительского раздела с помощью LiveKd......Page 303
ЭКСПЕРИМЕНТ: наблюдение за динамической памятью......Page 316
ЭКСПЕРИМЕНТ: Вывод списка диспетчеров транзакций......Page 323
Эксперимент: Автономное или удаленное редактирование BCD......Page 341
ЭКСПЕРИМЕНТ: Использование Process Monitor для определения местонахождения настроек приложения в реестре......Page 347
ЭКСПЕРИМЕНТ: наблюдение за использованием пула выгружаемой памяти куста......Page 358
ЭКСПЕРИМЕНТ: Просмотр блоков управления разделами......Page 360
ЭКСПЕРИМЕНТ: просмотр привилегий, требуемых службам......Page 375
ЭКСПЕРИМЕНТ: просмотр служб, запущенных внутри процесса......Page 398
ЭКСПЕРИМЕНТ: просмотр триггер-поставщиков UBPM......Page 403
ЭКСПЕРИМЕНТ: просмотр MOF-определений WMI-классов......Page 413
ЭКСПЕРИМЕНТ: Использование сценариев WMI
для управления системами......Page 416
ЭКСПЕРИМЕНТ: Просмотр создания Wmiprvse......Page 418
ЭКСПЕРИМЕНТ: Вывод формата структуры EPROCESS и ее полей......Page 427
ЭКСПЕРИМЕНТ: Использование команды отладчика
ядра !process......Page 429
ЭКСПЕРИМЕНТ: Исследование PEB......Page 430
ЭКСПЕРИМЕНТ: Исследование W32PROCESS......Page 431
Эксперимент: отслеживание запуска процесса......Page 454
ЭКСПЕРИМЕНТ: Использование команды отладчика ядра !thread......Page 461
ЭКСПЕРИМЕНТ: Просмотр информации о потоке......Page 462
ЭКСПЕРИМЕНТ: Изучение TEB......Page 463
ЭКСПЕРИМЕНТ: Изучение CSR_THREAD......Page 464
ЭКСПЕРИМЕНТ: Просмотр информации о потоке
защищенного процесса......Page 470
ЭКСПЕРИМЕНТ: Посмотр пулов потоков......Page 473
ЭКСПЕРИМЕНТ: Просмотр готовых потоков......Page 476
ЭКСПЕРИМЕНТ: изучение и определение приоритетов
процесса js и потоков......Page 482
ЭКСПЕРИМЕНТ: Изменение состояний планирования потока......Page 488
ЭКСПЕРИМЕНТ: Определение величины интервала системного таймера......Page 493
ЭКСПЕРИМЕНТ: Определение количества тактовых циклов на один квант......Page 494
ЭКСПЕРИМЕНТ: Влияние изменения настройки кванта......Page 499
Эксперимент: наблюдение за повышениями и снижениями приоритета потоков первого плана......Page 506
ЭКСПЕРИМЕНТ: Наблюдение за повышениями приоритета
GUI-потоков......Page 509
ЭКСПЕРИМЕНТ: Наблюдение за приоритетом потоков для выявления перезагруженности центрального процессора......Page 512
ЭКСПЕРИМЕНТ: «Прослушивание» повышений приоритета......Page 514
ЭКСПЕРИМЕНТ: «прослушивание» повышения приоритета, связанного с работой службы MMCSS......Page 519
ЭКСПЕРИМЕНТ: просмотр информации
о логическом процессоре......Page 533
ЭКСПЕРИМЕНТ: просмотр NUMA-информации......Page 534
ЭКСПЕРИМЕНТ: просмотр и изменение родственности процесса......Page 539
ЭКСПЕРИМЕНТ: Просмотр объекта задания......Page 561
ЭКСПЕРИМЕНТ: Использование PsGetSid и Process Explorer для просмотра SID-идентификаторов......Page 578
ЭКСПЕРИМЕНТ: просмотр уровней целостности процессов......Page 580
ЭКСПЕРИМЕНТ: изучение защищенного режима
Internet Explorer......Page 582
ЭКСПЕРИМЕНТ: просмотр уровня целостности объектов......Page 584
ЭКСПЕРИМЕНТ: просмотр маркеров доступа......Page 589
ЭКСПЕРИМЕНТ: Запуск программы на уровне целостности
Low (низкий)......Page 592
ЭКСПЕРИМЕНТ: просмотр фильтрованных маркеров администратора......Page 596
ЭКСПЕРИМЕНТ: Использование виртуальных
учетных записей служб......Page 598
ЭКСПЕРИМЕНТ: Просмотр дескриптора безопасности......Page 606
ЭКСПЕРИМЕНТ: проведение аудита доступа к объекту......Page 634
ЭКСПЕРИМЕНТ: Установка политики глобального аудита......Page 637
ЭКСПЕРИМЕНТ: Вывод списка активных сеансов
входа в систему......Page 645
ЭКСПЕРИМЕНТ: поведение, связанное
с виртуализацией файлов......Page 657
ЭКСПЕРИМЕНТ: Использование флагов совместимости приложений......Page 666
Эксперимент: Просмотр службы Winsock и поставщиков пространства имен......Page 692
ЭКСПЕРИМЕНТ: вывод списка пространств имен именованных каналов и наблюдение за активностью этих каналов......Page 710
ЭКСПЕРИМЕНТ: Использование Nbtstat для просмотра NetBIOS-имен......Page 713
ЭКСПЕРИМЕНТ: просмотр объектов устройств TCP/IP......Page 765
ЭКСПЕРИМЕНТ: вывод списка загруженных NDIS-мини-портов......Page 776
ЭКСПЕРИМЕНТ: использование Network Monitor
для захвата сетевых пакетов......Page 779