Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Рихтер Дж., Назар К. - Windows via C C++. Программирование на языке Visual C++ - 2009

.pdf
Скачиваний:
6249
Добавлен:
13.08.2013
Размер:
31.38 Mб
Скачать

Оглавление

Благодарности...................................................................................................

XIII

Введение ...........................................................................................................................

XIV

Часть I Материалы для обязательного чтения .....................................................

1

Глава 1 Обработка ошибок...................................................................................................

2

Вы тоже можете это сделать ..................................................................................................

7

Программа-пример ErrorShow.. .............................................................................................. 8

Глава 2. Работа с символами и строками .......................................................................

11

Наборы символов ..................................................................................................................

12

Символьные и строковые типы данных для ANSI и Unicode..............................................

14

Unicode- и ANSI-функции в Windows ....................................................................................

16

Unicode- и ANSI-функции в библиотеке С............................................................................

19

Безопасные строковые функции в библиотеке С ................................................................

20

Введение в безопасные строковые функции.................................................................

21

Дополнительные возможности при работе со строками ..............................................

25

Строковые функции Windows... ......................................................................................

27

Почему Unicode?....................................................................................................................

29

Рекомендуемые приемы работы с символами и строками ................................................

30

Перекодировка строк из Unicode в ANSI и обратно ............................................................

31

Экспорт DLL-функций для работы с ANSI и Unicode ....................................................

33

Определяем формат текста (ANSI или Unicode)...........................................................

35

Глава 3. Объекты ядра .......................................................................................................

37

Что такое объект ядра ...........................................................................................................

37

Учет пользователей объектов ядра ...............................................................................

39

Защита..............................................................................................................................

39

Таблица описателей объектов ядра.....................................................................................

42

Создание объекта ядра...................................................................................................

43

Закрытие объекта ядра ...................................................................................................

45

Совместное использование объектов ядра несколькими процессами..............................

48

Наследование описателя объекта .................................................................................

49

Именованные объекты....................................................................................................

54

Дублирование описателей объектов .............................................................................

68

Часть II Приступаем к работе ...............................................................................

75

Глава 4. Процессы ...............................................................................................................

76

Ваше первое Windows-приложение......................................................................................

77

Описатель экземпляра процесса ...................................................................................

83

Описатель предыдущего экземпляра процесса............................................................

85

Командная строка процесса ...........................................................................................

86

Переменные окружения ..................................................................................................

87

Привязка к процессорам .................................................................................................

94

Режим обработки ошибок ...............................................................................................

94

Текущие диск и каталог для процесса ...........................................................................

95

VI

Оглавление

 

 

Определение версии системы........................................................................................

97

 

Функция CreateProcess........................................................................................................

101

 

Параметры pszApplicationName и pszCommandLine...................................................

102

 

Параметры psaProcess, psaThread и bInheritHandles .................................................

104

 

Параметр fdwCreate ......................................................................................................

106

 

Параметр pvEnvironment ...............................................................................................

108

 

Параметр pszCurDir.......................................................................................................

109

 

Параметр psiStartInfo.....................................................................................................

109

 

Параметр ppiProcInfo.....................................................................................................

117

 

Завершение процесса .........................................................................................................

119

 

Возврат управления входной функцией первичного потока ......................................

119

 

Функция ExitProcess ......................................................................................................

120

 

Функция TerminateProcess ............................................................................................

121

 

Когда все потоки процесса уходят ...............................................................................

122

 

Что происходит при завершении процесса .................................................................

122

 

Дочерние процессы .............................................................................................................

123

 

Запуск обособленных дочерних процессов.................................................................

125

 

Работа администратора с пользовательскими полномочиями ........................................

126

 

Автоматическое повышение привилегий процесса ....................................................

130

 

Повышение привилегий процесса вручную.................................................................

132

 

О текущем контексте привилегий .................................................................................

134

 

Перечисление процессов, выполняемых в системе ...................................................

136

 

Программа-пример ProcessInfo ....................................................................................

137

 

Глава 5. Задания ................................................................................................................

