Файлы библиотеки Microsoft Windows - Microsoft Windows library files

В Майкрософт Виндоус операционная система поддерживает форму общие библиотеки известный как "библиотеки с динамической компоновкой ", которые представляют собой библиотеки кода, которые могут использоваться несколькими процессами, пока только одна копия загружается в объем памяти. В этой статье представлен обзор основных библиотек, которые включены в каждую современную установку Windows, поверх которых построено большинство приложений Windows.

Внутренние компоненты

HAL.DLL - это файл библиотеки режима ядра, и он не может использоваться какой-либо программой пользовательского режима. NTDLL.DLL используется только некоторыми программами, но это зависимость большинства библиотек Win32, используемых программами.

HAL.DLL

Окна Уровень аппаратной абстракции (HAL) реализован в hal.dll.[1] 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, а также наличие и включение нескольких процессоров. (Несколько ядер многоядерный процессор, и даже «логические процессоры», реализованные Hyper Threading ЦП, для этой цели все считаются "процессорами".) x86-64 и Itanium платформы есть только одна возможная hal.dll для каждой архитектуры ЦП.

NTDLL.DLL

NTDLL.DLL экспортирует Windows Собственный API. Собственный API - это интерфейс, используемый компонентами пользовательского режима операционной системы, которые должны работать без поддержки со стороны Win32 или другие подсистемы API. Большая часть этого API реализована в NTDLL.DLL и на верхнем краю ntoskrnl.exe (и его варианты), и большинство экспортируемых символов в этих библиотеках имеют префикс Nt, Например NtDisplayString. Собственные API-интерфейсы также используются для реализации многих «API-интерфейсов ядра» или «базовых API-интерфейсов», экспортируемых KERNEL32.DLL.[2][3][4] Подавляющее большинство приложений Windows не вызывают NTDLL.DLL напрямую.[5]

Приложения, которые связаны прямо против этой библиотеки, как говорят, используют собственная подсистема; основная причина их существования - выполнение задач, которые должны выполняться в начале последовательности загрузки системы, прежде чем подсистема 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),[3] получать свои аргументы командной строки через указатель на структуру в памяти, управлять собственной памятью с помощью RTL heap API (API кучи Win32 являются просто оболочками - никакой реальной разницы в этом нет) и возвращают выполнение с вызовом NtTerminateProcess (в отличие от ExitProcess). Общей библиотекой, связанной с собственными приложениями, является nt.lib, которая содержит код запуска для собственных приложений, аналогично тому, как среда выполнения C предоставляет код запуска для приложений Win32.[6]

Хотя большая часть API не документирована, собственные приложения можно создавать с помощью Комплект для разработки драйверов Windows; много антивирусная программа и другие поставщики служебного программного обеспечения включают собственные приложения в свои продукты, как правило, для выполнения некоторых задач во время загрузки, которые невозможно выполнить в пространство пользователя.[нужна цитата ]

Win32 API

Каждая из библиотек в этом разделе реализует различные подмножества Win32 API.

KERNEL32.DLL

KERNEL32.DLL предоставляет приложениям большинство базовых API Win32, таких как управление памятью, ввод / вывод (I / O) операции, обработать и нить функции создания и синхронизации. Многие из них реализованы в KERNEL32.DLL путем вызова соответствующих функций в собственный API, предоставленный NTDLL.DLL.[7][неудачная проверка ]

GDI32.DLL

GDI32.DLL экспорт Интерфейс графического устройства (GDI) функции, которые выполняют примитивные функции рисования для вывода на видеодисплеи и принтеры. Он используется, например, в версии Paint для XP. Приложения вызывают функции GDI напрямую для выполнения низкоуровневого рисования (линия, прямоугольник, эллипс), вывода текста, управления шрифтами и подобных функций.[7][8]

Изначально GDI поддерживал 16 и 256 цветов. EGA /VGA карты и монохромный принтеры. Функциональность расширилась с годами и теперь включает поддержку таких вещей, как Шрифты TrueType, альфа-каналы, и несколько мониторов.[9]

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 диалога общих элементов».[10]

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

OLE32.DLL предоставляет Компонентная объектная модель, а также Связывание и внедрение объектов.

Другие API

SHSCRAP.DLL

SHSCRAP.DLL является частью Связывание и внедрение объектов (OLE) механизм. Он реализует поддержку файлы отходов оболочки, которые автоматически создаются, когда вы перетаскиваете выбранный контент из OLE-совместимого приложения в окно проводника или рабочий стол,[11] но вы также можете использовать Упаковщик объектов создать их. Затем их можно перетащить в другое приложение с поддержкой OLE.

Эта функция была удалена из Windows Vista (и, следовательно, более поздних версий), чтобы повысить безопасность и избавить операционную систему от обычно неиспользуемых функций.[12] Файлы записки (.shs) использовались вирусами, поскольку они могут содержать широкий спектр файлов (включая исполняемый код), а расширение файла не отображается, даже если параметр «Скрывать расширения файлов из известных типов файлов» отключен.[13] Функциональность можно восстановить, скопировав записи реестра и DLL из Windows XP система.[14]

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 ад потому что многие установщики не смогли сравнить версию библиотеки с установленной версией перед ее заменой.

