Содержание: Благодарности
Введение
Часть I. Материалы для обязательного чтения
Глава 1. Обработка ошибок
Вы тоже можете это сделать
Программа-пример ErrorShow..
Глава 2. Работа с символами и строками
Наборы символов
Символьные и строковые типы данных для ANSI и Unicode
Unicode- и ANSI-функции в Windows
Unicode- и ANSI-функции в библиотеке С
Безопасные строковые функции в библиотеке С
Почему Unicode?
Рекомендуемые приемы работы с символами и строками
Перекодировка строк из Unicode в ANSI и обратно
Глава 3. Объекты ядра
Что такое объект ядра
Таблица описателей объектов ядра
Совместное использование объектов ядра несколькими процессами
Часть II. Приступаем к работе
Глава 4. Процессы
Ваше первое Windows-приложение
Функция CreateProcess
Завершение процесса
Дочерние процессы
Работа администратора с пользовательскими полномочиями
Глава 5. Задания
Определение ограничений, налагаемых на процессы в задании
Включение процесса в задание
Завершение всех процессов в задании
Уведомления заданий
Программа-пример JobLab
Глава 6. Базовые сведения о потоках
В каких случаях потоки создаются
И в каких случаях потоки не создаются
Ваша первая функция потока
Функция CreateThread
Завершение потока
Кое-что о внутреннем устройстве потока
Некоторые соображения по библиотеке С/С++
Как узнать о себе
Глава 7. Планирование потоков, приоритет и привязка к процессорам
Приостановка и возобновление потоков
Приостановка и возобновление процессов
Функция Sleep
Переключение потоков
Определение периодов выполнения потока
Структура CONTEXT
Приоритеты потоков
Абстрагирование приоритетов
Программирование приоритетов
Привязка потоков к процессорам
Глава 8. Синхронизация потоков в пользовательском режиме
Атомарный доступ: семейство Interlocked-функций
Кэш-линии
Более сложные методы синхронизации потоков
Критические секции
«Тонкая» блокировка
Условные переменные
Глава 9. Синхронизация потоков с использованием объектов ядра
Wait-функции
Побочные эффекты успешного ожидания
События
Ожидаемые таймеры
Семафоры
Мьютексы
Сводная таблица объектов, используемых для синхронизации потоков
Другие функции, применяемые в синхронизации потоков
Глава 10. Синхронный и асинхронный ввод-вывод на устройствах
Открытие и закрытие устройств
Близкое знакомство с функцией CreateFile
Работа с файлами
Синхронный ввод-вывод на устройствах
Асинхронный ввод-вывод на устройствах: основы
Уведомление о завершении ввода-вывода
Глава 11. Пулы потоков
Сценарий 1. Асинхронный вызов функций
Сценарий 2. Вызов функций через определенные интервалы времени
Сценарий 3. Вызов функций при освобождении отдельных объектов ядра
Сценарий 4. Вызов функций по завершении запросов асинхронного ввода-вывода
Глава 12. Волокна
Работа с волокнами
Программа-пример Counter
Часть III. Управление памятью
Глава 13. Архитектура памяти в Windows
Виртуальное адресное пространство процесса
Как адресное пространство разбивается на разделы
Физическая память в страничный файл
Атрибуты защиты
Подводя итоги
Выравнивание данных
Глава 14. Исследование виртуальной памяти
Системная информация
Статус виртуальной памяти
Управление памятью на компьютерах с архитектурой NUMA
Определение состояния адресного пространства
Глава 15. Использование виртуальной памяти в приложениях
Резервирование региона в адресном пространстве
Передача памяти зарезервированному региону
Возврат физической памяти и освобождение региона.
Механизм Address Windowing Extensions
Глава 16. Стек потока
Функция из библиотеки С/С++ для контроля стека
Программа-пример Summation
Глава 17. Проецируемые в память файлы
Проецирование в память EXE- и DLL-файлов
Файлы данных, проецируемые в память
Использование проецируемых в память файлов
Обработка больших файлов
Проецируемые файлы и когерентность
Базовый адрес файла, проецируемого в память
Особенности проецирования файлов
Совместный доступ процессов к данным через механизм проецирования
Файлы, проецируемые на физическую память из страничного файла
Частичная передача физической памяти проецируемым файлам
Глава 18. Динамически распределяемая память
Стандартная куча процесса
Дополнительные кучи в процессе
Создание дополнительной кучи
Другие функции управления кучами
Часть IV. Динамически подключаемые библиотеки
Глава 19. DLL: основы
DLL и адресное пространство процесса
Общая картина
Глава 20. DLL: более сложные методы программирования
Явная загрузка DLL и связывание идентификаторов
Функция входа/выхода
Отложенная загрузка DLL
Переадресация вызовов функций
Известные DLL
Перенаправление DLL
Модификация базовых адресов модулей
Связывание модулей
Глава 21. Локальная память потока
Динамическая локальная память потока
Статическая локальная память потока
Глава 22. Внедрение DLL и перехват API-вызовов
Пример внедрения DLL
Внедрение DI L с использованием реестра
Внедрение DLL с помощью ловушек
Внедрение DLL с помощью удаленных потоков
Внедрение троянской DLL
Внедрение DLL как отладчика
Внедрение кода через функцию CreateProcess
Перехват API- вызовов: пример
Часть V. Структурная обработка исключений
Глава 23. Обработчики завершения
Примеры использования обработчиков завершения
Глава 24. Фильтры и обработчики исключений
Примеры использования фильтров и обработчиков исключений
EXCEPTION_EXECUTE_HANDLER
EXCEPTION_CONTINUE_EXECUTION
EXCEPTION_CONTINUE_SEARCH
Глава 25. Необработанные исключения, векторная обработка исключений и исключения C++
Как работает функция UnhandkdExceptionFiker
Отладка по запросу
Программа-пример Spreadsheet
Векторная обработка исключений и обработчики возобновления
Исключения С++ и структурные исключения
Исключения и отладчик
Глава 26. Отчеты об ошибках и восстановление приложений
Консоль Windows Error Reporting
Программная генерация отчетов об ошибках в Windows
Автоматический перезапуск и восстановление приложений
Часть VI. Приложения
Приложение А. Среда разработки
Заголовочный файл CmnHdr. h
Приложение Б. Распаковщики сообщений, макросы для дочерних элементов управления и API-макросы
Макросы - распаковщики сообщений
Макросы для дочерних элементов управления
API-макросы
Об авторе