144

 

Определение ограничений, налагаемых на процессы в задании ....................................

149

 

Включение процесса в задание ..........................................................................................

157

 

Завершение всех процессов в задании .............................................................................

158

 

Получение статистической информации о задании ...................................................

158

 

Уведомления заданий .........................................................................................................

162

 

Программа-пример JobLab..................................................................................................

165

 

Глава 6. Базовые сведения о потоках ...........................................................................

167

 

В каких случаях потоки создаются .....................................................................................

168

 

И в каких случаях потоки не создаются .............................................................................

170

 

Ваша первая функция потока .............................................................................................

171

 

Функция CreateThread..........................................................................................................

172

 

Параметр psa.................................................................................................................

173

 

Параметр cbStackSize ...................................................................................................

173

 

Параметры pfnStartAddr и pvParam..............................................................................

174

 

Параметр dwCreateFlags...............................................................................................

175

 

Параметр pdwThreadID .................................................................................................

175

 

Завершение потока..............................................................................................................

176

 

Возврат управления функцией потока.........................................................................

176

 

Функция ExitThread. .......................................................................................................

176

 

Функция TerminateThread..............................................................................................

177

 

Если завершается процесс...........................................................................................

177

 

Что происходит при завершении потока......................................................................

178

 

Кое-что о внутреннем устройстве потока...........................................................................

179

 

Некоторые соображения по библиотеке С/С++.................................................................

181

 

Ой, вместо beginthreadex я по ошибке вызвал CreateThread .....................................

192

 

Библиотечные функции, которые лучше не вызывать ...............................................

192

 

Как узнать о себе .................................................................................................................

193

 

Преобразование псевдоописателя в настоящий описатель ......................................

194

Оглавление

VII

Глава 7. Планирование потоков, приоритет

 

и привязка к процессорам................................................................................................

197

Приостановка и возобновление потоков............................................................................

199

Приостановка и возобновление процессов .......................................................................

200

Функция Sleep ......................................................................................................................

202

Переключение потоков ........................................................................................................

202

Переключение потоков на компьютерах с процессором,

 

поддерживающим HyperThreading ...............................................................................

203

Определение периодов выполнения потока......................................................................

204

Структура CONTEXT............................................................................................................

208

Приоритеты потоков ............................................................................................................

213

Абстрагирование приоритетов............................................................................................

214

Программирование приоритетов ........................................................................................

219

Динамическое изменение уровня приоритета потока.................................................

222

Подстройка планировщика для активного процесса ..................................................

223

Приоритеты запросов ввода-вывода ...........................................................................

224

Программа-пример Scheduling Lab ..............................................................................

226

Привязка потоков к процессорам........................................................................................

233

Глава 8. Синхронизация потоков в пользовательском режиме ...............................

238

Атомарный доступ: семейство Interlocked-функций ..........................................................

239

Кэш-линии.............................................................................................................................

246

Более сложные методы синхронизации потоков...............................................................

248

Худшее, что можно сделать..........................................................................................

249

Критические секции .............................................................................................................

250

Критические секции: важное дополнение....................................................................

253

Критические секции и спин-блокировка .......................................................................

256

Критические секции и обработка ошибок ....................................................................

257

«Тонкая» блокировка ...........................................................................................................

259

Условные переменные ........................................................................................................

263

Приложение-пример Queue ..........................................................................................

264

Несколько полезных приемов.......................................................................................

277

Глава 9. Синхронизация потоков с использованием объектов ядра ......................

280

Wait-функции........................................................................................................................

282

Побочные эффекты успешного ожидания .........................................................................

286

События................................................................................................................................

288

Программа-пример Handshake .....................................................................................

293

Ожидаемые таймеры...........................................................................................................

298

Ожидаемые таймеры и АРС-очередь ..........................................................................

302

И еще кое-что о таймерах.............................................................................................

305

Семафоры ............................................................................................................................

306

Мьютексы .............................................................................................................................

308

Мьютексы и критические секции...................................................................................

311

Программа-пример Queue ............................................................................................

