Введение


Часть I. Ключевые технологии Windows 2000


Глава 1. Обзор Windows DNA
История Windows и Windows NT
Windows DNA в деталях
Решение
Архитектура Windows DNA
Вездесущая СОМ
Уровень представления
Уровень брандмауэра
Уровень практической логики
Уровень данных
Резюме

Глава 2. Виртуальная память и управление памятью
Использование виртуальной памяти
Критерии использования виртуальной памяти
Резервирование области виртуальной памяти
Заполнение страницы виртуальной памяти
Блокирование страницы виртуальной памяти
Освобождение страницы виртуальной памяти
Выделение памяти для других процессов
Пример использования виртуальной памяти
Применение функций работы с кучей Windows 2000
Управление кучей в Windows 2000
Использование частных куч в классах C++
Резюме

Глава 3. Потоки и процессы
Процессы и потоки
Управление процессами
Использование функции CreateProcess
Завершение процесса
Управление потоками
Создание потоков
Завершение потока
Выбор и изменение приоритета потока
Локальная память потоков
Определение идентификатора потока
Родственность потоку
Взаимодействие потоков
Когда следует создавать потоки
Когда не стоит создавать потоки
Синхронизация
Использование взаимно блокированных операций Win32
Критические участки
Управление событиями
Взаимные исключения
Семафоры
Семафоры и функции ожидания
Применение семафоров
Создание семафоров
Возвращение управляемых семафором ресурсов
Применение семафоров и критических участков в приложениях
Применение объектов заданий
Управление атрибутами объекта заданий
Пример объекта заданий
Резюме

Глава 4. Файлы
Использование файловых систем Windows 2000
Выполнение общих файловых операций
Сбор информации тома
Флаги файловой системы
Пример
Открытие, закрытие и удаление файлов
Запись в файлы
Считывание файлов
Поиск файлов
Использование функций FindFirstFile, FindNextFile и FindClose
Новая разработка: функция FindFirstFileEx
Использование структуры FILETIME
Выполнение других операций с файлами
Применение функции CopyFile
Применение функции MoveFile
Применение функции SetFilePointer
Применение функции GetFileSize
Использование асинхронного ввода и вывода
Использование перекрывающихся ввода и вывода
Использование процедур завершения файла
Пример использования процедур завершения
Преимущества зашифрованной файловой системы
Использование файловых функций уведомления
Резюме

Глава 5. Структурированная обработка исключительных ситуаций
Основы обработки исключительных ситуаций
Как организуется SEH
Использование обработчиков завершения
Использование _leave для выхода из блока _try
Использование нормального и аварийного завершения
Использование обработчиков исключительных ситуаций
Использование фильтров исключительных ситуаций
Обработка исключительных ситуаций в C++
Использование исключительных ситуаций для обнаружения ошибок
Использование исключительных ситуаций для завершения программы после обнаружения ошибок
Использование библиотеки стандартных исключительных ситуаций
Использование рабочих исключительных ситуаций
Использование логических исключительных ситуаций
Обнаружение ошибок при конструировании
Интегрирование Win32 SEH и обработки исключительных ситуаций в C++
Резюме

Глава 6. Библиотеки динамической компоновки
Библиотеки
Библиотеки статической компоновки
Библиотеки динамической компоновки
Преимущества использования DLL
Недостатки использования DLL
Создание и использование DLL
Инициализация DLL
Экспорт и импорт функций и данных DLL
Загрузка DLL при загрузке приложения
Загрузка DLL во время выполнения приложения
Управление версиями в DLL
Создание общей памяти для DLL
Пример простой DLL
Использование языка C++ и DLL-библиотек
Использование MFC и DLL
Использование обобщенных специальных вызовов
Обобщенная архитектура механизма специальных вызовов
Обобщенные функции специальных вызовов
Пример обобщенного специального вызова
Отладка обобщенного вызова
Резюме

Глава 7. Распределенная безопасность
Безопасность в Windows 2000
Базовые структуры безопасности
Лексемы процесса и потока
Идентификатор безопасности
Структуры АСЕ, DACL и SACL
Определение размера ACL
Добавление разрешающей доступ записи АСЕ к списку DACL
Дескрипторы безопасности
Извлечение дескриптора безопасности
Использование структуры SECURITY_ATTRIBUTES
Основанное на передаче доверия управление доступом
Использование структуры TRUSTEE
Структура ACTRL_ACCESS_ENTRY
Структура ACTRL_ACCESS_ENTRY_LIST
Структура ACTRL_PROPERTY_ENTRY
Структура ACTRL_ACCESS
Имперсонализация клиента
Резюме

