Shlwapi dll windows те

Версии оболочки и Shlwapi DLL

В этом разделе описывается, как определить версию библиотек DLL оболочки, на котором работает приложение, и как выбрать целевое приложение для конкретной версии.

Номера версий DLL

Все элементы программирования, описанные в документации по оболочке, содержатся в двух библиотеках DLL: Shell32.dll и Shlwapi.dll. Из-за текущих улучшений различные версии этих библиотек DLL реализуют различные функции. В справочной документации по оболочке каждый программный элемент указывает минимальный поддерживаемый номер версии DLL. Этот номер версии указывает, что программный элемент реализован в этой версии и последующих версиях библиотеки DLL, если не указано иное. Если номер версии не указан, программный элемент реализуется во всех существующих версиях библиотеки DLL.

До выхода Windows XP в новых версиях Windows Internet Explorer иногда появились новые Shell32.dll и Shlwapi.dll версии. Начиная с Windows XP, эти библиотеки DLL больше не были предоставлены как распространяемые файлы за пределами новых версий Windows. В следующей таблице приведены различные версии DLL и способы их распространения датировано обратно в Microsoft Internet Explorer 3,0, Windows 95 и Microsoft Windows NT 4,0.

Shell32.dll версии 4,0 находится в исходных версиях Windows 95 и Microsoft Windows NT 4,0. Оболочка не была обновлена с выпуском Internet Explorer 3,0, поэтому Shell32.dll не имеет версии 4,70. Shell32.dll версии 4,71 и 4,72 были поставляются с соответствующими выпусками Internet Explorer, но они не обязательно были установлены (см. Примечание 1). Для выпусков, соответствующих Microsoft Internet Explorer 4,01 и Windows 98, Номера версий для Shell32.dll и Shlwapi.dll расходятся. В общем случае следует предположить, что библиотеки DLL имеют разные номера версий и проверяют каждый из них отдельно.

Shell32.dll

Version Платформа распространения
4,0 Windows 95 и Microsoft Windows NT 4,0
4,71 Microsoft Internet Explorer 4,0. См. примечание 1.
4,72 Internet Explorer 4,01 и Windows 98. См. примечание 1.
5.0 Windows 2000 и Windows Millennium Edition (Windows Me). См. Примечание 2.
6.0 Windows XP
6.0.1 Windows Vista
6.1 Windows 7

Shlwapi.dll

Version Платформа распространения
4,0 Windows 95 и Microsoft Windows NT 4,0
4,71 Internet Explorer 4,0. См. примечание 1.
4,72 Internet Explorer 4,01 и Windows 98. См. примечание 1.
4.7 Internet Explorer 3. x
5.0 Microsoft Internet Explorer 5 и Windows 98 SE. См. Примечание 2.
5.5 Microsoft Internet Explorer 5,5 и Windows Millennium Edition (Windows Me)
6.0 Windows XP и Windows Vista

Примечание 1. Все системы с Internet Explorer 4,0 или 4,01 имеют связанную версию Shlwapi.dll (4,71 или 4,72 соответственно). Однако для систем, предшествовавших Windows 98, Internet Explorer 4,0 и 4,01 можно установить с помощью среды или без нее, известной как Интегрированная оболочка. Если Internet Explorer был установлен с интегрированной оболочкой, также была установлена соответствующая версия Shell32.dll (4,71 или 4,72). Если Internet Explorer был установлен без интегрированной оболочки, Shell32.dll остается версией 4,0. Иными словами, наличие версии 4,71 или 4,72 Shlwapi.dll в системе не гарантирует, что Shell32.dll имеет тот же номер версии. Все системы Windows 98 имеют версию 4,72 Shell32.dll.

Примечание 2. Версия 5,0 Shlwapi.dll была распространена с Internet Explorer 5 и обнаружена во всех системах, где был установлен Internet Explorer 5, за исключением Windows 2000. Версия 5,0 Shell32.dll была изначально распространена с Windows 2000 и Windows Millennium Edition (Windows Me) вместе с Shlwapi.dllом версии 5,0.

Определение номера версии с помощью Дллжетверсион

Начиная с версии 4,71 библиотеки DLL оболочки, в других случаях, начали экспортировать дллжетверсион. Эта функция может быть вызвана приложением для определения версии библиотеки DLL, имеющейся в системе.

Библиотеки DLL не обязательно экспортируют дллжетверсион. Прежде чем пытаться использовать его, всегда проверяйте его.

Для версий Windows, предшествующих Windows 2000, дллжетверсион возвращает структуру дллверсионинфо , которая содержит основной и дополнительный номера версии, номер сборки и идентификатор платформы. Для систем Windows 2000 и более поздних версий дллжетверсион может возвращать структуру DLLVERSIONINFO2 . Помимо информации, предоставляемой через дллверсионинфо, DLLVERSIONINFO2 также предоставляет номер исправления, который определяет последний установленный пакет обновления, что обеспечивает более надежный способ сравнения номеров версий. Поскольку первый элемент DLLVERSIONINFO2 является структурой дллверсионинфо , более поздняя структура является обратно совместимой.

