Windows

         

Что нового в четвертом издании


Четвертое издание является практически новой книгой. Я решил разбить материал на большее количество глав для более четкой структуризации и изменил порядок его изложения. Надеюсь, так будет легче изучать его и усваивать. Например, глава по Unicode теперь находится в начале книги, поскольку с ним так или иначе связаны многие другие темы.
Более того, все темы рассматриваются гораздо глубже, чем в предыдущих изданиях. В частности, я подробнее, чем раньше, объясняю внутреннее устройство Windows,

чтобы Вы точно знали, что происходит за кулисами этой системы. Намного детальнее я рассказываю и о том, как взаимодействует с системой библиотека С/С++ (С/С++ run-time library) - особенно при создании и уничтожении процессов и потоков. Динамически подключаемым библиотекам я также уделяю больше внимания.

Помимо этих изменений, в книге появилась целая тонна нового содержания Упомяну лишь самое главное.

  • Новшества Windows 2000. Книгу было бы нельзя считать действительно переработанной, не будь в пей отражены новшества Windows 2000: объект ядра "задание" (job kernel object), функции для создания пула потоков (thread pooling functions), изменения в механизме планирования потоков (thread scheduling), расширения Address Windowing, вспомогательные информационные функции (toolhelp functions), разреженные файлы (sparse files) и многое другое
  • Поддержка 64-разрядной Windows. В книге приводится информация, специфическая для 64-разрядной Windows; все программы-примеры построены с учетом специфики этой версии Windows и протестированы в ней.
  • Практичность программ-примеров. Я заменил многие старые примеры новыми, более полезными в повседневной работе; они иллюстрируют решение не абстрактных, а реальных проблем программирования.
  • Применение С++. По требованию читателей примеры теперь написаны на С++ В итоге они стали компактнее и легче для понимания
  • Повторно используемый код. Я старался писать по возможности универсальный и повторно используемый код. Это позволит Вам брать из него отдельные функции или целые С++-классы без изменений (незначительная модификация может понадобиться лишь в отдельных случаях) Код на С++ гораздо проще для повторного использования.
  • Утилита VMMap. Эта программа-пример из предыдущих изданий серьезно усовершенствована. Ее новая версия дает возможность исследовать адресное пространство любого процесса, выяснять полные имена (вместе с путями) любых файлов данных, спроецированных в адресное пространство процесса, копировать информацию из памяти в буфер обмена и (если Вы пожелаете) просматривать только регионы или блоки памяти внутри регионов.
  • Утилита ProcessInfo. Это новая утилита. Она показывает, какие процессы выполняются в системе и какие DLL используются тем или иным модулем Как только Вы выбираете конкретный процесс, ProcessInfo может запустить утилиту VMMap для просмотра всего адресного пространства этого процесса. ProcessInfo позволяет также узнать, какие модули загружены в системе и какие исполняемые файлы используют определенный модуль. Кроме того, Вы сможете увидеть, у каких модулей были изменены базовые адреса из-за неподходящих значений.
  • Утилита LISWatch. Тоже новая утилита. Она отслеживает общесистемные и специфические для конкретного потока изменения в локальном состоянии ввода. Эта утилита поможет Вам разобраться в проблемах, связанных с перемещением фокуса ввода в пользовательском интерфейсе
  • Информация по оптимизации кода. В этом издании я даю гораздо больше информации о том, как повысить быстродействие кода и сделать его компактнее. В частности, я подробно рассказываю о выравнивании данных (data alignment), привязке к процессорам (processor affinity), кэш-линиях процессо-




  • pa (CPU cache lines), модификации базовых адресов (rebasing), связывании модулей (module binding), отложенной загрузке DLL (delay-loading DLLs) и др.

  • Существенно переработанный материал по синхронизации потоков.


  • Я полностью переписал и перестроил весь материал по синхронизации потоков. Теперь я сначала рассказываю о самых эффективных способах синхронизации, а наименее эффективные обсуждаю в конце Попутно я добавил новую главу, посвященную набору инструментальных средств, которые помогают решать наиболее распространенные проблемы синхронизации потоков

  • Детальная информация о форматах исполняемых файлов. Форматы файлов EXE- и DLL-модулей рассматриваются намного подробнее Я рассказываю о различных разделах этих модулей и некоторых специфических параметрах компоновщика, которые позволяют делать с модулями весьма интересные вещи.
  • Более подробные сведения о DLL. Главы no DLL тоже полностью переписаны и перестроены Первая из них отвечает на два основных вопроса: "Что такое DLL?" и "Как ее создать?" Остальные главы по DLL посвящены весьма продвинутым и отчасти новым темам - явному связыванию (explicit linking), отложенной загрузке, переадресации вызова функции (function forwarding), перенаправлению DLL (DLL redirection) (новая возможность, появившаяся в Windows 2000), модификации базового адреса модуля (module rebasing) и связыванию.
  • Перехват API-вызовов. Да, это правда За последние годы я получил столько почты с вопросами по перехвату API-вызовов (API hooking), что в конце концов решил включить эту тему в свою книгу, Я представлю Вам несколько C++классов, которые сделают перехват API-вызовов в одном или всех модулях процесса тривиальной задачей. Вы сможете перехватывать даже вызовы LoadLibrary и GetProcAddress от библиотеки С/С++
  • Более подробные сведения о структурной обработке исключений. Эту часть я тоже переписал и во многом перестроил Вы найдете здесь больше информации о необрабатываемых исключениях и увидите С++-класс - оболочку кода, управляющего виртуальной памятью за счет структурной обработки исключений (stiuctured exception handling) Я также добавил сведения о соответствующих приемах отладки и о том, как обработка исключений в С++ соотносится со структурной обработкой исключений
  • Обработка ошибок. Это новая глава В ней показывается, как правильно перехватывать ошибки при вызове API-функций Здесь же представлены некоторые приемы отладки и ряд других сведений.
  • Windows Installer. Чуть не забыл, программы-примеры (все они содержатся на прилагаемом компакт-диске) используют преимущества нового Windows Installer, встроенного в Windows 2000 Это позволит полностью контролировать состав устанавливаемого программного обеспечения и легко удалять больгае не нужные его части через апплет Add/Remove Programs в Control Panel Если Вы используете Windows 95/98 или Windows NT 40, программа Setup с моего компакт-диска сначала установит Windows Installer. Ho, разумеется, Вы можете и сами скопировать с компакт-диска любые интересующие Вас файлы
    с исходным или исполняемым кодом.



  • Содержание раздела