Windows для профессионалов (программирование в Win32 API для Windows NT 3.5 и Windows 95)

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Книга исчерпывающе описывает все функции Win32 API в Windows 95 и Windows NT 3.5. Состоит из введения, шестнадцати глав, двух приложений и указателя функций, содержит иллюстрации и множество листингов программ. Издание рассчитано на квалифицированных программистов, владеющих языками программирования С и C++ и имеющих опыт разработки приложений для 16-битной Windows (Windows 3.1 или Windows for Workgroups 3-11). Это не только полный справочник по функциям Win32 API, но и прекрасный учебник по программированию многопоточных приложений в 32-битных операционных системах Windows 95 и Windows NT

Author(s): Джеффри Рихтер
Edition: 2
Publisher: Издательский отдел "Русская Редакция" ТОО "Channel Trading Ltd."
Year: 1995

Language: Russian
Pages: 720

ОТ АВТОРА......Page 12
ВВЕДЕНИЕ......Page 16
Win32 API мечты......Page 22
Win32s......Page 23
Windows NT......Page 24
Win32 API: действительность......Page 25
ГЛАВА 2 ПРОЦЕССЫ......Page 28
Объекты ядра......Page 29
Ваше первое Win32-npMAO>KeHMe......Page 31
Описатель экземпляра процесса......Page 33
Описатель предыдущей копии процесса......Page 36
Командная строка процесса......Page 37
Переменные окружения......Page 38
Текущий диск и каталог процесса......Page 41
Наследуемые объекты ядра......Page 43
Определение версии системы......Page 45
Функция CreateProcess......Page 46
Параметры IpszlmageName и IpszCommandLine......Page 47
Параметры IpsaProcess, IpsaThread и flnheritHandles......Page 48
Параметр fdwCreate......Page 50
Параметр IpvEnvironment......Page 51
Параметр IpsiStartlnfo......Page 52
Параметр IppiProclnfo......Page 56
Функция ExitProcess......Page 57
Что происходит при завершении процесса......Page 58
Порожденные процессы......Page 59
Обособленные дочерние процессы......Page 61
В каких случаях потоки создаются......Page 62
И в каких случаях потоки не создаются......Page 64
Ваша первая функция потока......Page 65
Стек потока......Page 66
Время выполнения......Page 67
Функция CreateThread......Page 69
Параметр cbStack......Page 70
Параметр fdwCreate......Page 71
Параметр IplDThread......Page 72
Функция TerminateThread......Page 73
Что происходит при завершении потока......Page 74
Как узнать о себе......Page 75
Распределение времени между потоками......Page 78
Присвоение уровней приоритета в Win32 API......Page 79
Изменение класса приоритета процесса......Page 81
Установка относительного приоритета потока......Page 82
Что происходит в системе......Page 85
Процессы, потоки и С-библиотека периода выполнения......Page 90
Библиотечные функции, которые лучше не вызывать......Page 95
Процессоры, с которыми я знаком......Page 96
Виртуальное адресное пространство......Page 98
Разделы в адресном пространстве процесса......Page 100
Разбиение адресного пространства на разделы в Windows NT......Page 101
Регионы в адресном пространстве......Page 103
Передача физической памяти региону......Page 104
Физическая память......Page 105
Физическая память в страничном файле не хранится......Page 108
Защита типа "копирование при записи"......Page 109
Специальные флаги атрибутов защиты......Page 110
Подводя итоги......Page 111
Блоки внутри регионов......Page 114
Особенности структуры адресного пространства в Windows 95......Page 118
Системная информация......Page 124
Приложение-пример Syslnfo......Page 125
Статус виртуальной памяти......Page 131
Приложение-пример VMStat......Page 132
Определение состояния адресного пространства......Page 137
Функция VMQuery......Page 138
Приложение-пример VMMap......Page 147
Резервирование региона в адресном пространстве......Page 156
Резервирование региона с одновременной передачей физической памяти......Page 159
В какой момент региону передают физическую память......Page 160
Возврат физической памяти и освобождение региона......Page 162
В какой момент физическую память возвращают системе......Page 163
Приложение-пример VMAIIoc......Page 164
Изменение атрибутов защиты......Page 175
Блокировка физической памяти в RAM......Page 176
Стек потока......Page 178
Стек потока под управлением Windows 95......Page 181
Библиотечная С-функция для контроля стека......Page 183
ГЛАВА 7 ФАЙЛЫ ПРОЕЦИРУЕМЫЕ В ПАМЯТЬ......Page 186
Проецирование в память ЕХЕ- и DLL-файлов......Page 187
Несколько экземпляров ЕХЕ- или DLL-модуля не могут совместно использовать статические лонные......Page 188
Метод 1 Один файл, один буфер......Page 190
Метод 3. Один файл, два буфера......Page 191
Этап 1 Создание или открытие объекта ядра "файл"......Page 192
Этап 2. Создание объекта ядра "проецируемый файл"......Page 194
Этап 3. Проецирование файловых данных на адресное пространство процесса......Page 196
Этап 4. Открепление файла данных от адресного пространства процесса......Page 199
Этапы 5 и 6. Закрытие объекта "проецируемый файл" и объекта "файл"......Page 200
Обработка массивных файлов......Page 201
Проецируемые файлы и когерентность......Page 203
Приложение-пример FileRev......Page 205
Базовый адрес файла, проецируемого в память......Page 212
Особенности механизма проецирования файлов у разных платформ Win32......Page 213
Совместный доступ процессов к данным через механизм проецирования......Page 216
Функции CreateFileMapping и OpenFileMapping......Page 217
Наследование......Page 218
Файлы, проецируемые непосредственно на физическую память из страничного файла......Page 219
Приложение-пример MMFShare......Page 220
Частичная передача памяти проецируемым файлам......Page 226
ГЛАВА 8 КУЧИ......Page 228
Куча, предоставляемая процессу по умолчанию......Page 229
Дополнительные кучи в 32-процессе......Page 230
Использование куч в программах на C++......Page 236
Управление кучами функциями 16-битной Windows......Page 239
Худшее, что можно сделать......Page 244
Критические разделы......Page 245
Создание......Page 247
Применение......Page 248
Приложение-пример CritSecs......Page 253
Синхронизация потоков с объектами ядра......Page 265
Объекты Mutex......Page 269
Приложение-пример Mutexes......Page 273
Семафоры......Page 281
Приложение-пример "Супермаркет"......Page 283
События......Page 305
Приложение-пример "корзина с шарами"......Page 307
Составной синхронизирующий объект SWMRG......Page 309
Исходный код приложения Bucket......Page 314
Приложение-пример DocStats......Page 331
Функция WaitForlnputldle......Page 340
Функция MsgWaitForMultipleObjects......Page 341
Семейство lnterlocked-функций......Page 342
Многозадачность......Page 344
Распределение времени с вытеснением......Page 346
Очереди потока и обработка сообщений......Page 347
Посылка сообщений в очередь потока......Page 348
Посылка сообщения окну......Page 350
Пробуждение потока......Page 354
Пересылка данных посредством сообщений......Page 359
Приложение-пример CopyData......Page 361
Разупорядоченный ввод......Page 367
Как достигается разупорядочивание......Page 368
Локальное состояние ввода......Page 371
Клавиатурный ввод и фокус......Page 372
Управление курсором мыши......Page 375
Приложение-пример LISLab......Page 377
Создание DLL......Page 394
Проецирование DLL на адресное пространство процесса......Page 396
Функция входа/выхода......Page 401
DLL_PROCESS_ATTACH......Page 402
DLL_PROCESS_DETACH......Page 403
DLLJHREADJKTTACH......Page 406
Как система упорядочивает вызовы DIIMain......Page 407
Функция DIIMain и С-библиотека периода выполнения......Page 410
Экспорт функций и переменных из DLL......Page 411
Импорт функций и переменных из DLL......Page 413
Заголовочный файл DLL......Page 415
Разделы в ЕХЕ-и DLL-файлах......Page 416
Приложение-пример ModLlse......Page 419
Приложение-пример Multlnst......Page 428
ГЛАВА 12 ЛОКАЛЬНАЯ ПАМЯТЬ ПОТОКА......Page 432
Динамическая локальная память потока......Page 433
Применение динамической локальной памяти потока......Page 435
Приложение-пример TLSDyn......Page 437
Статическая локальная память потока......Page 447
Приложение-пример TLSStat......Page 448
ГЛАВА 13 ФАЙЛОВЫЕ СИСТЕМЫ И ФАЙЛОВЫЙ ВВОД/ВЫВОД......Page 458
Правила именования файлов в Win32......Page 460
Общесистемные операции и работа с томами......Page 461
Получение информации о томах......Page 464
Приложение-пример Disklnfo......Page 469
Определение текущего каталога......Page 478
Определение системного каталога......Page 479
Копирование, удаление, перемещение и переименование файлов......Page 480
Перемещение......Page 481
Переименование......Page 483
Создание, открытие и закрытие файлов......Page 484
Синхронный режим чтения и записи файлов......Page 488
Позиционирование указателя файла......Page 490
Блокировка и разблокировка отдельных участков файла......Page 491
Асинхронный режим чтения и записи файлов......Page 494
"Тревожный" асинхронный файловый ввод/вывод......Page 500
Приложение-пример AlertIO......Page 503
Временные метки файла......Page 515
Поиск файлов......Page 519
Приложение-пример DirWalk......Page 521
Уведомления об изменениях в файловой системе......Page 530
Приложение-пример FileChng......Page 533
ГЛАВА 14 СТРУКТУРНАЯ ОБРАБОТКА ИСКЛЮЧЕНИЙ......Page 546
Обработчики завершения......Page 547
Примеры использования обработчика завершения......Page 548
И еще о блоке finally......Page 557
Приложение-пример SEHTerm......Page 559
Фильтры и обработчики исключений......Page 567
Примеры использования фильтров и обработчиков исключений......Page 568
EXCEPTION_EXECUTE_HANDLER......Page 569
EXCEPTION_CONTINUE_EXECUTION......Page 570
EXCEPTION_CONTINUE_SEARCH......Page 572
Глобальная раскрутка......Page 575
Остановка глобальной раскрутки......Page 576
Еще несколько слов о фильтрах исключений......Page 578
Функция GetExceptionlnformation......Page 582
Приложение-пример SEHExcpt......Page 586
Приложение-пример SEHSum......Page 595
Программные исключения......Page 602
Приложение-пример SEHSoff......Page 603
Необработанные исключения......Page 613
Необработанные исключения в отсутствие отладчика......Page 614
Отключение вывода окна с сообщением об исключении......Page 616
Специфика Windows NT: необработанные исключения в режиме ядра......Page 618
Однобайтовые и двухбайтовые наборы символов......Page 620
Набор символов в Unicode......Page 621
Почему Unicode?......Page 622
Windows 95 и Unicode......Page 623
Unicode и С-библиотека периода выполнения......Page 624
Win32 функции для Unicode и ANSI......Page 629
Как сделать ANSI/Unicode-приложение......Page 631
Строковые функции в Win32......Page 632
Текстовые файлы......Page 634
Перекодировка строк из Unicode в ANSI и обратно......Page 635
Windows NT: оконные классы и процедуры......Page 638
ГЛАВА 16 ПРОРЫВ ЗА ПРЕДЕЛЫ ПРОЦЕССА......Page 640
Зачем нужен прорыв за границы процессов......Page 641
Внедрение DLL с использованием Реестра......Page 643
Внедрение DLL с помощью ловушек......Page 644
Приложение-пример PMRest......Page 646
Внедрение DLLc помощью удаленных потоков......Page 658
Функции Win32, влияющие на другие процессы......Page 659
Функции GetThreadContext и SetThreadContext......Page 661
Функции ReadProcessMemory и WriteProcessMemory......Page 665
Версия 0: простое не значит лучшее......Page 666
Версия 1: машинный код......Page 667
Версия 2: AllocProcessMemory и CreateRemoteThread......Page 670
Вспомогательные функции из ProcMem......Page 673
Функция InjectLib......Page 676
Функции InjectLib, InjectLibA, InjectLibW и InjectLibWorA......Page 678
Приложение-пример TlnjLib......Page 685
Динамически подключаемая библиотека IMGWALK.DLL......Page 688
Два слова в заключение......Page 690
ПРИЛОЖЕНИЕ А......Page 692
ПРИЛОЖЕНИЕ Б......Page 698
УКАЗАТЕЛЬ ФУНКЦИЙ......Page 706