312

Сводная таблица объектов, используемых для синхронизации потоков ........................

321

Другие функции, применяемые в синхронизации потоков................................................

323

Асинхронный ввод-вывод на устройствах ...................................................................

323

Функция WaitForInputIdle.. ............................................................................................. 323

Функция MsgWaitForMultipleObjects(Ex) .......................................................................

325

Функция WaitForDebugEvent .........................................................................................

325

функция SignalObjectAndWait .......................................................................................

326

Обнаружение взаимных блокировок с помощью WaitChain Traversal API ................

327

VIII

Оглавление

 

 

Глава 10. Синхронный и асинхронный ввод-вывод на устройствах.......................

336

 

Открытие и закрытие устройств..........................................................................................

337

 

Близкое знакомство с функцией CreateFile........................................................................

340

 

Флаги функции CreateFile, управляющие кэшированием...........................................

343

 

Другие флаги функции CreateFile.................................................................................

345

 

Флаги файловых атрибутов ..........................................................................................

347

 

Работа с файлами ...............................................................................................................

348

 

Определение размера файла ......................................................................................

349

 

Установка указателя в файле.......................................................................................

350

 

Установка конца файла.................................................................................................

352

 

Синхронный ввод-вывод на устройствах ...........................................................................

353

 

Сброс данных на устройство ........................................................................................

354

 

Отмена синхронного ввода-вывода .............................................................................

354

 

Асинхронный ввод-вывод на устройствах: основы ...........................................................

356

 

Структура OVERLAPPED ..............................................................................................

357

 

Асинхронный ввод-вывод на устройствах: «подводные камни»................................

359

 

Отмена запросов ввода-вывода, ожидающих в очереди ...........................................

361

 

Уведомление о завершении ввода-вывода .......................................................................

362

 

Освобождение объекта ядра «устройство».................................................................

363

 

Освобождение объекта ядра «событие» .....................................................................

365

 

Ввод-вывод с оповещением .........................................................................................

368

 

Порты завершения ввода-вывода................................................................................

375

 

Создание портов завершения ввода-вывода ..............................................................

376

 

Связывание устройства с портом завершения ввода-вывода...................................

377

 

Архитектура программ, использующих порты завершения ввода-вывода ...............

380

 

Как порт завершения ввода-вывода управляет пулом потоков .................................

383

 

Сколько потоков должно быть в пуле? ........................................................................

385

 

Эмуляция выполненных запросов ввода-вывода .......................................................

387

 

Программа-пример FileCopy .........................................................................................

388

 

Глава 11. Пулы потоков....................................................................................................

397

 

Сценарий 1. Асинхронный вызов функций ........................................................................

398

 

Явное управление рабочими элементами...................................................................

399

 

Программа-пример Batch..............................................................................................

401

 

Сценарий 2. Вызов функций через определенные интервалы времени .........................

405

 

Программа-пример TimedMsgBox ................................................................................

407

 

Сценарий 3. Вызов функций при освобождении отдельных объектов ядра ...................

411

 

Сценарий 4. Вызов функций по завершении запросов

 

 

асинхронного ввода-вывода ...............................................................................................

414

 

Обработка завершения обратного вызова ..................................................................

415

 

Настройка пула потоков ................................................................................................

417

 

Корректное разрушение пула потоков и группы очистки............................................

419

 

Глава 12. Волокна ..............................................................................................................

422

 

Работа с волокнами.............................................................................................................

423

 

Программа-пример Counter.................................................................................................

426

Часть III Управление памятью ..........................................................................

431

 

Глава 13. Архитектура памяти в Windows .....................................................................

432

 

Виртуальное адресное пространство процесса ................................................................

432

 

Как адресное пространство разбивается на разделы ......................................................

433

 

Раздел для выявления нулевых указателей ...............................................................

434

 

Раздел для кода л данных пользовательского режима..............................................

434

Оглавление

IX

Раздел для кода и данных режима ядра .....................................................................

437

Регионы в адресном пространстве ..............................................................................

437

