Системное программирование в 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 совершенно бесплатно.
Системное программирование в Windows
Рейтинг книги:
4 голоса
150

Поиск книг:




При поиске учитываются только слова, длина которых больше 3-х символов.

Статистика: