- •Создание эффективных win32-приложений
- •Глава 1. Обработка ошибок 8
- •Глава 2 Unicode 14
- •Глава 3 Объекты ядра 31
- •Часть II начинаем работать 51
- •Глава 4 Процессы 51
- •Глава 5 Задания 88
- •Глава 6 Базовые сведения о потоках 106
- •Глава 7 Планирование потоков, приоритет и привязка к процессорам 131
- •Глава 8 Синхронизация потоков в пользовательском режиме 159
- •Глава 9 Синхронизация потоков с использованием объектов ядра 181
- •Глава 10 Полезные средства для синхронизации потоков 211
- •Глава 14 Исследование виртуальной памяти 281
- •Глава 15 Использование виртуальной памяти в приложениях 292
- •Глава 16 Стек потока 309
- •Глава 17 Проецируемые в память файлы 318
- •Глава 18 Динамически распределяемая память 356
- •Часть IV динамически подключаемые библиотеки 370
- •Глава 19 dll: основы 370
- •Глава 20 dll: более сложные методы программирования 384
- •Глава 21 Локальная память потока 417
- •Глава 22 Внедрение dll и перехват api-вызовов 423
- •Часть V структурная обработка исключений 447
- •Глава 23 Обработчики завершения 447
- •Глава 24 Фильтры и обработчики исключений 463
- •Часть VI операции с окнами 510
- •Глава 2 Unicode
- •Глава 3 Объекты ядра
- •Часть II начинаем работать
- •Глава 4 Процессы
- •Глава 5 Задания
- •Глава 6 Базовые сведения о потоках
- •Глава 7 Планирование потоков, приоритет и привязка к процессорам
- •Глава 8 Синхронизация потоков в пользовательском режиме
- •Глава 9 Синхронизация потоков с использованием объектов ядра
- •Глава 10 Полезные средства для синхронизации потоков
- •Глава 11 Пулы потоков
- •Глава 12 Волокна
- •Часть III управление памятью
- •Глава 13 Архитектура памяти в Windows
- •Глава 14 Исследование виртуальной памяти
- •Глава 15 Использование виртуальной памяти в приложениях
- •Глава 16 Стек потока
- •Глава 17 Проецируемые в память файлы
- •Глава 18 Динамически распределяемая память
- •Часть IV динамически подключаемые библиотеки
- •Глава 19 dll: основы
- •Глава 20 dll: более сложные методы программирования
- •Глава 21 Локальная память потока
- •Глава 22 Внедрение dll и перехват api-вызовов
- •Часть V структурная обработка исключений
- •Глава 23 Обработчики завершения
- •Глава 24 Фильтры и обработчики исключений
- •Часть VI операции с окнами
- •Глава 26 Оконные сообщения
- •Глава 27 Модель аппаратного ввода и локальное состояние ввода
WINDOWS
Создание эффективных win32-приложений
Джеффри Рихтер
ЧАCTЬ I МАТЕРИАЛЫ ДЛЯ ОБЯЗАТЕЛЬНОГО ЧТЕНИЯ 8
Глава 1. Обработка ошибок 8
Вы тоже можете это сделать 12
Программа-пример ErrorShow 13
Глава 2 Unicode 14
Наборы символов 14
Одно- и двухбайтовые наборы символов 14
Unicode: набор широких символов 15
Почему Unicode? 16
Windows 2000 и Unicode 16
Windows 98 и Unicode 17
Windows CE и Unicode 18
В чью пользу счет? 18
Unicode и СОМ 18
Как писать программу с использованием Unicode 19
Unicode и библиотека С 19
Типы данных, определенные в Windows для Unicode 21
Unicode- и ANSI-функции в Windows 22
Строковые функции Windows 23
Создание программ, способных использовать и ANSI, и Unicode 23
Ресурсы 27
Текстовые файлы 27
Перекодировка строк из Unicode в ANSI и обратно 28
Глава 3 Объекты ядра 31
Что такое объект ядра 32
Учет пользователей объектов ядра 33
Защита 33
Таблица описателей объектов ядра 35
Создание объекта ядра 35
Закрытие объекта ядра 37
Совместное использование объектов ядра несколькими процессами 38
Наследование описателя объекта 38
Изменение флагов описателя 41
Именованные объекты 43
Дублирование описателей объектов 47
Часть II начинаем работать 51
Глава 4 Процессы 51
Ваше первое Windows-приложение 53
Описатель экземпляра процесса 56
Описатель предыдущего экземпляра процесса 57
Командная строка процесса 58
Переменные окружения 59
Привязка к процессорам 62
Режим обработки ошибок 62
Текущие диск и каталог для процесса 63
Текущие каталоги для процесса 63
Определение версии системы 64
Функция CreateProcess 68
Параметры pszApplicationName и pszCommandLine 68
Параметры psaProcess, psaThread и blnheritHandles 70
Параметр fdwCreate 71
Параметр pvEnvironment 73
Параметр pszCurDir 73
Параметр psiStartlnfo 73
Параметр ppiProclnfo 77
Завершение процесса 79
Возврат управления входной функцией первичного потока 79
Функция ExitProcess 79
Функция TerminateProcess 81
Когда все потоки процесса уходят 81
Что происходит при завершении процесса 82
Дочерние процессы 82
Запуск обособленных дочерних процессов 84
Перечисление процессов, выполняемых в системе 85
Программа-пример Processlnfo 85
Глава 5 Задания 88
Определение ограничений, налагаемых на процессы в задании 91
Включение процесса в задание 98
Завершение всех процессов в задании 98
Получение статистической информации о задании 99
Уведомления заданий 102
Программа-пример JobLab 104
Глава 6 Базовые сведения о потоках 106
В каких случаях потоки создаются 107
И в каких случаях потоки не создаются 108
Ваша первая функция потока 109
Функция CreateThread 110
Параметр psa 111
Параметр cbStack 111
Параметры pfnStartAddr и pvParam 112
Параметр fdwCreate 113
Параметр pdwThreadlD 113
Завершение потока 113
Возврат управления функцией потока 114
Функция ExitThread 114
Функция TerminateThread 114
Если завершается процесс 115
Что происходит при завершении потока 115
Кое-что о внутреннем устройстве потока 116
Некоторые соображения по библиотеке С/С++ 118
Ой, вместо _beginthreadex я по ошибке вызвал CreateThread 127
Библиотечные функции, которые лучше не вызывать 127
Как узнать о себе 128
Преобразование псевдоописателя в настоящий описатель 129