Передача региону физической памяти ........................................................................

438

Физическая память в страничный файл.............................................................................

440

Физическая память в страничном файле не хранится ...............................................

442

Атрибуты защиты.................................................................................................................

443

Защита типа «копирование при записи........................................................................

435

Специальные флаги атрибутов защиты ......................................................................

446

Подводя итоги ......................................................................................................................

446

Блоки внутри регионов ..................................................................................................

452

Выравнивание данных.........................................................................................................

455

Глава 14. Исследование виртуальной памяти .............................................................

460

Системная информация ......................................................................................................

460

Статус виртуальной памяти ................................................................................................

470

Управление памятью на компьютерах с архитектурой NUMA..........................................

471

Определение состояния адресного пространства ............................................................

475

Глава 15. Использование виртуальной памяти в приложениях ...............................

487

Резервирование региона в адресном пространстве .........................................................

487

Передача памяти зарезервированному региону ...............................................................

490

Резервирование региона с одновременной передачей физической памяти............

491

В какой момент региону передают физическую память .............................................

492

Возврат физической памяти и освобождение региона. ....................................................

495

В какой момент физическую память возвращают системе ........................................

496

Изменение атрибутов защиты ......................................................................................

505

Сброс содержимого физической памяти .....................................................................

506

Механизм Address Windowing Extensions...........................................................................

510

Глава 16. Стек потока ........................................................................................................

523

Функция из библиотеки С/С++ для контроля стека ...........................................................

528

Программа-пример Summation ...........................................................................................

530

Глава 17. Проецируемые в память файлы ...................................................................

536

Проецирование в память EXE- и DLL-файлов...................................................................

537

Статические данные не разделяются несколькими

 

экземплярами EXE или DLL..........................................................................................

538

Файлы данных, проецируемые в память ...........................................................................

550

Использование проецируемых в память файлов..............................................................

551

Обработка больших файлов ...............................................................................................

570

Проецируемые файлы и когерентность .............................................................................

572

Базовый адрес файла, проецируемого в память ..............................................................

573

Особенности проецирования файлов ................................................................................

575

Совместный доступ процессов к данным через механизм проецирования ....................

576

Файлы, проецируемые на физическую память из страничного файла ...........................

577

Частичная передача физической памяти проецируемым файлам ..................................

583

Глава 18. Динамически распределяемая память .........................................................

598

Стандартная куча процесса ................................................................................................

599

Дополнительные кучи в процессе.......................................................................................

600

Защита компонентов .....................................................................................................

600

Более эффективное управление памятью ..................................................................

601

Локальный доступ..........................................................................................................

602

Исключение издержек связанных с синхронизацией потоков....................................

602

X

Оглавление

 

 

Быстрое освобождение всей памяти в куче ................................................................

602

 

Создание дополнительной кучи..........................................................................................

603

 

Выделение блока памяти из кучи.................................................................................

605

 

Изменение размера блока ............................................................................................

607

 

Определение размера блока........................................................................................

608

 

Освобождение блока.....................................................................................................

608

 

Уничтожение кучи ..........................................................................................................

608

 

Использование куч в программах на С++ ....................................................................

608

 

Другие функции управления кучами...................................................................................

612

Часть IV

Динамически подключаемые библиотеки .......................................

615

 

Глава 19. DLL: основы ......................................................................................................

616

 

DLL и адресное пространство процесса ............................................................................

617

 

Общая картина.....................................................................................................................

619

 

Создание DLL-модуля ...................................................................................................

622

 

Создание EXE-модуля ..................................................................................................

628

 

Выполнение EXE-модуля..............................................................................................

632

 

Глава 20. DLL: более сложные методы программирования......................................

634

 

Явная загрузка DLL и связывание идентификаторов........................................................

634

 

Явная загрузка DLL .......................................................................................................

635

 

Явная выгрузка DLL.......................................................................................................

639

 

Явное подключение экспортируемого идентификатора.............................................

642

 

Функция входа/выхода.........................................................................................................

643

 

Уведомление DLL_PROCESS_ATTACH ......................................................................

