Математика | ||||
Внутренний мир-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руб. |
||||