- Игровые форумы
- Файлы библиотеки Microsoft Windows — Microsoft Windows library files
- СОДЕРЖАНИЕ
- Внутренние компоненты
- HAL.DLL
- NTDLL.DLL
- Win32 API
- KERNEL32.DLL
- GDI32.DLL
- USER32.DLL
- COMCTL32.DLL
- COMDLG32.DLL
- WS2_32.DLL
- ADVAPI32.DLL
- NETAPI32.DLL
- OLE32.DLL
- Другие API
- SHSCRAP.DLL
- WINMM.DLL
- IMM32.DLL
- Библиотеки времени выполнения
- MSVCRT.DLL, MSVCP * .DLL и CRTDLL.DLL
Игровые форумы
Говорить будем о 32-битных системах — они пока что всё-таки более распространённые. Хочу сразу предупредить, что мы с вами сейчас не будем рассматривать, как именно устроены внутри системные DLL-библиотеки и чем именно (количественно и качественно) они отличаются от остальных DLL’ек. Как правило, для продвинутого пользователя эти знания имеют не слишком большую практическую ценность, и, кроме того, для того, чтобы подробно рассказать обо всём этом, придётся очень сильно углубляться в дебри работы операционной системы, а это значит, что, скорее всего, при таком раскладе места в статье на сами DLL’ки уже, увы и ах, совершенно не останется.
Системные библиотеки лежат в системной папке — на то они и системные. В старых версиях Windows (9x и ME) они помещались в поддиректории «System» папки с системой, в ОС линейки Windows NT они находятся в папке «System32». Лучше без надобности в эти папки не залезать, но если вы встретите их где-то в другом месте, то лучше сразу их удалить, потому что это, скорее всего, будут какие-нибудь трояны. Даже если это и копии системных библиотек, всё равно при их удалении из не системных папок ничего плохого не произойдёт.
Для чего же пользователю знать назначение той или иной библиотеки? В самом простом случае — если система выдаст Blue Screen of Death (BSOD), чтобы можно было хотя бы примерно представить, с чем именно он связан. Но на самом деле здесь вопрос не только в сугубо практическом применении таких знаний — лично я считаю, что для того, чтобы быть продвинутым пользователем, просто необходимо знать подобные вещи.
Давайте перейдём к DLL’кам.
Hal.dll
Эта DLL — сердце операционной системы. Расшифровывается её название как Hardware Abstraction Layer — уровень аппаратной абстракции. Именно благодаря наличию такого уровня Windows имеет возможность работы на разных аппаратных платформах. В зависимости от того, какая именно аппаратная платформа наличествует на вашем компьютере, вместо hal.dll может присутствовать один из следующих файлов: Halapic.dll, Halmps.dll, Halacpi.dll, Halaacpi.dll, Halmacpi.dll.
Kernel32.dll
Следующая после уровня аппаратной абстракции библиотека из состава ядра операционной системы. О том, что без этой библиотеки работа ядра ОС невозможна, говорит уже само её название. Kernel32.dll отвечает за обработку памяти, операции ввода-вывода и прерывания — то есть, за все основные действия операционной системы с приложениями.
Ntdll.dll
Эта библиотека — своеобразный мост между теми библиотеками, которые работают в ядре операционной системы, и библиотеками, работающими в пользовательском режиме. Эти два режима имеют ряд существенных отличий, и без существования этой DLL’ки было бы невозможно применять многие старые приложения в новых версиях Windows — во многом совместимость между разными версиями ОС держится именно на ней.
Gdi32.dll
Немаловажная часть операционной системы Windows — это графический интерфейс пользователя, который в самых глубоких своих основах зиждется именно на этой DLL-библиотеке. Gdi32.dll предоставляет приложениям и другим библиотекам графические примитивы, которые используются для отрисовки окон и разных оконных элементов управления.
User32.dll, Comctl32.dll, Comdlg32.dll
Эти библиотеки реализуют внутри себя разные готовые элементы управления, которые потом используют для создания графического интерфейса пользовательские приложения. Собственно, в основном, именно эта тройка библиотек отвечает за тот внешний вид операционной системы, к которому вы привыкли.
Advapi32.dll
Думаю, понятие системного реестра знакомо каждому читателю «Компьютерных вестей». Вполне естественен тот факт, что ОС Windows предоставляет пользовательским приложениям специальные функции доступа к реестру, которые как раз и вынесены в Advapi32.dll.
Mpr.dll
Работа с сетью — тоже прерогатива операционной системы. Собственно, именно для работы с сетью и нужна mpr.dll. Взаимодействие с другими компьютерами в локальной сети, поддержка работы с сетевыми устройствами, поддержка соединения — вот далеко не полный список того, что ложится на плечи этой библиотеки.
Msvcrt.dll
Эту библиотеку можно тоже отнести к разряду системных, потому что без неё не запустятся многие стандартные приложения из состава Windows. Она несёт в себе ряд вспомогательных функций для работы с памятью, устройствами ввода и вывода, математическими функциями. Эта DLL должна быть хорошо знакома программистам, работавшим с Visual C++.
Файлы библиотеки Microsoft Windows — Microsoft Windows library files
Microsoft Windows операционная система поддерживает форму разделяемых библиотек , известных как « динамически подключаемых библиотек », которые являются библиотеки кода , которые могут быть использованы несколькими процессами , а только одна копия загружается в память . В этой статье представлен обзор основных библиотек, которые включены в каждую современную установку Windows, на основе которых построено большинство приложений Windows.
СОДЕРЖАНИЕ
Внутренние компоненты
HAL.DLL — это файл библиотеки режима ядра, и он не может использоваться никакими программами пользовательского режима. NTDLL.DLL используется только некоторыми программами, но это зависимость большинства библиотек Win32, используемых программами.
HAL.DLL
Уровень абстракции оборудования Windows (HAL) реализован в hal.dll . HAL реализует ряд функций, которые по-разному реализуются на разных аппаратных платформах, которые в данном контексте в основном относятся к набору микросхем . Затем другие компоненты операционной системы могут вызывать эти функции одинаково на всех платформах, независимо от фактической реализации.
Например, реакция на прерывание на машине с усовершенствованным программируемым контроллером прерываний (APIC) сильно отличается от реакции на нее без него. Для этой цели HAL предоставляет единую функцию, которая работает со всеми видами прерываний от различных наборов микросхем, так что другие компоненты не должны беспокоиться о различиях.
HAL загружается в адресное пространство ядра и работает в режиме ядра, поэтому подпрограммы в HAL не могут быть вызваны приложениями напрямую, и никакие API пользовательского режима не соответствуют непосредственно подпрограммам HAL. Вместо этого HAL предоставляет услуги главным образом исполнительной системе и ядру Windows, а также драйверам устройств режима ядра. Хотя драйверы для большинства аппаратных средств содержатся в других файлах, обычно в формате .sys , некоторые основные драйверы скомпилированы в hal.dll .
Драйверы устройств в режиме ядра для устройств на шинах, таких как PCI и PCI Express, напрямую вызывают процедуры в HAL для доступа к портам ввода-вывода и регистрам своих устройств. Драйверы используют подпрограммы HAL, потому что разные платформы могут требовать разных реализаций этих операций. HAL реализует операции соответствующим образом для каждой платформы, поэтому один и тот же исполняемый файл драйвера может использоваться на всех платформах с одинаковой архитектурой ЦП , а исходный файл драйвера может быть переносимым на все архитектуры.
В системах x86 на установочном носителе есть несколько разных файлов HAL. Процедура установки Windows определяет, какие из них подходят для текущей платформы, и копирует их на жесткий диск, при необходимости переименовывая в hal.dll . Среди критериев для этого выбора: наличие ACPI- совместимой BIOS, наличие APIC , а также наличие и включение нескольких процессоров. (Несколько ядер многоядерного ЦП и даже «логические процессоры», реализованные ЦП с гиперпоточностью , все считаются «процессорами» для этой цели.) На платформах x86-64 и Itanium существует только один возможный hal.dll для каждой архитектуры ЦП.
HAL объединяется (или статически связан) с ntoskrnl.exe, начиная с версии 2004 Windows 10, и dll служит только заглушкой для обратной совместимости.
NTDLL.DLL
NTDLL.DLL экспортирует Windows Native API . Собственный API — это интерфейс, используемый компонентами пользовательского режима операционной системы, которые должны работать без поддержки Win32 или других подсистем API. Большая часть этого API реализована в NTDLL.DLL и в верхней части ntoskrnl.exe (и его вариантов), и большинство экспортируемых символов в этих библиотеках имеют префикс Nt , например NtDisplayString . Собственные API-интерфейсы также используются для реализации многих «API-интерфейсов ядра» или «базовых API-интерфейсов», экспортируемых KERNEL32.DLL. Подавляющее большинство приложений Windows не вызывают NTDLL.DLL напрямую.
Говорят, что приложения, которые связаны напрямую с этой библиотекой, используют собственную подсистему ; основная причина их существования — выполнение задач, которые должны выполняться на ранней стадии загрузки системы, прежде чем подсистема Win32 станет доступной. Очевидным, но важным примером является создание процесса подсистемы Win32 csrss.exe . До того, как процесс csrss.exe существует, никакие процессы Win32 не могут быть созданы, поэтому процесс, который его создает (Smss.exe, «диспетчер сеансов»), должен использовать собственную подсистему. Сам csrss.exe является таким приложением.
Несмотря на расширение файла «.exe», собственные приложения не могут быть запущены пользователем (или любой программой в Win32 или других подсистемах). Примером может служить двоичный файл autochk.exe, который запускает chkdsk во время инициализации системы «синий экран». Другими яркими примерами являются службы, реализующие различные подсистемы, такие как csrss.exe .
В отличие от приложений Win32 , собственные приложения создают экземпляр в коде времени выполнения ядра ( ntoskrnl.exe ), поэтому у них должна быть другая точка входа ( NtProcessStartup , а не (w) (Win) MainCRTStartup, как в приложении Win32), получить их команду -строчные аргументы через указатель на структуру в памяти, управлять своей собственной памятью с помощью API кучи Rtl ( API кучи Win32 являются просто оболочками — никакой реальной разницы в этом нет) и возвращать выполнение с вызовом NtTerminateProcess (в отличие от в ExitProcess ). Общей библиотекой, связанной с собственными приложениями, является nt.lib, которая содержит код запуска для собственных приложений, аналогично тому, как среда выполнения C предоставляет код запуска для приложений Win32.
Хотя большая часть API не документирована, собственные приложения можно создавать с помощью Windows Driver Development Kit ; многие поставщики антивирусного программного обеспечения и других служебных программ включают собственные приложения в свои продукты, как правило, для выполнения некоторых задач во время загрузки, которые невозможно выполнить в пользовательском пространстве .
Win32 API
Каждая из библиотек в этом разделе реализует различные подмножества Win32 API.
KERNEL32.DLL
KERNEL32.DLL предоставляет приложениям большую часть базовых API Win32, таких как управление памятью , операции ввода / вывода , создание процессов и потоков , а также функции синхронизации. Многие из них реализованы в KERNEL32.DLL путем вызова соответствующих функций в собственном API , предоставляемом NTDLL.DLL.
GDI32.DLL
GDI32.DLL экспортирует функции интерфейса графического устройства (GDI), которые выполняют примитивные функции рисования для вывода на видеодисплеи и принтеры. Он используется, например, в версии Paint для XP. Приложения вызывают функции GDI напрямую для выполнения низкоуровневого рисования (линия, прямоугольник, эллипс), вывода текста, управления шрифтами и подобных функций.
Первоначально GDI поддерживается 16 и 256 цветов EGA / VGA дисплей карты и монохромные принтеры. С годами функциональность расширилась и теперь включает поддержку таких вещей, как шрифты TrueType , альфа-каналы и несколько мониторов .
USER32.DLL
USER32.DLL реализует компонент Windows USER, который создает и управляет стандартными элементами пользовательского интерфейса Windows, такими как рабочий стол, окна и меню. Таким образом, это позволяет программам реализовывать графический пользовательский интерфейс (GUI), который соответствует внешнему виду Windows. Программы вызывают функции из Windows USER для выполнения таких операций, как создание окон и управление ими, получение оконных сообщений (которые в основном представляют собой вводимые пользователем данные, такие как события мыши и клавиатуры, но также и уведомления от операционной системы), отображение текста в окне и отображение сообщений. коробки.
Многие функции в USER32.DLL вызывают функции GDI, экспортированные GDI32.DLL, для фактического рендеринга различных элементов пользовательского интерфейса. Некоторые типы программ также будут вызывать функции GDI напрямую для выполнения операций рисования нижнего уровня в окне, ранее созданном с помощью функций USER32.
COMCTL32.DLL
COMCTL32.DLL реализует широкий спектр стандартных элементов управления Windows, таких как диалоговые окна «Открыть файл», «Сохранить» и «Сохранить как», индикаторы выполнения и представления списков. Он вызывает функции из USER32.DLL и GDI32.DLL для создания и управления окнами для этих элементов пользовательского интерфейса, размещения в них различных графических элементов и сбора пользовательского ввода.
COMDLG32.DLL
COMDLG32.DLL , библиотека общих диалоговых окон, реализует широкий спектр диалоговых окон Windows, предназначенных для выполнения того, что Microsoft считает «общими прикладными задачами». Начиная с выпуска Windows Vista, Microsoft считает, что диалоговые окна «Открыть» и «Сохранить как», предоставляемые этой библиотекой, не рекомендуются и заменены «API диалога общих элементов».
WS2_32.DLL
WS2_32.DLL реализует Winsock API, который предоставляет сетевые функции TCP / IP и обеспечивает частичную несовместимость с другими сетевыми API. wsock.dll и wsock32.dll — это более старые версии для совместимости с Win3.11 и Win95.
ADVAPI32.DLL
ADVAPI32.DLL предоставляет вызовы безопасности и функции для управления реестром Windows .
NETAPI32.DLL
NETAPI32.DLL предоставляет функции для запросов и управления сетевыми интерфейсами.
OLE32.DLL
Другие API
SHSCRAP.DLL
SHSCRAP.DLL является частью механизма связывания и встраивания объектов (OLE) . Он реализует поддержку файлов записки оболочки , которые автоматически создаются при перетаскивании выбранного содержимого из приложения с поддержкой OLE в окно проводника или рабочий стол, но вы также можете использовать Object Packager для их создания. Затем их можно перетащить в другое приложение с поддержкой OLE.
Эта функция была удалена из Windows Vista (и, следовательно, более поздних версий), чтобы повысить безопасность и избавить операционную систему от обычно неиспользуемых функций. Файлы записки (.shs) использовались вирусами, поскольку они могут содержать широкий спектр файлов (включая исполняемый код), а расширение файла не отображается, даже если параметр «Скрывать расширения файлов из известных типов файлов» отключен. Функциональность можно восстановить, скопировав записи реестра и DLL из системы Windows XP .
WINMM.DLL
Winmm.dll предоставляет доступ к исходному WinMM аудио API.
IMM32.DLL
IMM32 отвечает за вызов и взаимодействие с редактором метода ввода .
Библиотеки времени выполнения
MSVCRT.DLL, MSVCP * .DLL и CRTDLL.DLL
MSVCRT.DLL — это стандартная библиотека C для компилятора Visual C ++ (MSVC) с версии 4.2 до 6.0. Он предоставляет программы, скомпилированные этими версиями MSVC, с большинством стандартных функций библиотеки C. К ним относятся манипуляции со строками, выделение памяти, вызовы ввода / вывода в стиле C и другие. MSVCP * .DLL — соответствующая библиотека C ++.
Он поставляется с версиями Windows, начиная с Windows 95 OSR2.5, для использования другими компонентами Windows; вместо этого более ранние версии поставлялись с библиотекой CRTDLL.DLL . В более старых версиях Windows программы, которые связаны с MSVCRT.DLL, должны были установить совместимую копию в папке System32, но это способствовало развитию DLL Hell, поскольку многие установщики не проверяли версию библиотеки на соответствие установленной версии перед ее заменой.
Версии MSVC до 4.0 и от 7.0 до 13.0 использовали разные имена DLL для каждой версии (MSVCR20.DLL, MSVCR70.DLL, MSVCR71.DLL, MSVCP110.DLL и т. Д.). Для установки соответствующей версии требуются приложения, и Microsoft предлагает для этой цели распространяемые пакеты Visual C ++ , хотя в Windows обычно уже установлена одна версия.
В версии 14.0 большая часть среды выполнения C / C ++ была перенесена в новую DLL, UCRTBASE.DLL. Однако программы C / C ++, использующие UCRTBASE.DLL, вынуждены связываться с другой новой DLL, VCRuntime, имя которой продолжает меняться с каждой версией MSVC (например, VCRUNTIME140.DLL).
Исходный код для библиотек времени выполнения включен в Visual C ++ для справки и отладки (например, в C:\Program Files\Microsoft Visual Studio 11.0\VC\crt\src ). Теперь код доступен на GitHub .
Эта библиотека времени выполнения используется программами, написанными на Visual C ++ и некоторых других компиляторах (например, MinGW ). Некоторые компиляторы имеют свои собственные библиотеки времени выполнения.