Математика

Физика

Химия

Биология

Техника и    технологии

Внутренний мир-Windows-Мэтт Питрек Киев 1995 стр.415 пер. С.Н.Сущенко. - К.: НИПФ «ДиаСофт Лтд.», 1995. - 416 с. ISBN 5-7707-7218-2 Большинство книг, посвященных программированию в Windows, рассматривают ее как «черный ящик», — Ваша программа делает обращения к Windows API и где-то этот запрос обрабатывается. Однако, для написания правильно работающих профессиональных программ Вы должны понимать, что происходит внутри Windows под ее красивой оболочкой. Мэтт Питрек показывает в своей книге внутреннюю сложность и мощь Windows, иллюстрируя при помощи псевдокода фактическую реализацию функций Windows. В книге обсуждаются следующие темы: типичная Windows-программа, управление памятью, создание и уничтожение программы, динамическая компоновка, интерфейс Windows-DOS, планировщик, система сообщений, управление ресурсами, основы GDI. Базирующаяся на интенсивном исследовании двоичного кода программных файлов Windows и на авторитетной оценке сложных взаимодействий, которые происходят внутри Windows, книга рекомендуется для чтения всем программистам, которые занимаются разработкой Windows-приложений. Мэтт Питрек — инженер в Nu-Mega Technologies Incorporated, разработчик BOUNDS-CHECKER и Soft-ICE/W, соавтор бестселлера «Недокументированные возможности Windows».
ОГЛАВЛЕНИЕ
Предисловие редактора перевода. ...........................................о ь
Предисловие.......................................................... 7
Серии книг........................................................о.. 9
Введение............................................................. 11
Это только текст программы.................................................11
Что мы будем освещать....................................................11
Методы исследования.....................................................13
О режимах........................................................... 14
Ссылки на книгу "недокументированные возможности Windows"............................ 15
Благодарности......................................................... 16
Глава 1. Главный вопрос: запуск и завершение Windows..........................17
Пару слов о защищенном режиме и расширителях DOS.................................18
Первый шаг: WIN.COM....................................................19
Следующий шаг: загрузка DPMI-сервера..........................................23
Начинается самое интересное: загрузка модуля KERNEL.................................25
Подпрограмма BootStrapO модуля KERNEL........................................27
SlowBoot()...........................................................48
Монохромные мониторы и диагностика Windows.....................................49
Инициализация модуля USER................................................ 58
LoadWindows() ....................•.•...••••••••••••••••"•••••¦>••"•••••«"»
Вспомогательные функции, используемые LoadWindows()................................62
LW_LoadSomeStrmg()................................................... 62
LW_LoadResources()...................................................."2
LW_RegisterWindows()...................................................64
Enablelnput()........................................................e4
^ LWJnitWndMgrO.....................................................65
' GloballnitAtomO......................................................6e
? LW_DisplayDriverlnit()..................................................67
LW_LoadTaskinanAndScreenSaver()........................................... 67
Завершение работы Windows................................................. 68
Завершение работы модуля USER...............................•..............68
QueryQuitEnum()...................................................... 69
Disablebput().............................................. i ......... 70
Выход из KERNEL. Наконец-то!............................................... 71
DisableKernelO....................................................... 72
IntemalDisableDOSO.................................................... 73
Резюме............................................................. 74
Глава 2. Управление памятью в Windows..................................... 75
Схема функций управления памятью............................................ 76
Два вида "кучи"........................................................ 8"
Атрибуты памяти....................................................... 81
Функции для работы с селекторами............................................. °^
AUocSelector()....................................................... 84
AllocSelectorArrayO .................................................... 85
Get_Sel().......................................................... 86
FreeSelector()........................................................ 88
FreeSelArrayO.....................с................................. 88
FreeSel()........................................................... 89
GetSelectorLimitO..................................................... 90
SetSelectorLimitO..................................................... 90
GetSelectorBaseO...................................................... 91
Get_Physical_Address().................................................. 9i
SetSelectorBaseO...................................................... 91
PrestoChangoSelectorO.................................................. 9*
: AUocDStoCSAlias().................................................... 92
AKA()........................................................... 93
AllocCStoDSAlias().................................................... 93
Глобальная "куча"......................................................94
Принадлежность блоков памяти................... ............................ 95
Размещение памяти в глобальной "куче".......................................... 96
Не очень большая или не очень маленькая...................................... 97
Компоненты глобальной "кучи"............................................... 97
Burgermaster....................................................... 97
Заголовок Globallnfo................................................... 98
Арены блоков памяти, размещенных в глобальной "куче"..............................101
Таблица селекторов.......................•...........................103
Пример программы heapfun............•*....................................104
Блоки глобальной памяти................................................106
Атрибуты сегментов, размещенных в глобальной "куче"................................. 107
FIXED-сегменты против MOVEABLE-сегментов....................................107
DISCARDABLE-сегменты................................................108
Заграждающая метка кода...............................................109
Функции для работы с глобальной "кучей"........................................110
GlobalInit().........................................................110
GInit().........................................^..................112
GlobalAlloc()......................................"..................114
GbTop()...........................................................115
GAlloc()..........................................................117
GSearch()..........................................................120
GrowHeapO........................................................125
GCompact()........................................................125
GlobalFree()........................................................ 127
GFree()...........................................................128
Free_Object()........................................................129
GlobalLock()........................................................130
GlobalUnlock().......................................................131
GlobalHandleO.......................................................132
MyLock()..........................................................132
XHandle().........................................................133
GlobalReAlloc()......................................................133
GlobalDOSAlloc().....................................................134
GlobalDOSFreeO......................................................135
GlobalCompact()......................................................135
InnerShrinkHeap().....................................................136
UnlinkWin386Block()...................'................................137
GlobalFix().........................................................137
GlobalUnfix()........................................................138
GUnLock().........................................................138
LockSegment().......................................................139
UnlockSegment()......................................................139
GlobalPageLockQ.....................................................139
GlobalPageUnlock()..................................•.................140
GlobalWire()........................................................141
GWire()...........................................................141
GlobalUnwire().......................................................142
LRUSweep()........................................................143
GlobalLRUNewest()....................................................144
GlobalLRU01dest().....................................................145
GlobalFlags()........................................................145
GlobalSize()........................................................145
GlobalNotify().......................................................146
GetFreeSpace().......................................................147
GetDPMIFreeSpace()...............................-........-............148
GetFreeMemInfo().................................................... . 149
SetSwapAreaSize().....................................................150
CalcMaxNRSeg()......................................................150
GReserveO.........................................................151
Локальная "куча".......................................................153
структура l^ocaiinio...................................................i»i
Арены блоков памяти, размещенных в локальной "куче"..............................155
Первый блок локальной "кучи".............................................156
Пример программы LHEAP.................................................157
LocalAlloc()........................................................161
LAlloc()...........................................................163
LocalFree().........................................................165
LocalRealloc().......................................................166
LocalLock()..........................................................168
LocalUnlock().......................................................168
LocalHandle()...........................'............................169
LocalSize().......................................................". . 169
LocalFlags()........................................................169
LocallnitO.......................................................... 170
LocalHeapSize()......................................................172
LocalHandleDelta().....................................................172
LocalShrink()........................................................173
LocalCompact().......................................................173
LocalNotify()........................................'................174
LocalNotifyDefault()....................................................174
Управление памятью на уровне приложения........................................176
Адресное пространство Windows..............................................176
Используйте библиотеки времени выполнения!....................................177
Миф о дурной славе большой модели памяти.....................................178
Миф соответствия.....................................................179
А как же операторы new и 'delete? . . л........................................179
Подразмещение .....................................................179
Совместное использование памяти...........................................180
Используйте отладочную версию модуля KERNEL..................................181
Глава 3. Запуск процесса: модули и задачи...................................183
Модули..........................................................184
Отладка в условиях совместного использования кода ..................................186
Многочисленные экземпляры и модели памяти Windows................................ 186
Логические и физические адреса..............................................188
Задачи.............................................................193
От файла к процессу за 28 легких шагов.........................................197
LoadModule..........................................................199
Вспомогательные функции, вызываемые LoadModule()..................................205
LMAlreadyLoaded() ...................................................205
LMLoadExeFile() ...................................................207
LoadExeHeader().....................................................207
LMCheckHeader().....................................................214
OpenApplEnv()......................................................215
CreateTaskO........................................................215
BuildPDBO........................................................218
LMRamNMods()................................................... 218
LMImports()........................................................220
LMSegs().......................'.........................-..........221
LMLetsGoO........................................................222
StartModule().......................................................223
StartTask()........................................................224
StartLibrary().......................................................226
CloseApplEnv()......................................................227
LMCleanUp().......................................................228
Загрузка второго экземпляра EXE или DLL........................................229
LMPrevInstanceO.....................................................229
Код приложения, выполняющий начальные действия при запуске...........................231
Код запуска ЕХЕ-файлов Windows...........................................231
Код запуска Windows DLL................................................232
InitTask().......................................,..................232
InitApp()..........................................................235
Завершение приложения...................................................237
ExitCallO..........................................................238
AppExit()..........................................................241
ModuleUnload().......................................................243
FreeModule() и FreeLibraryO...............................................244
DelModuleO........................................................245
А как же программы Win32s?................................................245
ExecPE()..........................................................246
Самозагружающиеся Windows-приложения........................................247
BootAppl().........................................................249
LoadApplSegment()....................................................249
Резюме.............................................................250
Глава 4. Система управления окнами........................................251
Классы окон..........................................................252
Формат структуры WNDCLASS.............................................254
Регистрация класса......................................................255
RegisterClass().......................................................255
GetClassPtrO........................................................258
GetClassPtrAsm().....................................................259
Windows и структура данных WND.............................................260
Стили окон .......«..............................................263
Иерархия окон: отношения предок/потомок/сосед....................................263
Владение окнами в Windows ..........................,......................264
Создание окна.........................................................265
CreateWindow()......................................................265
CreateWindowEx().....................................................266
Управление окнами......................................................274
ShowWindow()..............................,.........................275
MoveWindow().......................................................278
SetWindowPos()..................................................... .279
API-функция DeferWindowPos()...............................................280
BeginDeferWindowPosO..................................................281
Defer WindowPos().....................................................282
EndDeferWindowPos()...................................................282
Фокус окна...........................................................284
SetFocusO.........................................................284
SendFocusMessages()...................................................286
Обработка сообщений ...................................................286
BeginPaint()........................................................286
EndPaint().........................................................289
DefWindowProc().....................................................289
DestroyWindowO.....................................................290
DestroyOwnedWindows().................................................294
SendDestroyMessages()..................................................295
FreeWindow().......................................................296
Резюме...........................'................................. .300
Глава 5. Интерфейс графических устройств (GDI)...............................301
Драйверы устройств GDI...................................................303
Объекты GDI..........................................................305
Контексты устройств (DC)..................................................306
Логическое устройство GDI..................................................310
Блок физического устройства GDI .............................................311
Псевдокод отдельных функций GDI.............................................312
Проверка правильности параметров ..........................................312
CreateDCQ.........................................................312
InternalCreateDC()....................................................315
GetLogO..........................................................318
ICreatePenO........................................................321
ICreatePenlndirectO....................................................321
MoveObject()........................................................322
CreateSolidBrushO.....................................................322
CreateBrush()........................................................323
ICreateBrushlndirectO...................................................323
ISelectObject().......................................................325
ISetPixel().........................................................328

Цена: 150руб.

Назад

Заказ

На главную страницу

Hosted by uCoz