644

 

Уведомление DLL_PROCESS_DETACH ......................................................................

646

 

Уведомление DLL_THREAD_ATTACH .........................................................................

648

 

Уведомление DLL_THREAD_DETACH.........................................................................

649

 

Как система упорядочивает вызовы DllMain................................................................

650

 

Функция DllMain и библиотека С/С++...........................................................................

653

 

Отложенная загрузка DLL ...................................................................................................

654

 

Программа-пример DelayLoadApp................................................................................

659

 

Переадресация вызовов функций ......................................................................................

666

 

Известные DLL .....................................................................................................................

667

 

Перенаправление DLL.........................................................................................................

669

 

Модификация базовых адресов модулей ..........................................................................

670

 

Связывание модулей...........................................................................................................

677

 

Глава 21. Локальная память потока ...............................................................................

681

 

Динамическая локальная память потока ...........................................................................

682

 

Использование динамической TLS ..............................................................................

684

 

Статическая локальная память потока ..............................................................................

687

 

Глава 22. Внедрение DLL и перехват API-вызовов .....................................................

689

 

Пример внедрения DLL .......................................................................................................

690

 

Внедрение DI L с использованием реестра .......................................................................

692

 

Внедрение DLL с помощью ловушек..................................................................................

694

 

Утилита для сохранения позиций элементов на рабочем столе ...............................

695

 

Внедрение DLL с помощью удаленных потоков..... ...........................................................

707

 

Программа-пример injLib...............................................................................................

711

 

Библиотека ImgWalk.dll .................................................................................................

718

 

Внедрение троянской DLL...................................................................................................

720

 

Внедрение DLL как отладчика ............................................................................................

720

Оглавление

XI

Внедрение кода через функцию CreateProcess.................................................................

721

Перехват APIвызовов: пример..........................................................................................

722

Перехват API-вызовов подменой кода.........................................................................

723

Перехват API-вызовов с использованием раздела импорта......................................

723

Программа-пример LastMsgBoxInfo .............................................................................

728

Часть V Структурная обработка исключений ..................................................

747

Глава 23. Обработчики завершения ...............................................................................

748

Примеры использования обработчиков завершения........................................................

749

Funcenstein1...................................................................................................................

750

Funcenstein2...................................................................................................................

750

Funcenstein3...................................................................................................................

752

Funcfurter1 ......................................................................................................................

753

Проверьте себя: FuncaDoodleDoo................................................................................

754

Funcenstein4...................................................................................................................

756

Funcarama1 ....................................................................................................................

757

Funcarama2 ....................................................................................................................

758

Funcarama3 ....................................................................................................................

758

Funcarama4: последний рубеж .....................................................................................

759

И еще о блоке finally ......................................................................................................

761

Funcfurter2 ......................................................................................................................

762

Программа-пример SEHTerm .......................................................................................

763

Глава 24. Фильтры и обработчики исключений ..........................................................

769

Примеры использования фильтров и обработчиков исключений....................................

770

Funcmeister1...................................................................................................................

770

Funcmeister2...................................................................................................................

771

EXCEPTION_EXECUTE_HANDLER ....................................................................................

773

Некоторые полезные примеры .....................................................................................

774

Глобальная раскрутка ...................................................................................................

777

Остановка глобальной раскрутки .................................................................................

780

EXCEPTION_CONTINUE_EXECUTION ..............................................................................

782

Будьте осторожны с EXCEPTION_CONTmUE_EXECUTION ......................................

783

EXCEPTION_CONTINUE_SEARCH ....................................................................................

784

Функция GetExceptionCode ...........................................................................................

786

Функция GetExceptionInformation ..................................................................................

791

Программные исключения ............................................................................................

795

Глава 25. Необработанные исключения, векторная обработка

 

исключений и исключения C++ .......................................................................................

799

Как работает функция UnhandkdExceptionFiker.................................................................

802

Взаимодействие UnhandledExceptionFilter с WER ......................................................

805

Отладка по запросу .............................................................................................................

808