Использование Дллжетверсион

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

Неправильное использование LoadLibrary может представлять угрозу безопасности. Сведения о правильной загрузке библиотек DLL с разными версиями Windows см. в документации по LoadLibrary .

В следующем примере кода показано, как можно использовать GetVersion , чтобы проверить, имеет ли Shell32.dll версию 6,0 или более позднюю.

Версии проекта

Чтобы обеспечить совместимость приложения с различными целевыми версиями DLL-файла, в файлах заголовков есть макросы версии. Эти макросы используются для определения, исключения или переопределения определенных определений для различных версий библиотеки DLL. Подробное описание этих макросов см. в разделе Использование заголовков Windows .

Например, имя макроса _ Win32 _ IE обычно находится в более старых заголовках. Вы несете ответственность за определение макроса в виде шестнадцатеричного числа. Этот номер версии определяет целевую версию приложения, использующего библиотеку DLL. В следующей таблице показаны доступные номера версий и их воздействие на приложение.

Версия Описание
0x0200 Приложение совместимо с Shell32.dll версии 4,00 и более поздних версий. Приложение не может реализовывать функции, которые были добавлены после версии 4,00.
0x0300 Приложение совместимо с Shell32.dll версии 4,70 и более поздних версий. Приложение не может реализовывать функции, которые были добавлены после версии 4,70.
0x0400 Приложение совместимо с Shell32.dll версии 4,71 и более поздних версий. Приложение не может реализовывать функции, которые были добавлены после версии 4,71.
0x0401 Приложение совместимо с Shell32.dll версии 4,72 и более поздних версий. Приложение не может реализовывать функции, которые были добавлены после версии 4,72.
0x0500 Приложение совместимо с Shell32.dll и Shlwapi.dll версии 5,0 и более поздних версий. Приложение не может реализовывать функции, добавленные после Shell32.dll и Shlwapi.dll версии 5,0.
0x0501 Приложение совместимо с Shell32.dll и Shlwapi.dll версии 5,0 и более поздних версий. Приложение не может реализовывать функции, добавленные после Shell32.dll и Shlwapi.dll версии 5,0.
0x0600 Приложение совместимо с Shell32.dll и Shlwapi.dll версии 6,0 и более поздних версий. Приложение не может реализовывать функции, добавленные после Shell32.dll и Shlwapi.dll версии 6,0.

Если в проекте не определен макрос _ Win32 _ IE , он автоматически определяется как 0x0500. Чтобы определить другое значение, можно добавить следующий объект в директивы компилятора в файле make. Замените требуемый номер версии для 0x0400.

Другой способ — добавить строку, аналогичную приведенной ниже, в исходный код перед включением файлов заголовков оболочки. Замените требуемый номер версии для 0x0400.

Shell and Shlwapi DLL Versions

This section describes how to determine which version of the Shell DLLs your application is running on and how to target your application for a specific version.

DLL Version Numbers

All but a handful of the programming elements discussed in the Shell documentation are contained in two DLLs: Shell32.dll and Shlwapi.dll. Because of ongoing enhancements, different versions of these DLLs implement different features. Throughout the Shell reference documentation, each programming element specifies a minimum supported DLL version number. This version number indicates that the programming element is implemented in that version and subsequent versions of the DLL unless otherwise specified. If no version number is specified, the programming element is implemented in all existing versions of the DLL.

Before WindowsВ XP, new Shell32.dll and Shlwapi.dll versions were sometimes provided with new versions of Windows Internet Explorer. As of WindowsВ XP, those DLLs were no longer provided as redistributable files outside of new versions of Windows itself. The following table outlines the different DLL versions and how they were distributed dating back to Microsoft Internet ExplorerВ 3.0, WindowsВ 95, and Microsoft WindowsВ NTВ 4.0.

Shell32.dll version 4.0 is found in the original versions of WindowsВ 95 and Microsoft WindowsВ NTВ 4.0. The Shell was not updated with the Internet ExplorerВ 3.0 release, so Shell32.dll does not have a version 4.70. Shell32.dll versions 4.71 and 4.72 were shipped with the corresponding Internet Explorer releases, but they were not necessarily installed (see note 1). For releases subsequent to Microsoft Internet ExplorerВ 4.01 and WindowsВ 98, the version numbers for Shell32.dll and Shlwapi.dll diverge. In general, you should assume that the DLLs have different version numbers and test each one separately.

Shell32.dll

Version Distribution Platform
4.0 WindowsВ 95 and Microsoft WindowsВ NTВ 4.0
4.71 Microsoft Internet ExplorerВ 4.0. See note 1.
4.72 Internet ExplorerВ 4.01 and WindowsВ 98. See note 1.
5.0 WindowsВ 2000 and WindowsВ Millennium Edition (WindowsВ Me). See note 2.
6.0 WindowsВ XP
6.0.1 WindowsВ Vista
6.1 WindowsВ 7

Shlwapi.dll