Глава 8. Отладка программ Windows 2000
Принципы отладки в Windows
Расширение возможностей отладки программного кода
Поддержка отладки для Windows 2000
Поддержка отладки в MFC
Средства отладки Windows 2000
Информация символической отладки
Средства отладки Microsoft
Средства отладки независимых разработчиков
Использование интегрированного отладчика Visual C++
Основы работы с отладчиком Visual C++
Окна отладчика
Работа с отладчиком Visual C++
Использование отладчика WINDBG
Использование отладчика SoftIce
Использование утилиты Dr.Watson
Использование отладчика BugTrapper
Независимые разработчики отладчиков
Compuware NuMega Lab
Mutek Solutions Ltd.
Rational
Резюме

Глава 9. Разработка служб Windows 2000
Службы
Взаимодействие со службами Windows 2000
Службы Windows 2000 и безопасность системы
Программирование служб Windows 2000
Передача диспетчеру SCM данных о состоянии службы
Жизненный цикл службы Windows 2000
Прекращение службы Windows 2000
Запись данных в протокол событий Windows 2000
Пример службы Windows 2000
FileSpy: пример службы Windows 2000
Резюме

Глава 10. Управление службами Windows 2000
Создание программ управления службами
Регистрация службы с помощью SCM
Удаление службы
Автоматический повторный запуск отказавших служб
Создание утилит панели управления
Интерфейс утилиты панели управления
CtlFileSpy - утилита для службы FileSpy
Резюме


Часть II. Взаимодействие пользователя с системой


Глава 11. Расширенное программирование интерфейса графических устройств
Основы GDI
Контексты устройств
Режимы отображения GDI
Объекты GDI и их использование
Растровые изображения
Сравнение DDB и DIB
16-цветные растровые изображения DIB
256-цветные растровые изображения DIB
Пример растрового изображения DIB
Класс CDIBitmap
Класс CBmpPalette
Изменения класса CDibDoc
Изменения класса главного кадра
Изменения класса CDibView
Пути
Метафайлы
Пример метафайла
Изменения в объявлении класса CMetaView
Изменения в деструкторе класса CMetaFile
Изменения функции CMetaView::OnInitialUpdate
Щелчки левой кнопкой мыши
Изменения в функции CMetaView::OnDraw
Резюме

Глава 12. Способы рисования элементов управления
Использование элементов управления, создаваемых родительским элементом
Реализация элемента управления, создаваемого родительским элементом
Обработка сообщения WM_DRAWITEM
Обработка сообщения WM_MEASUREITEM
Обработка сообщения WM_COMPAREITEM
Обработка сообщения WM_DELETEITEM
Пример использования способа Owner Draw
Создание структуры Clistltem
Обработка сообщений
Добавление элементов в список
Обработка сообщения WM_MEASUREITEM
Обработка сообщения WM_DRAWITEM
Обработка сообщения WM_DELETEITEM
Использование способа Custom Draw
Структуры данных, используемые Custom Draw
Пример использования способа Custom Draw
Резюме


Часть III. СОМ и ActiveX


Глава 13. Концепции СОМ и OLE
Краткий обзор СОМ и OLE
Изучение технологий СОМ и OLE общего назначения
Составные документы
Визуальное редактирование
Автоматизация
Передача данных посредством OLE
Перетаскивание
Интеграция с другими приложениями
Программирование с применением СОМ и OLE
Применение СОМ-интерфейсов
Идентификация интерфейсов и объектов модели СОМ
Обработка глобальных уникальных идентификаторов
Учет версий
Применение интерфейса IUnknown
Создание объекта
Пример СОМ-компонента
Применение механизма расширения оболочки
Расширения контекстного меню
Пример проекта
Резюме

Глава 14. Автоматизация
Создание программируемых приложений с применением Automation
Интерфейс IDispatch
Типы данных, используемых интерфейсом IDispatch
Функции, включенные в интерфейс IDispatch
Интерфейсы IDispatch в сравнении с таблицами функций
Создание сервера Automation с помощью MFC
Модификация параметров Automation
Модификации класса Document
Создание диалогового окна для проекта AutoBub
Рисование объектов-пузырьков в проекте AutoBub
Включение поддержки Automation в проект AutoBub
Использование языка Visual Basic для создания контроллера Automation
Применение Automation в языке VBScript
Резюме

Глава 15. Технология перетаскивания
Буфер обмена OLE
Применение структур FORMATETC и STGMEDIUM
Обработка структур FORMATETC
Применение структуры DVTARGETDEVICE
Применение структуры STGMEDIUM
Применение технологии перетаскивания
Источник операции OLE перетаскивания
Приемник операции "перетащи и отпусти"
Пример реализации операции "перетащи и отпусти"
Резюме