Программа-пример Spreadsheet .........................................................................................

811

Векторная обработка исключений и обработчики возобновления...................................

823

Исключения С++ и структурные исключения.. ...................................................................

825

Исключения и отладчик .......................................................................................................

827

Глава 26. Отчеты об ошибках и восстановление приложений..................................

831

Консоль Windows Error Reporting ........................................................................................

831

Программная генерация отчетов об ошибках в Windows .................................................

834

Отключение генерации и отправки отчетов.................................................................

836

Настройка генерируемых для процесса отчетов о сбоях...........................................

837

XII

Оглавление

 

 

Создание и настройка отчетов о сбоях........................................................................

838

 

Программа-пример Customized WER...........................................................................

847

 

Автоматический перезапуск и восстановление приложений............................................

855

 

Автоматический перезапуск приложения ....................................................................

855

 

Поддержка восстановления приложений ....................................................................

856

Часть VI Приложения .........................................................................................

859

 

Приложение А. Среда разработки...................................................................................

860

 

Заголовочный файл CmnHdr.h............................................................................................

860

 

Раздел Windows Version Build Option ...........................................................................

861

 

Раздел Unicode Build Option..........................................................................................

861

 

Раздел Windows Definitions и диагностика уровня 4 ...................................................

862

 

Вспомогательный макрос Pragma Message.................................................................

862

 

Макрос chINRANGE .......................................................................................................

863

 

Макрос chBEGINTfeREADEX ........................................................................................

863

 

Моя реализация DebugBreak для платформы x86 .....................................................

865

 

Определение кодов программных исключений...........................................................

865

 

Макрос chMB ..................................................................................................................

865

 

Макросы chASSERT и chVERIFY..................................................................................

865

 

МакросchHANDLE_DLGMSG ........................................................................................

866

 

Макрос chSETDLGICONS..............................................................................................

866

 

Принудительное указание компоновщику входной функции (w)WinMain..................

866

 

Поддержка тем оформления Windows XP с помощью директивы pragma................

867

 

Приложение Б. Распаковщики сообщений, макросы

 

 

для дочерних элементов управления и API-макросы ................................................

873

 

Макросы — распаковщики сообщений...............................................................................

874

 

Макросы для дочерних элементов управления.................................................................

876

 

API-макросы .........................................................................................................................

877

 

Об авторе ............................................................................................................................

878

Благодарности

Мы бы не смогли написать эту книгу без поддержки и технической помощи многих людей. Вот кого мы хотим поблагодарить особо.

Джеффри благодарит жену Кристин и сына Эйдана за безграничную любовь и поддержку.

Кристоф никогда бы не осилил пятое издание этой книги без любви и содействия своей жены Флоранс, а также неиссякаемого любопытства дочери Сели. Его кошки Канэль и Нуга также внесли свой вклад (уютным мурлыканьем). Теперь, когда книга закончена, Кристофу нечем будет оправдывать недостаток внимания к ним!

Чтобы написать такую книгу, мало личных усилий авторов. Джеффри и Кристоф выражают глубокую признательность сотрудникам Microsoft за неоценимую помощь. В частности, они благодарят Аруна Кишана (Arun Kishan) за оперативные ответы на заковыристые вопросы и поиск в команде создателей Windows людей, способных разъяснить тот или иной вопрос. Особой благодарности также заслуживают Киншуман Кинпгуман (Kinshu-man Kinshumann), Стефан Долл (Stephan Doll), Уэдсон Алмейда Фило (Wedson Almeida Filho), Эрик Ли (Eric Li), Жан-Ив Публан Qean-Yves Poub-lan),

Сандип Ранад (Sandeep Ranade), Алан Чан (Alan Chan), Эл Контенти (Ale Contenti), Канн Су Гэтлин (Kang Su Gatlin), Кай Су (Kai Hsu), Мехмет Лайган (Mehmet Iyigun), Кен Юнь

(Ken Jung), Павел Лебединский (Pavel Lebedynskiy), Пол Сливович (Paul Sliwowicz) и

