Предисловие. | 15 |
Глава 1. Операционные системы и их интерфейсы | 19 |
1.1.Назначение операционной системы | 19 |
1.2.Типы операционных систем | 19 |
1.3.Интерфейс программирования приложений Win 32 API | 21 |
1.4.Типы данных в Win 32 API | 22 |
1.5.Объекты и их дескрипторы в Windows | 24 |
ЧАСТЬ I . УПРАВЛЕНИЕ ПОТОКАМИ И ПРОЦЕССАМИ | 27 |
Глава 2. Потоки и процессы | 29 |
2.1.Определение потока | 29 |
2.2.Контекст потока | 31 |
2.3.Состояния потока | 33 |
2.4.Диспетчеризация и планирование потоков | 37 |
2.5.Определение процесса | 40 |
Глава 3. Потоки в Windows | 41 |
3.1.Определение потока | 41 |
3.2.Создание потоков | 42 |
3.3.Завершение потоков | 47 |
3.4.Приостановка и возобновление потоков | 49 |
3.5.Псевдодескрипторы потоков | 52 |
3.6.Обработка ошибок в Windows | 53 |
Глава 4. Процессы в Windows | 58 |
4.1.Определение процесса | 58 |
4.2.Создание процессов | 58 |
4.3.Завершение процессов | 64 |
4.4.Наследование дескрипторов | 67 |
4.5.Дублирование дескрипторов | 75 |
4.6.Псевдодескрипторы процессов | 81 |
4.7.Обслуживание потоков | 82 |
4.8.Динамическое изменение приоритетов потоков | 88 |
ЧАСТЬ II . СИНХРОНИЗАЦИЯ ПОТОКОВ | |
И ПРОЦЕССОВ | 93 |
Глава 5. Синхронизация | 95 |
5.1.Непрерывные действия и команды | 95 |
5.2.Определение синхронизации | 96 |
5.3.Программная реализация синхронизации | 97 |
5.4.Аппаратная реализация синхронизации | 101 |
5.5.Примитивы синхронизации | 104 |
Глава 6. Синхронизация потоков в Windows | 109 |
6.1.Критические секции | 109 |
6.2.Объекты синхронизации и функции ожидания | 115 |
6.3.Мыотексы | 121 |
6.4.События | 128 |
6.5.Семафоры | 137 |
Глава 7. Взаимоисключающий доступ к переменным | 143 |
7.1.Атомарные операции | 143 |
7.2.Замена значения переменной | 144 |
7.3.Условная замена значения переменной | 146 |
7.4.Инкремент и декремент переменной | 148 |
7.5.Изменение значения переменной | 150 |
Глава 8. Тупики | 153 |
8.1.Определение тупиков | 153 |
8.2.Классификация системных ресурсов | 154 |
8.3.Обнаружение тупиков | 156 |
8.4.Восстановление заблокированного процесса | 158 |
8.5.Предотвращение тупиков | 160 |
8.6.Безопасное завершение потоков в Windows | 161 |
ЧАСТЬ III . ПРОГРАММИРОВАНИЕ КОНСОЛЬНЫХ | |
ПРИЛОЖЕНИЙ | 165 |
Глава 9. Структура консольного приложения | 167 |
9.1.Структура консоли | 167 |
9.2.Входной буфер консоли | 167 |
9.3.Буфер экрана | 171 |
Глава 10. Работа с консолью | 172 |
10.1.Создание консоли | 172 |
10.2.Освобождение консоли | 177 |
10.3.Стандартные дескрипторы ввода-вывода | 178 |
Глава 11. Работа с окном консоли | 180 |
11.1.Получение дескриптора окна консоли | 180 |
11.2.Получение и изменение заголовка консоли | 181 |
11.3.Определение максимального размера окна | 183 |
11.4.Установка координат окна | 184 |
Глава 12. Работа с буфером экрана | 188 |
12.1.Создание и активация буфера экрана | 188 |
12.2.Определение и установка параметров буфера экрана | 191 |
12.3.Функции для работы с курсором | 194 |
12.4.Чтение и установка атрибутов консоли | 197 |
Глава 13. Ввод-вывод на консоль | 203 |
13.1.Ввод-вывод высокого уровня | 203 |
13.2.Ввод низкого уровня | 207 |
13.3.Вывод низкого уровня | 215 |
13.4.Режимы ввода-вывода консоли | 225 |
13.5.Прокрутка буфера экрана | 229 |
ЧАСТЬ IV . ОБМЕН ДАННЫМИ МЕЖДУ ПАРАЛЛЕЛЬНЫМИ | |
ПРОЦЕССАМИ | 235 |
Глава 14. Передача данных | 237 |
14.1.Способы передачи данных между процессами | 237 |
14.2.Связи между процессами | 239 |
14.3.Передача сообщений | 240 |
14.4.Синхронный и асинхронный обмен данными | 241 |
14.5.Буферизация | 242 |
Глава 15. Работа с анонимными каналами в Windows | 243 |
15.1.Анонимные каналы | 243 |
15.2.Создание анонимных каналов | 244 |
15.3.Соединение клиентов с анонимным каналом | 245 |
15.4.Обмен данными по анонимному каналу | 246 |
15.5.Примеры работы с анонимными каналами | 247 |
15.6.Перенаправление стандартного ввода-вывода | 257 |
Глава 16. Работа с именованными каналами в Windows | 265 |
16.1.Именованные каналы | 265 |
16.2.Создание именованных каналов | 266 |
16.3.Соединение сервера с клиентом | 268 |
16.4.Соединение клиентов с именованным каналом | 269 |
16.5.Обмен данными по именованному каналу | 272 |
16.6.Копирование данных из именованного канала | 285 |
16.7.Передача транзакций по именованному каналу | 289 |
16.8.Определение и изменение состояния именованного канала | 295 |
16.9.Получение информации об именованном канале | 303 |
Глава 17. Работа с почтовыми ящиками в Windows | 307 |
17.1.Концепция почтовых ящиков | 307 |
17.2.Создание почтовых ящиков | 308 |
17.3.Соединение клиентов с почтовым ящиком | 309 |
17.4.Обмен данными через почтовый ящик | 311 |
17.5.Получение информации о почтовом ящике | 315 |
17.6.Изменение времени ожидания сообщения | 321 |
ЧАСТЬ V . СТРУКТУРНАЯ ОБРАБОТКА ИСКЛЮЧЕНИЙ | 325 |
Глава 18. Фреймовая обработка исключений | 327 |
18.1.Исключения и их обработчики | 327 |
18.2.Получение кода исключения | 330 |
18.3.Функции фильтра | 332 |
18.4.Получение информации об исключении | 334 |
18.5.Генерация программных исключений | 337 |
18.6.Необработанные исключения | 340 |
18.7.Обработка исключений с плавающей точкой | 342 |
18.8.Обработка вложенных исключений | 344 |
18.9.Передача управления и выход из фрейма | 346 |
18.10.Встраивание SEH в механизм исключений C ++ | 348 |
Глава 19. Финальная обработка исключений | 351 |
19.1.Финальные блоки фрейма | 351 |
19.2.Проверка завершения фрейма | 353 |
19.3.Обработка вложенных финальных блоков | 354 |
ЧАСТЬ VI . РАБОТА С ВИРТУАЛЬНОЙ ПАМЯТЬЮ | 357 |
Глава 20. Виртуальная память | 359 |
20.1.Концепция виртуальной памяти | 359 |
20.2.Организация виртуальной памяти | 360 |
20.3.Алгоритмы замещения страниц | 362 |
20.4.Рабочее множество процесса | 363 |
20.5.Организация виртуальной памяти в Windows | 363 |
Глава 21. Работа с виртуальной памятью в Windows | 367 |
21.1.Состояния виртуальной памяти процесса | 367 |
21.2.Резервирование, распределение и освобождение | 368 |
виртуальной памяти | |
21.3.Блокирование виртуальных страниц в реальной памяти | 376 |
21.4.Изменение атрибутов доступа к виртуальной странице | 378 |
21.5.Управление рабочим множеством страниц процесса | 380 |
21.6.Инициализация и копирование блоков виртуальной памяти | 383 |
21.7.Определение состояния памяти | 385 |
21.8.Работа с виртуальной памятью в другом процессе | 388 |
Глава 22. Работа с кучей в Windows | 393 |
22.1.Создание и удаление кучи | 393 |
22.2.Распределение и освобождение памяти из кучи | 395 |
22.3.Перераспределение памяти из кучи | 401 |
22.4.Блокирование и разблокирование кучи | 403 |
22.5.Проверка состояния кучи | 406 |
22.6.Уплотнение кучи | 411 |
ЧАСТЬ VII . УПРАВЛЕНИЕ ФАЙЛАМИ | 415 |
Глава 23. Общие концепции | 417 |
23.1.Накопители на жестких магнитных дисках | 417 |
23.2.Секторы и кластеры | 418 |
23.4.Форматирование дисков | 419 |
23.5.Функции файловой системы | 420 |
23.6.Каталоги | 420 |
23.7.Буферизация ввода-вывода | 421 |
23.8.Кэширование ввода-вывода | 421 |
Глава 24. Работа с файлами в Windows | 423 |
24.1.Именование файлов в Windows | 423 |
24.2.Создание и открытие файлов | 424 |
24.3.Закрытие и удаление файлов | 427 |
24.4.Запись данных в файл | 428 |
24.5.Освобождение буферов файла | 430 |
24.6.Чтение данных из файла | 433 |
24.7.Копирование файла | 435 |
24.8.Перемещение файла | 437 |
24.9.Замещение файла | 438 |
24.10.Работа с указателем позиции файла | 440 |
24.11.Определение и изменение атрибутов файла | 446 |
24.12.Определение и изменение размеров файла | 449 |
24.13.Блокирование файла | 455 |
24.14.Получение информации о файле | 459 |
Глава 25. Работа с каталогами (папками) в Windows | 468 |
25.1. Создание каталога | 468 |
25.2. Поиск файлов в каталоге | 470 |
25.3. Удаление каталога | 473 |
25.4. Перемещение каталога | 476 |
25.5. Определение и установка текущего каталога | 477 |
25.6. Наблюдение за изменениями в каталоге | 479 |
ЧАСТЬ VIII . АСИНХРОННАЯ ОБРАБОТКА ДАННЫХ | 483 |
Глава 26. Асинхронный вызов процедур | 485 |
26.1. Механизм асинхронного вызова процедур | 485 |
26.2. Установка асинхронных процедур | 486 |
26.3. Приостановка потока | 487 |
26.4. Ожидание события | 489 |
26.5. Оповещение и ожидание события | 494 |
Глава 27. Асинхронный доступ к данным | 499 |
27.1. Концепция асинхронного ввода-вывода | 499 |
27.2. Асинхронная запись данных | 500 |
27.3. Асинхронное чтение данных | 506 |
24.1. Блокирование файлов | 511 |
27.1. Определение состояния асинхронной операции ввода-вывода | 518 |
27.2. Отмена асинхронной операции ввода-вывода | 522 |
27.3. Процедуры завершения ввода-вывода | 528 |
27.4. Асинхронная запись данных с процедурами завершения | 529 |
27.5. Асинхронное чтение данных с процедурами завершения | 532 |
Глава 28. Порты завершения | 536 |
28.1. Концепция порта завершения | 536 |
28.2. Создание порта завершения | 537 |
28.3. Получение пакета из порта завершения | 538 |
28.4. Посылка пакета в порт завершения | 539 |
Глава 29. Работа с ожидающим таймером | 544 |
29.1. Ожидающий таймер | 544 |
29.2. Создание ожидающего таймера | 545 |
29.3. Установка ожидающего таймера | 546 |
29.4. Отмена ожидающего таймера | 549 |
29.5. Открытие существующего ожидающего таймера | 552 |
29.6. Процедуры завершения ожидания | 555 |
ЧАСТЬ IX. ДИНАМИЧЕСКИ ПОДКЛЮЧАЕМЫЕ | |
БИБЛИОТЕКИ | 559 |
Глава 30.Отображение файлов в память | 561 |
30.1. Концепция механизма отображения файлов в память | 561 |
30.2. Создание и открытие объекта, отображающего файл | 562 |
30.3. Отображение файла в память | 564 |
30.4. Обмен данными между процессами через отображаемый | 569 |
в память файл | |
30.5. Сброс вида в файл | 573 |
Глава 31. Динамически подключаемые библиотеки | 578 |
31. L . Концепция динамически подключаемых библиотек | 578 |
31.2. Создание DLL | 579 |
31.3. Динамическая загрузка и отключение DLL | 581 |
31.4. Использование DLL | 584 |
31.5. Использование файла определений | 588 |
31.6. Статическая загрузка DLL | 592 |
Глава 32. Локальная память потока | 594 |
32.1. Динамическая локальная память потока | 594 |
32.2. Распределение и освобождение локальной памяти потока | 595 |
32.3. Запись и чтение из локальной памяти потока | 595 |
32.4. Статическая локальная память потока | 602 |
ЧАСТЬ X . РАЗРАБОТКА СЕРВИСОВ В WINDOWS | 605 |
Глава 33. Сервисы в Windows | 607 |
33.1. Концепция сервиса | 607 |
33.2. Структура сервиса | 608 |
33.3. Организация функции main | 609 |
33.4. Организация функции ServiceMain | 611 |
33.5. Организация обработчика управляющих команд | 617 |
Глава 34. Работа с сервисами в Windows | 620 |
34.1. Открытие доступа к базе данных сервисов | 620 |
34.2. Установка сервиса | 621 |
34.3. Открытие доступа к сервису | 627 |
34.4. Запуск сервиса | 627 |
34.5. Определение и изменение состояния сервиса | 630 |
34.6. Определение и изменение конфигурации сервиса | 634 |
34.7. Определение имени сервиса | 641 |
34.8. Управление сервисом | 646 |
34.9. Удаление сервисов | 649 |
34.10. Блокирование базы данных сервисов | 653 |
ЧАСТЬ XI . УПРАВЛЕНИЕ БЕЗОПАСНОСТЬЮ В WINDOWS | 659 |
Глава 35. Система информационной безопасности | 661 |
35.1. Контроль доступа к ресурсам | 661 |
35.2. Политика безопасности | 662 |
35.3. Модель безопасности | 663 |
35.4. Дискреционная политика безопасности | 664 |
35.5. Дискреционная модель безопасности | 665 |
35.6. Реализация дискреционной модели безопасности | 668 |
Глава 36. Управление безопасностью в Windows | 671 |
36.1. Модель безопасности в Windows | 671 |
36.2. Учетные записи | 672 |
36.3. Домены | 674 |
36.4. Группы | 676 |
36.5. Идентификаторы безопасности | 678 |
36.6. Дескрипторы безопасности | 682 |
36.7. Списки управления доступом ACL | 683 |
36.8. Маркеры доступа | 687 |
36.9. Создание новых объектов | 693 |
36.10. Контроль доступа к охраняемому объекту | 694 |
36.11. Аудит доступа к охраняемому объекту | 696 |
36.12. Структура системы безопасности | 696 |
Глава 37. Управление пользователями | 699 |
37.1. Создание учетной записи пользователя | 699 |
37.2. Получение информации о пользователе | 704 |
37.3. Перечисление пользователей | 706 |
37.4. Перечисление групп, которым принадлежит пользователь | 710 |
37.5. Изменение учетной записи пользователя | 715 |
37.6. Изменение пароля пользователя | 719 |
37.7. Удаление учетной записи пользователя | 721 |
Глава 38. Управление группами | 724 |
38.1. Создание локальной группы | 724 |
38.2. Получение информации о локальной группе | 727 |
38.3. Перечисление локальных групп | 729 |
38.4. Изменение информации о локальной группе | 732 |
38.5. Добавление членов локальной группы | 736 |
38.6. Установка членов локальной группы | 742 |
38.7. Перечисление членов локальной группы | 745 |
38.8. Удаление членов локальной группы | 748 |
38.9. Удаление локальной группы | 754 |
Глава 39. Работа с идентификаторами безопасности | 756 |
39.1. Структура идентификатора безопасности | 756 |
39.2. Создание идентификатора безопасности | 757 |
39.3. Определение учетной записи по идентификатору безопасности | 764 |
39.4. Определение идентификатора безопасности | |
по имени учетной записи | 769 |
39.5. Получение характеристик идентификатора безопасности | 773 |
39.6. Копирование и сравнение идентификаторов безопасности | 777 |
39.7. Строковое представление идентификатора безопасности | 782 |
Глава 40. Работа с дескрипторами безопасности | 788 |
40.1. Форматы дескрипторов безопасности | 788 |
40.2. Создание нового дескриптора безопасности | 791 |
40.3. Определение длины дескриптора безопасности | 797 |
40.4. Получение дескриптора безопасности по имени объекта | 802 |
40.5. Получение дескриптора безопасности по дескриптору объекта | 806 |
40.6. Получение данных из дескриптора безопасности | 810 |
40.7. Получение состояния управляющих флагов дескриптора безопасности | 815 |
40.8. Изменение дескриптора безопасности по имени объекта | 818 |
40.9. Изменение дескриптора безопасности по дескриптору объекта | 823 |
40.10. Изменение состояния управляющих флагов дескриптора безопасности | 827 |
40.11. Строковое представление дескрипторов безопасности | 831 |
Глава 41. Работа со списками управления доступом на высоком уровне | 840 |
41.1. Структура TRUSTEE | 840 |
41.2. Инициализация структуры TRUSTE | 842 |
41.3. Структура EXPLICIT _ ACCESS | 846 |
41.4. Инициализация структуры EXPLICIT _ ACCESS | 849 |
41.5. Создание нового списка управления доступом | 850 |
41.6. Модификация списка управления доступом | 862 |
41.7. Получение элементов из списка управления доступом | 870 |
41.8. Получение информации из структуры TRUSTEE | 871 |
41.9. Получение прав доступа из списка управления доступом | 874 |
41.10. Получение из списка управления доступом прав, | |
которые подвергаются аудиту | 878 |
Глава 42. Работа с привилегиями | 885 |
42.1. Локальные идентификаторы привилегий | 885 |
42.2. Инициализация локального идентификатора | 887 |
42.3. Получение локального идентификатора привилегии | 888 |
42.4. Получение имени привилегии | 888 |
42.5. Получение имени привилегии для отображения | 891 |
Глава 43. Работа с маркерами доступа | 894 |
43.1. Открытие маркера доступа процесса | 894 |
43.2. Открытие маркера доступа потока | 896 |
43.3. Структуры, используемые для работы с маркером доступа | 896 |
43.4. Получение информации из маркера доступа | 900 |
43.5. Изменение информации в маркере доступа | 908 |
43.6. Настройка привилегий | 917 |
43.7. Настройка групп | 918 |
43.8. Создание маркера ограниченного доступа | 920 |
43.9. Дублирование маркеров доступа | 927 |
43.10. Замещение маркеров доступа потока | 929 |
43.11. Проверка идентификатора безопасности | |
на принадлежность маркеру доступа | 932 |
Глава 44. Работа со списками управления доступом па низком уровне | 939 |
44.1. Структура списка управления доступом | 939 |
44.2. Структура элемента списка управления доступом | 940 |
44.3. Инициализация списка управления доступом | 943 |
44.4. Проверка достоверности списка управления доступом | 944 |
44.5. Добавление элементов в список управления доступом | 945 |
44.6. Получение элементов из списка управления доступом | 972 |
44.7. Удаление элементов из списка управления доступом | 977 |
44.8. Получение информации о списке управления доступом | 981 |
44.9. Установка версии списка управления доступом | 985 |
44.10. Определение доступной памяти | 986 |
Глава 45. Управление безопасностью объектов на низком уровне | 987 |
45.1. Доступ к информации о владельце объекта | 988 |
45.2. Доступ к информации о первичной группе владельца объекта | 992 |
45.3. Доступ к списку DACL | 997 |
45.4. Доступ к списку SACL | 1004 |
45.5. Защита файлов и каталогов | 1006 |
45.6. Защита объектов ядра | 1016 |
45.7. Защита сервисов | 1024 |
45.8. Защита ключей реестра | 1031 |
45.9. Защита объектов пользователя | 1037 |
Приложение. Описание компакт-диска | 1045 |
Предметный указатель | 1047 |