Глава 16. СОМ-модели формирования потоков
Альтернативы СОМ-потокам
Внутренний СОМ-сервер до введения отделов
Внешний сервер до введения отделов
Управление распределением памяти между процессами
Приментение СОМ совместно с отделами
Выбор между STA и МТА
Выбор отдела для каждого потока
Как выбрать наиболее подходящий для потока отдел
Выбор отдела для каждого СОМ-объекта
Несовместимые отделы клиентов и СОМ-объектов
Упорядоченное перемещение между отделами СОМ
Некорректный метод распределения указателей интерфейса
Корректный метод распределения указателей интерфейса
Резюме

Глава 17. Пользовательские СОМ-объекты
Применение IDL
Атрибуты MIDL
Компиляция исходного файла MIDL
Применение библиотек типов
Применение структур в IDL
Применение перечислений в IDL
Указатели и IDL
Применение атрибутов направления в IDL
Создание пользовательских компонентов с помощью ATL
Часто используемые ATL-классы
Применение ATL-карты СОМ-интерфейсов
Применение утилит-мастеров ATL
Слияние кода объектов прокси/заглушка с DLL
Пример пользовательского СОМ-объекта
Применение объектов moniker
Примеры системных объектов moniker
Создание экземпляров объекта moniker
Перевод объектов moniker в текстовые строки
Создание объекта moniker по имени отображения
Точки подключения
Пользовательское упорядоченное перемещение
Пользовательское упорядоченное перемещение
Упорядоченное перемещение по значению
Реализация пользовательского объекта прокси
Реализация интерфейса IMarshal на сервере
Сравнение быстродействия пользовательского и стандартного объектов прокси
Резюме

Глава 18. Разработка элементов управления ActiveX
Что такое элемент управления ActiveX
Интерфейсы элементов управления ActiveX
Свойства, события и методы элементов управления ActiveX
Свойства
События
Методы
Пример элемента управления ActiveX
Создание проекта
Визуализация элемента управления
Определение свойств AxEdit
Обработка ввода символов
Модификация растрового изображения элемента управления
Тестирование элемента управления ActiveX
Выбор тестового контейнера для элемента управления
Применение тестового контейнера TSTCON32
Тестирование свойств
Создание элементов управления ActiveX с помощью ATL
Реализация базовых свойств с применением ATL
Реализация пользовательских свойств с помощью ATL
Применение свойств окружения с ATL
Реализация событий в ATL-проекте
Добавление обработчиков сообщений и событий
Элемент управления ActiveX, построенный с помощью ATL
Базовая модель элемента управления PopButton
Создание проекта PopBtn
Тестирование элемента управления PopButton средствами Visual Basic
Резюме

Глава 19. Асинхронная модель СОМ
Синхронные и асинхронные методы СОМ
Поддержка асинхронных методов в Windows 2000
Поддержка асинхронного взаимодействия в IDL
Другие новые асинхронные компоненты Windows 2000
Вызовы методов по принципу "запустить и забыть"
Пример асинхронной модели СОМ
Интерфейс IShop
Проект AsyncTest
Синхронный тестовый клиент
Вторая версия интерфейса IShop
Асинхронный тестовый клиент
Резюме

Глава 20. DCOM
Прозрачность местонахождения
Создание экземпляра удаленного объекта
Применение интерфейса IMuttiQl
Определение действительности внешней ссылки
Защита в DCOM
Типы защиты
Понятие защиты вызова
Понятия подмены и маскировки
Установка уровней защиты для компьютера
Установка атрибутов защиты для процесса
Оболочки защиты
Установка атрибутов защиты со стороны клиента для интерфейса
Управление защитой на стороне сервера
Применение утилиты конфигурирования DCOM
Использование DCOM Config для установки системных атрибутов
Использование DCOM Config для установки атрибутов определенного AppID
Резюме


Часть IV. Технология СОМ+


Глава 21. Службы СОМ+
Транзакции
ACID: четыре принципа обработки транзакций
Типы транзакций
Двухэтапная фиксация
Транзакции в СОМ+
Приложение СОМ+
Построение компонентов транзакций СОМ+
Построение СОМ-объекта с помощью средств Visual Basic
Что было показано?
Добавление компонентов к приложению СОМ+
Резюме

