Джеффри рихтера windows via c

Windows® via C/C++

Скачать книгу в формате:

Аннотация

Master the intricacies of application development with unmanaged C++ codestraight from the experts. Jeffrey Richter’s classic book is now fully revised for Windows XP, Windows Vista, and Windows Server 2008. You get in-depth, comprehensive guidance, advanced techniques, and extensive code samples to help you program Windowsbased applications. Discover how to: Architect and implement your applications for both 32-bit and 64-bit Windows Create and manipulate processes and jobs Schedule, manage, synchronize and destroy threads Perform asynchronous and synchronous device I/O operations with the I/O completion port Allocate memory using various techniques including virtual memory, memory-mapped files, and heaps Manipulate the default committed physical storage of thread stacks Build DLLs for delay-loading, API hooking, and process injection Using structured exception handling, Windows Error Recovery, and Application Restart services

Отзывы

Популярные книги

Ренсом Риггз Дом странных детей Сна нет, и смерти тоже нет. Те, кто как будто умер, живы. .

Дом странных детей

Богатый папа, Бедный папа

Уличный кот по имени Боб .

Уличный кот по имени Боб

1 — Девушка с татуировкой дракона. Сорок лет загадка исчезновения юной родственницы не дает пок.

Миллениум. Тетралогия. (ЛП)

Сергей Лукьяненко Черновик 1 Бывают дни, когда все не ладится. Нога с кровати опускается не в та.

Черновик

«Облачный атлас» подобен зеркальному лабиринту, в котором перекликаются, наслаиваясь друг на друга.

Облачный атлас

Дорогие друзья по чтению. Книга «Windows® via C/C++» Richter Jeffrey (EN) произведет достойное впечатление на любителя данного жанра. Многогранность и уникальность образов, создает внутренний мир, полный множества процессов и граней. Интрига настолько запутанна, что несмотря на встречающиеся подсказки невероятно сложно угадать дорогу, по которой пойдет сюжет. Актуальность проблематики, взятой за основу, можно отнести к разряду вечных, ведь пока есть люди их взаимоотношения всегда будут сложными и многообразными. Легкий и утонченный юмор подается в умеренных дозах, позволяя немного передохнуть и расслабиться от основного потока информации. В ходе истории наблюдается заметное внутреннее изменение главного героя, от импульсивности и эмоциональности в сторону взвешенности и рассудительности. Благодаря динамичному и увлекательному сюжету, книга держит читателя в напряжении от начала до конца. Попытки найти ответ откуда в людях та или иная черта, отчего человек поступает так или иначе, частично затронуты, частично раскрыты. Всем словам и всем вещам вернулся их изначальный смысл и ценности, вознося читателя на вершину радости и блаженства. Сюжет разворачивается в живописном месте, которое легко ложится в основу и становится практически родным и словно, знакомым с детства. Финал немножко затянут, но это вполне компенсируется абсолютно непредсказуемым окончанием. «Windows® via C/C++» Richter Jeffrey (EN) читать бесплатно онлайн можно неограниченное количество раз, здесь есть и философия, и история, и психология, и трагедия, и юмор…

  • Понравилось: 0
  • В библиотеках: 0

Новинки

Руслан: нам с тобой суждено быть вместе. И не важно, в каком времени – этом или другом. Ты – моя, а .

Пока мы вместе

Руслан: нам с тобой суждено быть вместе. И не важно, в каком времени – этом или другом. Ты – моя, а .

Юная Изабелла, дочь обедневшего и погрязшего в долгах барона де Бриссака росла избалованной и своево.

У кошки девять жизней

Юная Изабелла, дочь обедневшего и погрязшего в долгах барона де Бриссака росла избалованной и своево.

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Иконки почты для windows 10

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Как посмотреть объем диска линукс

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Консоль Windows Error Reporting .

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

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

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

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

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

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

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

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

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

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

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

Раздел Windows Version Build Option .

Раздел Unicode Build Option.

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

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

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

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

Макросы chASSERT и chVERIFY.

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

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

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

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

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

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

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

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

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

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

Читайте также:  Тонкомпенсация windows 10 отсутствует

Сандип Ранад (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, о которых много говорится в этой книге.

Оцените статью