Версии MSVC до 4.0 и от 7.0 до 13.0 использовали разные имена DLL для каждой версии (MSVCR20.DLL, MSVCR70.DLL, MSVCR71.DLL, MSVCP110.DLL и т. Д.). Приложения необходимы для установки соответствующей версии,[15] и Microsoft предлагает Распространяемый компонент Visual C ++ пакеты для этой цели, хотя Windows обычно поставляется с уже установленной одной версией.

В версии 14.0 большая часть среды выполнения C / C ++ была перенесена в новую DLL, UCRTBASE.DLL. Однако программы C / C ++, использующие UCRTBASE.DLL, вынуждены связываться с другой новой DLL, VCRuntime, имя которой продолжает изменяться с каждой версией MSVC (например, VCRUNTIME140.DLL).

Исходный код для библиотек времени выполнения включен в Visual C ++[16] для справки и отладки (например, в C: Программные файлы Microsoft Visual Studio 11.0VCcrtsrc). Теперь код доступен на GitHub.[17]

Эта библиотека времени выполнения используется программами, написанными на Visual C ++ и некоторых других компиляторах (например, MinGW ). Некоторые компиляторы имеют свои собственные библиотеки времени выполнения.

Другие библиотеки времени выполнения

  • ATL * .DLLБиблиотека активных шаблонов
  • MFC * .DLLКлассы Microsoft Foundation
  • MSVBVM60.DLLVisual Basic 6.0 Виртуальная машина (Visual Basic.NET программы требуют .NET Framework вместо)
  • VCOMP * .DLL - Microsoft OpenMP время выполнения
  • VCRUNTIME * .DLL - Microsoft VCRuntime, для MSVC 14.0+
  • MSVCIRT.DLL - Библиотека Microsoft C ++, содержит устаревшие классы C ++ из <iostream.h> (обратите внимание на расширение файла) для MS C 9 и 10 (MSVC 2.x, 4.x) (тогда черновик стандартной библиотеки C ++ был интегрирован в MSVCRT.DLL. Он был разделен с выпуском Visual C ++ 5.0)

Библиотеки .NET Framework

Программы, написанные на C #, Visual Basic.NET, C ++ / CLI и другие языки .NET требуют .NET Framework. В нем много библиотек (одна из них mscorlib.dll - Многоязычная стандартная библиотека времени выполнения общих объектов, ранее известная как библиотека времени выполнения общих объектов Microsoft[18]) и так называемые сборки (например, System.Windows.Forms.dll).

Смотрите также

использованная литература

  1. ^ Бланден, Билл (2009). Арсенал руткитов: побег и уклонение в темных углах системы. Джонс и Бартлетт Обучение. п. 101. ISBN  978-1-59822-061-2.
  2. ^ Эйлам, Эльдад (2011). Реверсирование: секреты обратного инжиниринга. Джон Вили и сыновья. С. 68–69. ISBN  978-1-118-07976-8.
  3. ^ а б «Внутри родных приложений Windows». Архивировано из оригинал на 2010-09-12. Получено 2011-12-14.
  4. ^ Руссинович, Марк А. и Соломон, Дэвид А. (2009). Внутреннее устройство Windows®. O'Reilly Media. п. 136. ISBN  978-0-7356-3796-2.
  5. ^ Марсо, Карла и Стиллерман, Мэтт (2006). «Модульные профили поведения в системах с разделяемыми библиотеками». В Нэн, Пэн; и другие. (ред.). Информационная и коммуникационная безопасность: 8-я Международная конференция, ICICS 2006 - Роли, Северная Каролина, США, 4–7 декабря 2006 г. - доклады. Springer. п. 371. ISBN  978-3-540-49496-6.
  6. ^ https://technet.microsoft.com/en-us/sysinternals/bb897447.aspx
  7. ^ а б Центр разработчиков Visual Studio: определение функций в библиотеках DLL
  8. ^ См. Также документацию по Вино реализация GDI32.DLL: Wine API: gdi32.dll
  9. ^ Юань, Фэн (2001). Программирование графики Windows: Win32 GDI и DirectDraw. Prentice Hall Professional. п.71. ISBN  978-0-13-086985-2.
  10. ^ «Библиотека общих диалоговых окон (Windows)». msdn.microsoft.com. Получено 2017-10-25.
  11. ^ "WD: Что такое Scrap-файл (.shs)?". База знаний Microsoft.
  12. ^ Раймонд Чен. «Конфиденциальная информация Windows: избавляемся от остатков». Получено 2011-12-14.
  13. ^ "VBS.Stages.A". symantec.com.
  14. ^ «Как открыть файлы SHS». Получено 2011-12-14.
  15. ^ "Библиотеки времени выполнения C". Получено 2011-12-14.
  16. ^ http://msdn.microsoft.com/en-us/library/aa296413(v=vs.60).aspx
  17. ^ Реализация стандартной библиотеки C ++ в MSVC .: microsoft / STL, Microsoft, 21.09.2019, получено 2019-09-21
  18. ^ http://weblogs.asp.net/mreynolds/archive/2004/01/31/65551.aspx

внешние ссылки