Файлы библиотеки Microsoft Windows
В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Операционная система Microsoft Windows поддерживает форму общих библиотек , известную как « библиотеки динамической компоновки загружается только одна копия », которые представляют собой библиотеки кода, которые могут использоваться несколькими процессами, в то время как в память . В этой статье представлен обзор основных библиотек, включенных в каждую современную установку Windows, на основе которых создается большинство приложений Windows.
Внутренние компоненты
[ редактировать ]HAL.DLL — это файл библиотеки режима ядра, и его нельзя использовать ни одной программой пользовательского режима. NTDLL.DLL используется только некоторыми программами, но он зависит от большинства библиотек Win32, используемых программами.
HAL.ETC
[ редактировать ]Windows Уровень абстракции оборудования (HAL) реализован в hal.dll . [ 1 ] HAL реализует ряд функций, которые по-разному реализуются на разных аппаратных платформах, что в данном контексте относится главным образом к набору микросхем . Другие компоненты операционной системы могут затем вызывать эти функции одинаковым образом на всех платформах, независимо от фактической реализации.
Например, реакция на прерывание на машине с усовершенствованным программируемым контроллером прерываний (APIC) сильно отличается от реакции на машину без него. HAL предоставляет для этой цели единую функцию, которая работает со всеми видами прерываний различных наборов микросхем, так что другим компонентам не нужно учитывать различия.
HAL загружается в адресное пространство ядра и работает в режиме ядра, поэтому подпрограммы в HAL не могут вызываться приложениями напрямую, и никакие API-интерфейсы пользовательского режима не соответствуют напрямую подпрограммам HAL. Вместо этого HAL предоставляет услуги в первую очередь исполнительной системе Windows и ядру, а также драйверам устройств в режиме ядра. Хотя драйверы для большинства аппаратных средств содержатся в других файлах, обычно типа .sys , несколько основных драйверов скомпилированы в hal.dll .
Драйверы устройств режима ядра для устройств на шинах, таких как PCI и PCI Express, напрямую вызывают процедуры в HAL для доступа к портам ввода-вывода и регистрам своих устройств. Драйверы используют процедуры HAL, поскольку на разных платформах могут потребоваться разные реализации этих операций. HAL реализует операции соответствующим образом для каждой платформы, поэтому один и тот же исполняемый файл драйвера можно использовать на всех платформах, использующих одну и ту же архитектуру ЦП , а исходный файл драйвера можно переносить на все архитектуры.
В системах x86 до Windows 8 на установочном носителе имеется несколько разных файлов HAL. Процедура установки Windows определяет, какие из них подходят для текущей платформы, и копирует их на жесткий диск, переименовывая в hal.dll при необходимости . Среди критериев этого выбора: наличие ACPI -совместимого BIOS, наличие APIC , а также наличие или отсутствие нескольких процессоров. (Несколько ядер многоядерного ЦП и даже «логические процессоры», реализованные ЦП с гиперпоточностью , для этой цели считаются «процессорами».) На платформах x86-64 и Itanium существует только один возможный файл hal.dll. для каждой архитектуры ЦП. В Windows 8 и более поздних версиях версия x86 также имеет только один HAL.
HAL объединен (или статически связан) с ntoskrnl.exe. [ 2 ] начиная с версии 2004 Windows 10, а dll служит только заглушкой для обратной совместимости.
NTDLL.DLL
[ редактировать ]Windows NTDLL.DLL экспортирует собственный API . Native API — это интерфейс, используемый компонентами пользовательского режима операционной системы, который должен работать без поддержки со стороны Win32 или других подсистем API. Большая часть этого API реализована в NTDLL.DLL и в верхней части ntoskrnl.exe (и его вариантов), а большинство экспортируемых символов в этих библиотеках имеют префикс Nt , например NtDisplayString . Собственные API также используются для реализации многих «API ядра» или «базовых API», экспортируемых KERNEL32.DLL. [ 3 ] [ 4 ] [ 5 ] Подавляющее большинство приложений Windows не вызывают NTDLL.DLL напрямую. [ 6 ]
Говорят, что приложения, напрямую связанные с этой библиотекой, используют собственную подсистему ; Основная причина их существования — выполнение задач, которые должны выполняться на ранних этапах загрузки системы, прежде чем подсистема 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). [ 4 ] получать свои аргументы командной строки через указатель на структуру в памяти, управлять своей собственной памятью с помощью API кучи Rtl (который API-интерфейсы кучи Win32 являются всего лишь оболочками - никакой реальной разницы) и возвращать выполнение с помощью вызова RtlExitUserProcess (в отличие от ExitProcess ). Общая библиотека, связанная с собственными приложениями, — это nt.lib, которая содержит код запуска для собственных приложений, аналогично тому, как среда выполнения C предоставляет код запуска для приложений Win32. [ 7 ]
Хотя большая часть API недокументирована, собственные приложения можно создавать с помощью Windows Driver Development Kit ; Многие поставщики антивирусного программного обеспечения и других служебных программ включают в свои продукты собственные приложения, обычно для выполнения некоторых задач во время загрузки, которые невозможно выполнить в пользовательском пространстве . [ нужна ссылка ]
Win32 API
[ редактировать ]Каждая из библиотек в этом разделе реализует различные подмножества Win32 API.
ЯДРО32.DLL
[ редактировать ]KERNEL32.DLL предоставляет приложениям большинство базовых API-интерфейсов Win32, таких как управление памятью , ввода-вывода (I/O) операции , создание процессов и потоков , а также функции синхронизации. Многие из них реализованы в KERNEL32.DLL путем вызова соответствующих функций в собственном API , предоставляемом NTDLL.DLL. [ 8 ] [ не удалось пройти проверку ]
GDI32.DLL
[ редактировать ]GDI32.DLL экспортирует функции интерфейса графических устройств (GDI) , которые выполняют примитивные функции рисования для вывода на видеодисплеи и принтеры. Он используется, например, в версии Paint для XP. Приложения вызывают функции GDI напрямую для выполнения низкоуровневого рисования (линия, прямоугольник, эллипс), вывода текста, управления шрифтами и подобных функций. [ 8 ] [ 9 ]
Первоначально GDI поддерживал 16- и 256-цветные EGA / VGA видеокарты и монохромные принтеры. Функциональность расширялась с годами и теперь включает поддержку таких вещей, как шрифты TrueType , альфа-каналы и несколько мониторов . [ 10 ]
ПОЛЬЗОВАТЕЛЬ32.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 диалога общих элементов». [ 11 ]
WS2_32.DLL
[ редактировать ]WS2_32.DLL реализует Winsock API, который предоставляет сетевые функции TCP/IP и обеспечивает частичную, нарушенную совместимость с другими сетевыми API. wsock.dll и wsock32.dll — более старые версии, совместимые с Win3.11 и Win95.
ADVAPI32.DLL
[ редактировать ]ADVAPI32.DLL , расширенная библиотека базового API Windows 32, [ 12 ] предоставляет вызовы безопасности и функции для управления реестром Windows .
NETAPI32.DLL
[ редактировать ]NETAPI32.DLL предоставляет функции для запроса и управления сетевыми интерфейсами.
OLE32.DLL
[ редактировать ]OLE32.DLL предоставляет объектную модель компонентов , а также связывание и внедрение объектов .
Другие API
[ редактировать ]SHSCRAP.DLL
[ редактировать ]SHSCRAP.DLL является частью механизма связывания и внедрения объектов (OLE) . Он реализует поддержку файлов отходов оболочки , которые автоматически создаются при перетаскивании выбранного содержимого из приложения с поддержкой OLE в окно проводника или на рабочий стол. [ 13 ] но вы также можете использовать Object Packager для их создания. Затем их можно перетащить в другое приложение с поддержкой OLE.
Эта функция была удалена из Windows Vista (и, следовательно, из более поздних версий) для повышения безопасности и избавления операционной системы от обычно неиспользуемых функций. [ 14 ] Файлы отходов (.shs) используются вирусами, поскольку они могут содержать самые разные файлы (включая исполняемый код), а расширение файла не отображается, даже если отключен параметр «Скрыть расширения файлов из известных типов файлов». [ 15 ] Функциональность можно восстановить, скопировав записи реестра и DLL из системы Windows XP . [ 16 ]
WINMM.DLL
[ редактировать ]WINMM.DLL обеспечивает доступ к исходному аудио API WinMM .
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 по 12.0 использовали библиотеки DLL с разными именами для каждой версии (MSVCR20.DLL, MSVCR70.DLL, MSVCR71.DLL, MSVCP110.DLL и т. д.). Приложениям необходимо установить соответствующую версию, [ 17 ] и Microsoft предлагает для этой цели распространяемые пакеты Visual C++ , хотя Windows обычно поставляется с уже установленной одной версией.
Эта библиотека времени выполнения используется программами, написанными на Visual C++ и некоторыми другими компиляторами (например, MinGW ). Некоторые компиляторы имеют свои собственные библиотеки времени выполнения.
В версии 14.0 ( Visual Studio 2015 ) большая часть среды выполнения C/C++ была перенесена в новую DLL, UCRTBASE.DLL, которая близко соответствует C99 [1] . Universal C Run Time ( UCRT ), начиная с Windows 10, становится составной частью Windows [2] , поэтому каждый компилятор (не MS, например GCC или Clang / LLVM ) может компоноваться с UCRT [3] . Однако программы C/C++, использующие UCRTBASE.DLL, вынуждены компоноваться с другой новой DLL — VCRuntime. В версии 14.0 это был VCRUNTIME140.DLL. [ 18 ] Имя может измениться в будущих версиях, но в версии 17.0 этого не произошло.
Исходный код библиотек времени выполнения включен в Visual C++. [ 19 ] для справки и отладки (например, в C:\Program Files\Microsoft Visual Studio 11.0\VC\crt\src
).
Другие библиотеки времени выполнения
[ редактировать ]- ATL*.DLL – библиотека активных шаблонов
- MFC*.DLL — классы Microsoft Foundation
- MSVBVM60.DLL — Visual Basic виртуальная машина 6.0 (для программ Visual Basic.NET вместо этого требуется .NET Framework )
- VCOMP*.DLL Microsoft OpenMP — среда выполнения
- VCRUNTIME*.DLL — среда выполнения Microsoft Visual C++ для 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 Common Object Runtime Library). [ 20 ] ) и так называемые сборки (например, System.Windows.Forms.dll ).
См. также
[ редактировать ]- Архитектура Windows NT
- Процесс запуска Windows NT
- Список компонентов Microsoft Windows
- Windows API
- Динамически подключаемая библиотека
Ссылки
[ редактировать ]- ^ Бланден, Билл (2009). Руткитный арсенал: побег и уклонение в темных углах системы . Джонс и Бартлетт Обучение. п. 101. ИСБН 978-1-59822-061-2 .
- ^ @PetrBenes (25 июля 2019 г.). «Я что-то пропустил? Рутины…» ( Твит ) – через Твиттер .
- ^ Эйлам, Эльдад (2011). Реверс: секреты реверс-инжиниринга . Джон Уайли и сыновья. стр. 68–69. ISBN 978-1-118-07976-8 .
- ^ Jump up to: а б «Внутри собственных приложений Windows» . Майкрософт . Архивировано из оригинала 12 сентября 2010 г. Проверено 14 декабря 2011 г.
- ^ Руссинович, Марк А. и Соломон, Дэвид А. (2009). Внутреннее устройство Windows® . О'Рейли Медиа. п. 136. ИСБН 978-0-7356-3796-2 .
- ^ Марсо, Карла и Стиллерман, Мэтт (2006). «Модульные профили поведения в системах с разделяемыми библиотеками» . В Ненг, Пэн; и др. (ред.). Информационная и коммуникационная безопасность: 8-я Международная конференция ICICS 2006 – Роли, Северная Каролина, США, 4–7 декабря 2006 г. – материалы . Спрингер. п. 371. ИСБН 978-3-540-49496-6 .
- ^ «Внутри собственных приложений» . Архивировано из оригинала 23 октября 2010 г. Проверено 26 августа 2017 г.
- ^ Jump up to: а б Центр разработчиков Visual Studio: определение функций в библиотеках DLL
- ^ См. также документацию по Wine реализации GDI32.DLL : Wine API: gdi32.dll.
- ^ Юань, Фэн (2001). Графическое программирование для Windows: Win32 GDI и DirectDraw . Прентис Холл Профессионал. п. 71 . ISBN 978-0-13-086985-2 .
- ^ «Библиотека общих диалоговых окон (Windows)» . msdn.microsoft.com . Проверено 25 октября 2017 г.
- ^ Майкрософт . «Как работает RPC: удаленный вызов процедур (RPC) | Microsoft Learn» . Проверено 11 сентября 2023 г.
- ^ «WD: Что такое файл Scrap (.shs)?» . База знаний Майкрософт .
- ^ Рэймонд Чен. «Конфиденциальная информация о Windows: утилизация остатков» . Проверено 14 декабря 2011 г.
- ^ «ВБС.Стадии.А» . Симантек . Архивировано из оригинала 10 ноября 2006 года.
- ^ «Как открыть файлы SHS» . Проверено 14 декабря 2011 г.
- ^ «Библиотеки времени выполнения C» . Архивировано из оригинала 7 декабря 2011 г. Проверено 14 декабря 2011 г.
- ^ «Двоичная совместимость C++ 2015-2022» .
- ^ «Исходный код для функций времени выполнения C» .
- ^ «Что означает «ms» в «mscorlib» — подсказка: это не «Microsoft» » .
Внешние ссылки
[ редактировать ]- Список вызовов API (USER32.DLL). Архивировано 21 ноября 2015 г. на Wayback Machine . Советы по использованию клиентской библиотеки пользовательского API с Visual Basic.
- Список вызовов API (KERNEL32.DLL). Архивировано 21 ноября 2015 г. на Wayback Machine . Советы по использованию клиентской библиотеки API ядра с Visual Basic.
- Справочник по собственному API
- Неофициальный веб-сайт, на котором документировано большинство методов Native API.
- Получение базового адреса KERNEL32.DLL