Глава 22. Построение компонентов для служб СОМ+
Правильно построенный компонент Component Service
Время жизни и отсутствие состояния
Не обладающие состоянием объекты
Активность
Создание компонентов транзакций
Создание общего компонента транзакций
Создание СОМ-объекта транзакций с помощью средств Visual C++
Создание транзакционного объекта СОМ+ с помощью средств Visual Basic
Поддержка СОМ-компилятора
TLH и TLI: изучение вывода
Атрибуты команд СОМ-компилятора
Генерирование и перехват ошибок с помощью объекта com_error
Операции с любыми данными: _variant_t
Операции с типом данных BSTR: _bstr_t
Операции с несколькими объектами СОМ+
Время жизни транзакции для комбинированных объектов СОМ+
Результаты транзакций, связанных с несколькими СОМ-объектами
Обработка ошибок
Передача параметров и интерфейсов
Резюме

Глава 23. Совместное применение СОМ+и IIS
Основы Web-приложений
Обзор ASP
Пример быстрого сценария
ASP-приложения
Встроенные ASР-объекты
Построение Web-приложения
Web-активности
Реализация активностей
Обработка форм HTML
Управление cookies
Создание cookies
Коллекция ServerVariables
Обработка ASР-ошибок
Описание глобального ключа
Организация порядка следования активностей
Упрощение процесса переадресации с помощью JavaScript
Простой способ управления объектами
Работа с двоичными данными
Написание динамического кода
Динамическое изменение размера содержимого
Проверка достоверности данных
Загрузка файлов
Отправка электронной почты
Возможности Web-браузера
Разработка компонентов
Простой ASP-компонент
Более сложный ASP-компонент
Транзакционные страницы ASP
Резюме

Глава 24. Использование резидентных баз данных СОМ+
Резидентные базы данных
Архитектура IMDB
Простой пример
Установка IMDB
Установка источника данных IMDB
Ссылки на таблицы ресурсов
Дополнительные сведения о резидентных базах данных
Что поддерживается на уровне OLE DB
Особенности провайдера и пользовательские шаблоны OLE DB
Особенности использования ADO
Резюме

Глава 25. Расширенные службы СОМ+
Усовершенствование процесса масштабируемости за счет объединения объектов и выравнивания нагрузки
Реализация интерфейса IObjectControl
Динамическое выравнивание нагрузки
Расширенные возможности транзакции
Предотвращение взаимных блокировок
Интерфейсы IObjectConstruct
Особый случай управления транзакциями
Управление транзакциями со стороны клиента
Организация очередности компонентов
Компоненты с организацией очереди
Функционирование компонентов с организацией очереди
Создание компонентов с организацией очереди
Отправка обратных сообщений
Асинхронное распределение информации
Архитектура издатель/подписчик
Построение проекта, основанного на архитектуре издатель/подписчик
Резюме


Часть V. Распределенные службы Windows 2000


Глава 26. Каналы
Типы каналов
Использование анонимных каналов
Создание и закрытие анонимного канала
Чтение и запись в анонимные каналы
Взаимодействие с другим процессом с помощью анонимных каналов
Пример использования анонимных каналов
Использование именованных каналов
Типы именованных каналов
Создание и закрытие именованного канала
Подключение и использование именованного канала
Пример именованного канала
Резюме

Глава 27. Служба Active Directory
Обзор Active Directory
Организация пространства имен
Деревья и леса
Применение ADSI для управления службой Active Directory
Применение ADSI в языках Visual Basic и Visual C++
Строки связывания ADSI
Вспомогательные функции ADSI
IEnumVARIANT* pUserEnum = NULL;
Привязка без участия сервера и ADSI
Предоставляемые ADSI СОМ-интерфейсы
Дополнительные ресурсы!
Резюме

Глава 28. Применение MSMQ
Microsoft Message Queue Server
Сравнение MSMQ с именованными каналами
Установка MSMQ
Типы очередей сообщений
Общедоступные и закрытые очереди
Свойства объектов MSMQ
Свойства очереди
Свойства сообщений
Свойства компьютера
Распределение памяти
Применение очереди сообщений в Win32 API
Создание очереди сообщений
Открытие существующей очереди
Отправка сообщений через очереди
Прием сообщений из очереди
Закрытие ссылки очереди сообщений
Удаление очереди сообщений
Создание клиента очереди сообщений с помощью средств Visual Basic
Резюме

Глава 29. Архитектура Cluster Server
Архитектура Cluster Server
Аппаратные средства Cluster Server
Программные компоненты MSCS
Запуск и восстановление кластера
Применение интерфейса API кластеризации
Применение API управления объектами кластера
Интерфейсы API DLL ресурсов
Расширения API для администрирования кластера
Пример поддержки кластеризации
Проект ClusterQuote
Проект QuoteClient
Тип ресурсов кластера High Availability Quote
Применение утилиты Cluster Resource Type Wizard
Резюме
Содержимое CD-ROM