- •Создание эффективных 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 Модель аппаратного ввода и локальное состояние ввода
Глава 14 Исследование виртуальной памяти 281
Системная информация 281
Программа-пример Syslnfo 283
Статус виртуальной памяти 284
Программа-пример VMStat 285
Определение состояния адресного пространства 286
Функция VMQuery 288
Программа-пример VMMap 290
Глава 15 Использование виртуальной памяти в приложениях 292
Резервирование региона в адресном пространстве 292
Передача памяти зарезервированному региону 294
Резервирование региона с одновременной передачей физической памяти 295
В какой момент региону передают физическую память 295
Возврат физической памяти и освобождение региона 297
В какой момент физическую память возвращают системе 298
Программа-пример VMAIloc 299
Изменение атрибутов защиты 301
Сброс содержимого физической памяти 302
Программа-пример MemReset 303
Механизм Address Windowing Extensions (только Windows 2000) 304
Программа-пример AWE 308
Глава 16 Стек потока 309
Стек потока в Windows 98 313
Функция из библиотеки С/С++ для контроля стека 315
Программа-пример Summation 316
Глава 17 Проецируемые в память файлы 318
Проецирование в память EXE- и DLL-файлов 319
Статические данные не разделяются несколькими экземплярами EXE или DLL 320
Статические данные разделяются несколькими экземплярами EXE или DLL 322
Программа-пример Applnst 327
Файлы данных, проецируемые в память 328
Метод 1: один файл, один буфер 328
Метод 2: два файла, один буфер 329
Метод 3: один файл, два буфера 329
Метод 4: один файл и никаких буферов 330
Использование проецируемых в память файлов 330
Этап1: создание или открытие объекта ядра «файл» 330
Этап 2: создание объекта ядра «проекция файла» 331
Этап 3: проецирование файловых данных на адресное пространство процесса 335
Этап 4: отключение файла данных от адресного пространства процесса 337
Этапы 5 и 6: закрытие объектов «проекция файла» и «файл» 338
Программа-пример FileRev 339
Обработка больших файлов 341
Проецируемые файлы и когерентность 343
Базовый адрес файла, проецируемого в память 344
Особенности проецирования файлов на разных платформах 345
Совместный доступ процессов к данным через механизм проецирования 348
Файлы, проецируемые на физическую память из страничного файла 348
Программа-пример MMFShare 349
Частичная передача физической памяти проецируемым файлам 350
Программа-пример MMFSparse 352
Глава 18 Динамически распределяемая память 356
Стандартная куча процесса 356
Дополнительные кучи в процессе 357
Защита компонентов 357
Более эффективное управление памятью 358
Локальный доступ 359
Исключение издержек, связанных с синхронизацией потоков 359
Быстрое освобождение всей памяти в куче 360
Создание дополнительной кучи 360
Выделение блока памяти из кучи 361
Изменение размера блока 362
Определение размера блока 363
Освобождение блока 363
Уничтожение кучи 364
Использование куч в программах на С++ 364
Другие функции управления кучами 368
Часть IV динамически подключаемые библиотеки 370
Глава 19 dll: основы 370
DLL и адресное пространство процесса 371
Общая картина 373
Создание DLL-модуля 376
Что такое экспорт 377
Создание DLL для использования с другими средствами разработки (отличными от Visual C++) 379
Создание ЕХЕ-модуля 380
Что такое импорт 380
Выполнение ЕХЕ-модуля 382