Лэнди Вонг (Landy Wang). Благодарим также всех, отвечавших на вопросы, опубликованные на внутренних форумах Майрософт, — Раймонда Чена (Raymond Chen),

Сангука Чу (Sunggook Chue), Криса Корио (Chris Corio), Лари Остермана (Larry Osterman), Ричарда Рассела (Richard RusseU), Марка Руссиновича (Mark Russinovich), Майка Шелдона (Mike Sheldon), Дэмиена Уоткинса (Damien Watkins) и Юньфень Чжань (Junfeng Zhang). Также выражаем искреннюю благодарность Джону Роббинсу по прозвищу

«Убийца багов» (John «Bugs-layer» Robbins) и Кенни Keppy (Kenny Kerr), чьи отзывы были большим подспорьем в работе над этой книгой.

Авторы признательны рецензенту издательства Бену Райану (Ben Ryan), поверившему в такого ненормального француза как Кристоф, менеджерам Линн Финел (Lynn Finnel) и Кертису Филипсу (Curtis Philips) — за терпение, Скотту Сили (Scott Seely) — за стремление к точности в технических вопросах, Роже Леблану (Roger LeBlanc) — за виртуозный перевод «франко-английского» наречия Кристофа на понятный язык, Андреа Фокс (Andrea Fox) — за тщательную корректуру. Помимо команды из Редмонда, много личного времени отдала работе над книгой Джоанта Сен (Joyanta Sen).

Наконец, Кристоф искренне благодарит Джеффри Рихтера за то, что Джефф доверил ему работу над пятым изданием книги; Джеффри же благодарен Кристофу за неутомимость в поиске информации, а также за многократную перестройку и переработку материала в стремлении к идеалу (такому, каким его видел Джефф).

Введение

Microsoft Windows — сложная операционная система. Она включает в себя столько всего и делает так много, что одному человеку просто не под силу полностью разобраться в этой системе. Более того, из-за такой сложности и комплексности Windows трудно решить, с чего начать ее изучение. Лично я всегда начинаю с самого низкого уровня, стремясь получить четкое представление о базовых сервисах операционной системы. Разобравшись в основах, дальше двигаться проще. С этого момента я шаг за шагом, по мере необходимости, изучаю сервисы более высокого уровня, построенные именно на этом базисе. Поэтому основное внимание в этой книге уделяется фундаментальным концепциям, которые должны знать те, кому придется заниматься проектированием и реализацией программ для операционной системы Windows. Вкратце, читатели познакомятся с различными возможностями Windows и научатся использовать их в своих программах на языках С и С++.

Вопросы, относящиеся к компонентной модели объектов (Component Object Model, СОМ), в моей книге прямо не затрагиваются. Но СОМ — это архитектура, где используются процессы, потоки, механизмы управления памятью, DLL, локальная память потоков, Unicode и многое другое. Если вы знаете, как устроены и работают эти фундаментальные сервисы операционной системы, то для освоения СОМ достаточно понять, как они применяются в этой архитектуре. Мне очень жаль тех, кто пытается перепрыгнуть через все это и сразу же взяться за изучение архитектуры СОМ. Впереди у них долгий и тернистый путь; в их знаниях неизбежны пробелы, которые непременно будут мешать им в работе.

В этой книге также не рассматривается общеязыковая исполняющая среда (common language runtime, CLR) платформы .NЕТ Framework от Майкрософт (ей посвящена отдельная книга: CLR via C#. Программирование на платформе Microsoft .NET Framework 2.0 на языке C#, Русская редакция, Питер, 2006-2007). Однако CLR реализована в виде объекта СОМ внутри библиотеки DLL, которая загружается в процесс и использует потоки для манипулирования в памяти строками в формате Unicode. Так что полученные из этой книги знания о базовых «строительных блоках» помогут и при написании управляемого кода. Кроме того, поддерживаемый CLR механизм Platform Invocation (P/Invoke) позволяет вызывать различные API Windows, о которых много говорится в этой книге.

Соседние файлы в предмете Программирование на C++