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