aaillya · 23-Июл-10 16:22(14 лет 11 месяцев назад, ред. 23-Июл-10 16:24)
Windows via C&C++. Программирование на языке Visual C++ (+ПРИМЕРЫ ПРОГРАММ) Год выпуска: 2009 Автор: Назарр К., Рихтер Дж. Жанр: Пособие Издательство: Питер ISBN: 978-5-7502-0367-3 Язык: Русский Формат: PDF Качество: Отсканированные и распознанные страницы Количество страниц: 932 Описание: Это издание — практически новая книга, посвященная разработке серьезных приложений на Visual C++ в операционных системах Windows XP и Windows Vista (32- и 64-разрядных версиях) с использованием функций Windows API. Гораздо глубже, чем в предыдущих изданиях, рассматриваются такие темы, как механизм User Account Control, взаимодействие с системой библиотеки C/C++ при реализации защитных механизмов и обработке исключений; представлены новые синхронизирующие механизмы. В это издание добавлены две совершенно новые главы: о механизмах ввода-вывода и о работе новой системы Windows Error Reporting, изменившей подходы к созданию отчетов об ошибках и восстановлению приложений после сбоев.
Книга предназначена для профессиональных программистов, владеющих языком С/С++ и имеющим опыт разработки Windows-приложений. Книга состоит из 26 глав и двух приложений. Доп. информация: Исходные тексты для всех программ-примеров из глав книги в папке [Codes].
Большое спасибо за книгу! Особенно за то что уже в распознанном виде! Жаль только закладок для глав нет и сслыки в оглавлении ссылаются на вордовские документы которых нет.
Так говорят про очень многие книги, и все советуют читать в оригинале на английском, но кто английским не очень хорошо владеет, тем приходится довольствоваться тем что есть... (я пока довольствуюсь переводами) )
Спасибо!
Книга от классиков в изумительном качестве скана!!! с учетом того что MSDN английский лучше сразу привыкать к родному языку документации... вот только не смог найти оригинал в сети столь же качественно отсканенный. Если есть оригинал, поделитесь плииииз
Спасибо!
Книга от классиков в изумительном качестве скана!!! с учетом того что MSDN английский лучше сразу привыкать к родному языку документации... вот только не смог найти оригинал в сети столь же качественно отсканенный. Если есть оригинал, поделитесь плииииз
Подскажите пожалуйста хорошую книгу по программированию на C++ графических приложений (работа с GDI+, обработка изображений и DirectX) с нюансами управления окнами с графикой. Нужно именно для C++ (не для NET) для максимальной производительности обработки изображений.
Подскажите пожалуйста хорошую книгу по программированию на C++ графических приложений (работа с GDI+, обработка изображений и DirectX) с нюансами управления окнами с графикой. Нужно именно для C++ (не для NET) для максимальной производительности обработки изображений.
SamAlexFry7777
Спасибо. А новей что-нибудь не публиковалось?
И еще вопрос. По программированию в технологии CUDA nVidia что-нибудь стоящее с примерами публиковалось из книжек (кроме того, что сейчас на трекере - я и бумажную бы купил)? Видеокурсы, конечно, хорошо, но для серьезной работы книги полезнее.
Я особо не вникал, но судя по оглавлению книжечка сильно напоминает другую книгу того же автора "Windows. Создание эффективных Win32 приложений с учётом специфики 64-разрядной версии Windows" Комментарий с озона:
Цитата:
Читал более раннюю версию этой книги, а именно "Windows для профессионалов: создание эффективных Win32 приложений с учетом специфики 64-разрядной версии Windows"(http://www.ozon.ru/context/detail/id/116668/), вышедшую в 2001 году. Купил эту... И, к своему удивлению, не обнаружил в новом издании раздела:
"Часть VI: Операции с окнами
Глава 26 - Оконные сообщения
Глава 27 - Модель аппаратного ввода и локальное состояние ввода"
В Windows 2000 эти компоненты полностью защищены."
в оригинале об Windows 2000 речи вообще не было! Зачем переводчик это сюда вставил?
Вот еще c этой же страницы:
Цитата:
В 64-разрядной Windows раздел пользовательского режима (4 Тб) выглядит непропорционально малым по сравнению с 16 777 212 Тб от-веденными под раздел для кода и данных режима ядра.
оригинал ->
Цитата:
In 64-bit Windows, the 8-TB user-mode partition looks greatly out of proportion to the 16,777,208-TB kernel-mode partition
все цифры не верные. И таких моментов много.
Очень не советую читать эту книгу, потому что написан там полный бред. Читать надо оригинал, и в моментах где совсем не понятно, можно взять перевод, но чаще всего там написано еще хуже
Потратил пару часиков сделал интерактивное иерархическое оглавление со сверкой всех страниц
Оглавление
Код:
Оглавление 1
Благодарности 9
Введение 10
64-разрядные версии Windows 11
Что нового в пятом издании 12
Примеры кода и требования к системе 14
Техническая поддержка 14
Часть I Материалы для обязательного чтения 15
Глава 1 Обработка ошибок 18
Вы тоже можете это сделать 23
Программа-пример ErrorShow 24
Глава 2. Работа с символами и строками 27
Наборы символов 29
Символьные и строковые типы данных для ANSI и Unicode 31
Unicode- и ANSI-функции в Windows 33
Unicode- и ANSI-функции в библиотеке С 36
Безопасные строковые функции в библиотеке С 37
Введение в безопасные строковые функции 38
Дополнительные возможности при работе со строками 42
Строковые функции Windows 44
Почему Unicode? 46
Рекомендуемые приемы работы с символами и строками 47
Перекодировка строк из Unicode в ANSI и обратно 48
Экспорт DLL-функций для работы с ANSI и Unicode 50
Определяем формат текста (ANSI или Unicode) 52
Глава 3. Объекты ядра 54
Что такое объект ядра 54
Учет пользователей объектов ядра 57
Защита 57
Таблица описателей объектов ядра 60
Создание объекта ядра 61
Закрытие объекта ядра 63
Совместное использование объектов ядра несколькими процессами 66
Наследование описателя объекта 67
Именованные объекты 72
Дублирование описателей объектов 86
Часть II Приступаем к работе 93
Глава 4. Процессы 95
Ваше первое Windows-приложение 96
Описатель экземпляра процесса 102
Описатель предыдущего экземпляра процесса 104
Командная строка процесса 105
Переменные окружения 106
Привязка к процессорам 113
Режим обработки ошибок 113
Текущие диск и каталог для процесса 114
Определение версии системы 116
Функция CreateProcess 120
Параметры pszApplicationName и pszCommandLine 121
Параметры psaProcess, psaThread и bInheritHandles 123
Параметр fdwCreate 125
Параметр pvEnvironment 127
Параметр pszCurDir 128
Параметр psiStartInfo 128
Параметр ppiProcInfo 136
Завершение процесса 138
Возврат управления входной функцией первичного потока 138
Функция ExitProcess 139
Функция TerminateProcess 140
Когда все потоки процесса уходят 141
Что происходит при завершении процесса 141
Дочерние процессы 142
Запуск обособленных дочерних процессов 144
Работа администратора с пользовательскими полномочиями 145
Автоматическое повышение привилегий процесса 149
Повышение привилегий процесса вручную 151
О текущем контексте привилегий 153
Перечисление процессов, выполняемых в системе 155
Программа-пример ProcessInfo 156
Глава 5. Задания 165
Определение ограничений, налагаемых на процессы в задании 170
Включение процесса в задание 178
Завершение всех процессов в задании 179
Получение статистической информации о задании 179
Уведомления заданий 183
Программа-пример JobLab 186
Глава 6. Базовые сведения о потоках 189
В каких случаях потоки создаются 190
И в каких случаях потоки не создаются 192
Ваша первая функция потока 193
Функция CreateThread 194
Параметр psa 195
Параметр cbStackSize 195
Параметры pfnStartAddr и pvParam 196
Параметр dwCreateFlags 197
Параметр pdwThreadID 197
Завершение потока 198
Возврат управления функцией потока 198
Функция ExitThread 198
Функция TerminateThread 199
Если завершается процесс 199
Что происходит при завершении потока 200
Кое-что о внутреннем устройстве потока 201
Некоторые соображения по библиотеке С/С++ 203
Ой, вместо beginthreadex я по ошибке вызвал CreateThread 214
Библиотечные функции, которые лучше не вызывать 214
Как узнать о себе 215
Преобразование псевдоописателя в настоящий описатель 216
Глава 7. Планирование потоков, приоритет и привязка к процессорам 219
Приостановка и возобновление потоков 222
Приостановка и возобновление процессов 223
Функция Sleep 225
Переключение потоков 225
Переключение потоков на компьютерах с процессором, поддерживающим HyperThreading 226
Определение периодов выполнения потока 227
Структура CONTEXT 231
Приоритеты потоков 236
Абстрагирование приоритетов 237
Программирование приоритетов 242
Динамическое изменение уровня приоритета потока 245
Подстройка планировщика для активного процесса 246
Приоритеты запросов ввода-вывода 247
Программа-пример Scheduling Lab 249
Привязка потоков к процессорам 256
Глава 8. Синхронизация потоков в пользовательском режиме 261
Атомарный доступ: семейство Interlocked-функций 263
Кэш-линии 270
Более сложные методы синхронизации потоков 272
Худшее, что можно сделать 273
Критические секции 274
Критические секции: важное дополнение 277
Критические секции и спин-блокировка 280
Критические секции и обработка ошибок 281
«Тонкая» блокировка 283
Условные переменные 287
Приложение-пример Queue 288
Несколько полезных приемов 301
Глава 9. Синхронизация потоков с использованием объектов ядра 305
Wait-функции 307
Побочные эффекты успешного ожидания 311
События 313
Программа-пример Handshake 318
Ожидаемые таймеры 323
Ожидаемые таймеры и АРС-очередь 327
И еще кое-что о таймерах 330
Семафоры 331
Мьютексы 333
Мьютексы и критические секции 336
Программа-пример Queue 337
Сводная таблица объектов, используемых для синхронизации потоков 346
Другие функции, применяемые в синхронизации потоков 348
Асинхронный ввод-вывод на устройствах 348
Функция WaitForInputIdle 348
Функция MsgWaitForMultipleObjects(Ex) 350
Функция WaitForDebugEvent 350
функция SignalObjectAndWait 351
Обнаружение взаимных блокировок с помощью WaitChain Traversal API 352
Глава 10. Синхронный и асинхронный ввод-вывод на устройствах 363
Открытие и закрытие устройств 364
Близкое знакомство с функцией CreateFile 367
Флаги функции CreateFile, управляющие кэшированием 370
Другие флаги функции CreateFile 372
Флаги файловых атрибутов 374
Работа с файлами 375
Определение размера файла 376
Установка указателя в файле 377
Установка конца файла 379
Синхронный ввод-вывод на устройствах 380
Сброс данных на устройство 381
Отмена синхронного ввода-вывода 381
Асинхронный ввод-вывод на устройствах: основы 383
Структура OVERLAPPED 384
Асинхронный ввод-вывод на устройствах: «подводные камни» 386
Отмена запросов ввода-вывода, ожидающих в очереди 388
Уведомление о завершении ввода-вывода 389
Освобождение объекта ядра «устройство» 390
Освобождение объекта ядра «событие» 392
Ввод-вывод с оповещением 395
Порты завершения ввода-вывода 402
Создание портов завершения ввода-вывода 403
Связывание устройства с портом завершения ввода-вывода 404
Архитектура программ, использующих порты завершения ввода-вывода 407
Как порт завершения ввода-вывода управляет пулом потоков 410
Сколько потоков должно быть в пуле? 412
Эмуляция выполненных запросов ввода-вывода 414
Программа-пример FileCopy 415
Глава 11. Пулы потоков 424
Сценарий 1. Асинхронный вызов функций 426
Явное управление рабочими элементами 427
Программа-пример Batch 429
Сценарий 2. Вызов функций через определенные интервалы времени 433
Программа-пример TimedMsgBox 435
Сценарий 3. Вызов функций при освобождении отдельных объектов ядра 439
Сценарий 4. Вызов функций по завершении запросов асинхронного ввода-вывода 442
Обработка завершения обратного вызова 443
Настройка пула потоков 445
Корректное разрушение пула потоков и группы очистки 447
Глава 12. Волокна 452
Работа с волокнами 453
Программа-пример Counter 456
Часть III Управление памятью 460
Глава 13. Архитектура памяти в Windows 463
Виртуальное адресное пространство процесса 463
Как адресное пространство разбивается на разделы 464
Раздел для выявления нулевых указателей 465
Раздел для кода л данных пользовательского режима 465
Раздел для кода и данных режима ядра 468
Регионы в адресном пространстве 468
Передача региону физической памяти 469
Физическая память в страничный файл 471
Физическая память в страничном файле не хранится 473
Атрибуты защиты 474
Защита типа «копирование при записи 476
Специальные флаги атрибутов защиты 477
Подводя итоги 477
Блоки внутри регионов 483
Выравнивание данных 486
Глава 14. Исследование виртуальной памяти 492
Системная информация 492
Статус виртуальной памяти 502
Управление памятью на компьютерах с архитектурой NUMA 503
Определение состояния адресного пространства 507
Глава 15. Использование виртуальной памяти в приложениях 521
Резервирование региона в адресном пространстве 521
Передача памяти зарезервированному региону 524
Резервирование региона с одновременной передачей физической памяти 525
В какой момент региону передают физическую память 526
Возврат физической памяти и освобождение региона 529
В какой момент физическую память возвращают системе 530
Изменение атрибутов защиты 539
Сброс содержимого физической памяти 540
Механизм Address Windowing Extensions 544
Глава 16. Стек потока 559
Функция из библиотеки С/С++ для контроля стека 564
Программа-пример Summation 566
Глава 17. Проецируемые в память файлы 573
Проецирование в память EXE- и DLL-файлов 574
Статические данные не разделяются несколькими экземплярами EXE или DLL 575
Файлы данных, проецируемые в память 587
Использование проецируемых в память файлов 588
Обработка больших файлов 607
Проецируемые файлы и когерентность 609
Базовый адрес файла, проецируемого в память 610
Особенности проецирования файлов 612
Совместный доступ процессов к данным через механизм проецирования 613
Файлы, проецируемые на физическую память из страничного файла 614
Частичная передача физической памяти проецируемым файлам 620
Глава 18. Динамически распределяемая память 636
Стандартная куча процесса 637
Дополнительные кучи в процессе 638
Защита компонентов 638
Более эффективное управление памятью 639
Локальный доступ 640
Исключение издержек связанных с синхронизацией потоков 640
Быстрое освобождение всей памяти в куче 640
Создание дополнительной кучи 641
Выделение блока памяти из кучи 643
Изменение размера блока 645
Определение размера блока 646
Освобождение блока 646
Уничтожение кучи 646
Использование куч в программах на С++ 646
Другие функции управления кучами 650
Часть IV Динамически подключаемые библиотеки 654
Глава 19. DLL: основы 657
DLL и адресное пространство процесса 658
Общая картина 660
Создание DLL-модуля 663
Создание EXE-модуля 669
Выполнение EXE-модуля 673
Глава 20. DLL: более сложные методы программирования 677
Явная загрузка DLL и связывание идентификаторов 677
Явная загрузка DLL 678
Явная выгрузка DLL 682
Явное подключение экспортируемого идентификатора 685
Функция входа/выхода 686
Уведомление DLL_PROCESS_ATTACH 687
Уведомление DLL_PROCESS_DETACH 689
Уведомление DLL_THREAD_ATTACH 691
Уведомление DLL_THREAD_DETACH 692
Как система упорядочивает вызовы DllMain 693
Функция DllMain и библиотека С/С++ 696
Отложенная загрузка DLL 697
Программа-пример DelayLoadApp 702
Переадресация вызовов функций 709
Известные DLL 710
Перенаправление DLL 712
Модификация базовых адресов модулей 713
Связывание модулей 720
Глава 21. Локальная память потока 725
Динамическая локальная память потока 726
Использование динамической TLS 728
Статическая локальная память потока 731
Глава 22. Внедрение DLL и перехват API-вызовов 734
Пример внедрения DLL 735
Внедрение DI L с использованием реестра 737
Внедрение DLL с помощью ловушек 739
Утилита для сохранения позиций элементов на рабочем столе 740
Внедрение DLL с помощью удаленных потоков 752
Программа-пример injLib 756
Библиотека ImgWalk.dll 763
Внедрение троянской DLL 765
Внедрение DLL как отладчика 765
Внедрение кода через функцию CreateProcess 766
Перехват API- вызовов: пример 767
Перехват API-вызовов подменой кода 768
Перехват API-вызовов с использованием раздела импорта 768
Программа-пример LastMsgBoxInfo 773
Часть V Структурная обработка исключений 792
Глава 23. Обработчики завершения 795
Примеры использования обработчиков завершения 796
Funcenstein1 797
Funcenstein2 797
Funcenstein3 799
Funcfurter1 800
Проверьте себя: FuncaDoodleDoo 801
Funcenstein4 803
Funcarama1 804
Funcarama2 805
Funcarama3 805
Funcarama4: последний рубеж 806
И еще о блоке finally 808
Funcfurter2 809
Программа-пример SEHTerm 810
Глава 24. Фильтры и обработчики исключений 818
Примеры использования фильтров и обработчиков исключений 819
Funcmeister1 819
Funcmeister2 820
EXCEPTION_EXECUTE_HANDLER 822
Некоторые полезные примеры 823
Глобальная раскрутка 826
Остановка глобальной раскрутки 829
EXCEPTION_CONTINUE_EXECUTION 831
Будьте осторожны с EXCEPTION_CONTNUE_EXECUTION 832
EXCEPTION_CONTINUE_SEARCH 833
Функция GetExceptionCode 835
Функция GetExceptionInformation 840
Программные исключения 844
Глава 25. Необработанные исключения, векторная обработка исключений и исключения C++ 850
Как работает функция UnhandkdExceptionFilter 853
Взаимодействие UnhandledExceptionFilter с WER 856
Отладка по запросу 859
Программа-пример Spreadsheet 862
Векторная обработка исключений и обработчики возобновления 874
Исключения С++ и структурные исключения 876
Исключения и отладчик 878
Глава 26. Отчеты об ошибках и восстановление приложений 884
Консоль Windows Error Reporting 884
Программная генерация отчетов об ошибках в Windows 887
Отключение генерации и отправки отчетов 889
Настройка генерируемых для процесса отчетов о сбоях 890
Создание и настройка отчетов о сбоях 891
Программа-пример Customized WER 900
Автоматический перезапуск и восстановление приложений 908
Автоматический перезапуск приложения 908
Поддержка восстановления приложений 909
Часть VI Приложения 912
Приложение А. Среда разработки 913
Заголовочный файл CmnHdr.h 913
Раздел Windows Version Build Option 914
Раздел Unicode Build Option 914
Раздел Windows Definitions и диагностика уровня 4 915
Вспомогательный макрос Pragma Message 915
Макрос chINRANGE 916
Макрос chBEGINTfeREADEX 916
Моя реализация DebugBreak для платформы x86 918
Определение кодов программных исключений 918
Макрос chMB 918
Макросы chASSERT и chVERIFY 918
Макрос chHANDLE_DLGMSG 919
Макрос chSETDLGICONS 919
Принудительное указание компоновщику входной функции (w)WinMain 919
Поддержка тем оформления Windows XP с помощью директивы pragma 920
Приложение Б. Распаковщики сообщений, макросы для дочерних элементов управления и API-макросы 928
Макросы — распаковщики сообщений 929
Макросы для дочерних элементов управления 931
API-макросы 932
43220301Для умного человека и такого перевода хватит.
очень самоуверенно для первого знакомства с Рихтером/фундаментальным API, однозначно, лучше взять предыдущие корректные издания
впечатление, что книгу набирали в пьяном угаре
позор издательству