Version Distribution Platform
4.0 WindowsВ 95 and Microsoft WindowsВ NTВ 4.0
4.71 Internet ExplorerВ 4.0. See note 1.
4.72 Internet ExplorerВ 4.01 and WindowsВ 98. See note 1.
4.7 Internet Explorer 3.x
5.0 Microsoft Internet ExplorerВ 5 and WindowsВ 98 SE. See note 2.
5.5 Microsoft Internet ExplorerВ 5.5 and WindowsВ Millennium Edition (WindowsВ Me)
6.0 WindowsВ XP and WindowsВ Vista

Note 1: All systems with Internet ExplorerВ 4.0 or 4.01 had the associated version of Shlwapi.dll (4.71 or 4.72, respectively). However, for systems prior to WindowsВ 98, Internet ExplorerВ 4.0 and 4.01 can be installed with or without what was known as the integrated Shell. If Internet Explorer was installed with the integrated Shell, the associated version of Shell32.dll (4.71 or 4.72) was also installed. If Internet Explorer was installed without the integrated Shell, Shell32.dll remained as version 4.0. In other words, the presence of version 4.71 or 4.72 of Shlwapi.dll on a system does not guarantee that Shell32.dll has the same version number. All WindowsВ 98 systems have version 4.72 of Shell32.dll.

Note 2: Version 5.0 of Shlwapi.dll was distributed with Internet ExplorerВ 5 and was found on all systems on which Internet ExplorerВ 5 was installed, with the exception of WindowsВ 2000. Version 5.0 of Shell32.dll was distributed natively with WindowsВ 2000 and WindowsВ Millennium Edition (WindowsВ Me), together with version 5.0 of Shlwapi.dll.

Using DllGetVersion to Determine the Version Number

Starting with version 4.71, the Shell DLLs, among others, began exporting DllGetVersion. This function can be called by an application to determine which DLL version is present on the system.

DLLs do not necessarily export DllGetVersion. Always test for it before attempting to use it.

For Windows versions earlier than WindowsВ 2000, DllGetVersion returns a DLLVERSIONINFO structure that contains the major and minor version numbers, the build number, and a platform ID. For WindowsВ 2000 and later systems, DllGetVersion might instead return a DLLVERSIONINFO2 structure. In addition to the information provided through DLLVERSIONINFO, DLLVERSIONINFO2also provides the hotfix number that identifies the latest installed service pack, which provides a more robust way to compare version numbers. Because the first member of DLLVERSIONINFO2 is a DLLVERSIONINFO structure, the later structure is backward-compatible.

Using DllGetVersion

The following sample function GetVersion loads a specified DLL and attempts to call its DllGetVersion function. If successful, it uses a macro to pack the major and minor version numbers from the DLLVERSIONINFO structure into a DWORD that is returned to the calling application. If the DLL does not export DllGetVersion, the function returns zero. With WindowsВ 2000 and later systems, you can modify the function to handle the possibility that DllGetVersion returns a DLLVERSIONINFO2 structure. If so, use the information in that DLLVERSIONINFO2 structure’s ullVersion member to compare versions, build numbers, and service pack releases. The MAKEDLLVERULL macro simplifies the task of comparing these values to those in ullVersion.

Using LoadLibrary incorrectly can pose security risks. Refer to the LoadLibrary documentation for information on how to correctly load DLLs with different versions of Windows.

The following code example illustrates how you can use GetVersion to test whether Shell32.dll is version 6.0 or later.

Project Versions

To ensure that your application is compatible with different targeted versions of a .dll file, version macros are present in the header files. These macros are used to define, exclude, or redefine certain definitions for different versions of the DLL. See Using the Windows Headers for an in-depth description of these macros.

For example, the macro name _WIN32_IE is commonly found in older headers. You are responsible for defining the macro as a hexadecimal number. This version number defines the target version of the application that is using the DLL. The following table shows the available version numbers and the effect each has on your application.

Version Description
0x0200 The application is compatible with Shell32.dll version 4.00 and later. The application cannot implement features that were added after version 4.00.
0x0300 The application is compatible with Shell32.dll version 4.70 and later. The application cannot implement features that were added after version 4.70.
0x0400 The application is compatible with Shell32.dll version 4.71 and later. The application cannot implement features that were added after version 4.71.
0x0401 The application is compatible with Shell32.dll version 4.72 and later. The application cannot implement features that were added after version 4.72.
0x0500 The application is compatible with Shell32.dll and Shlwapi.dll version 5.0 and later. The application cannot implement features that were added after version 5.0 of Shell32.dll and Shlwapi.dll.
0x0501 The application is compatible with Shell32.dll and Shlwapi.dll version 5.0 and later. The application cannot implement features that were added after version 5.0 of Shell32.dll and Shlwapi.dll.
0x0600 The application is compatible with Shell32.dll and Shlwapi.dll version 6.0 and later. The application cannot implement features that were added after version 6.0 of Shell32.dll and Shlwapi.dll.

If you do not define the _WIN32_IE macro in your project, it is automatically defined as 0x0500. To define a different value, you can add the following to the compiler directives in your make file; substitute the desired version number for 0x0400.

Another method is to add a line similar to the following in your source code before you include the Shell header files. Substitute the desired version number for 0x0400.

Читайте также:  Как сделать окно больше windows 10
Оцените статью