Ruby/Справочник/Windows::Library

Материал из Викиучебника — открытых книг для открытого мира

Класс Windows::Library[править]

(нет описания...)


Константы

DLL_PROCESS_ATTACH, DLL_PROCESS_DETACH, DLL_THREAD_ATTACH, DLL_THREAD_DETACH, DONT_RESOLVE_DLL_REFERENCES, DisableThreadLibraryCalls, FreeLibrary, FreeLibraryAndExitThread, GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, GET_MODULE_HANDLE_EX_FLAG_PIN, GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT, GetDllDirectory, GetModuleFileName, GetModuleHandle, GetModuleHandleEx, GetProcAddress, LOAD_IGNORE_CODE_AUTHZ_LEVEL, LOAD_LIBRARY_AS_DATAFILE, LOAD_WITH_ALTERED_SEARCH_PATH, LoadLibrary, LoadLibraryEx, LoadModule, SetDllDirectory

Методы объекта

DisableThreadLibraryCalls, FreeLibrary, GetDllDirectory, GetModuleFileName, GetModuleHandleEx, GetModuleHandle, GetProcAddress, LoadLibraryEx, LoadLibrary, LoadModule, SetDllDirectory

Windows::Library#DisableThreadLibraryCalls[править]


 DisableThreadLibraryCalls(hmodule)

(нет описания...)

Windows::Library#FreeLibrary[править]


 FreeLibrary(hmodule)

(нет описания...)

Windows::Library#GetDllDirectory[править]


 GetDllDirectory(length, buffer)

(нет описания...)

Windows::Library#GetModuleFileName[править]


 GetModuleFileName(hmodule, file, size)

(нет описания...)

Windows::Library#GetModuleHandle[править]


 GetModuleHandle(module_name)

(нет описания...)

Windows::Library#GetModuleHandleEx[править]


 GetModuleHandleEx(flags, module_name, hmodule)

(нет описания...)

Windows::Library#GetProcAddress[править]


 GetProcAddress(hmodule, proc_name)

(нет описания...)

Данный опус представляет собой довольно вольный перевод статьи из Help for the Borland C++ Builder 2009
Отображает указанный исполняемый модуль в адресное пространство вызвавшего ее процесса. В качестве исполняемого модуля можно передавать .DLL или .EXE файл. The specified module may cause other modules to be mapped into the address space.

HMODULE WINAPI LoadLibraryEx(
  LPCTSTR lpFileName,
  HANDLE hFile,
  DWORD dwFlags
);

Параметры

lpFileName
Выходные параметры: Имя исполняемого модуля (либо .dll либо .exe файл).Оно не относится к имени, сохраненном в самом библиотечном модуле, которое задается в в файле определения модуля (.def), в качестве параметра ключевого слова LIBRARY.

Если строка определяет путь, но файла не существует в указанной директории, вызов функции будет с ошибкой. Когда вы будете указывать путь к файлу, убедитесь что вы используете обратный слэш (\), а не прямой слэш(/).

Если переданная функции строка не определяет путь и расширение файла отсутствует, функция добавит расширение по умолчанию .dll к имени.

If the string does not specify a path, the function uses a standard search strategy to find the file. Смотрите Сноску для более полной информации.

If mapping the specified module into the address space causes the system to map in other, associated executable modules, the function can use either the standard search strategy or an alternate search strategy to find those modules. Смотрите Сноску для более полной информации.

hFile
Этот параметр зарезервирован для использования в будущем. Он должен принимать значение NULL.
dwFlags
Входные параметры: The action to be taken when loading the module. Если при использовании функции не были указаны флаги, то работа этой функции идентична функции LoadLibrary. Параметр dwFlags может принимать одно из нижеприведенных значений.

Note  Для операционных систем Windows Vista и более поздних версий, флаг LOAD_LIBRARY_AS_IMAGE_RESOURCE может быть использован совместно с LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE или LOAD_LIBRARY_AS_DATAFILE. Смотрите Сноску для более полной информации.

Значение Описание
DONT_RESOLVE_DLL_REFERENCES
0x00000001
Если используется данный флаг, исполняемый модуль является DLL, система не будет вызывать функцию

DllMain для инициализации процесса и потока, а так же их завершения. Так же, система не будет загружать дополнительные исполняемые модули, которые связаны с описываемым модулем.


Note   Будьте предельно внимательны при использовании данного значения, потому что если LoadLibrary или LoadLibraryExвызываются для одной и той же DLL после того, как она была загружена, its references will not have been resolved. Это произойдет в связи с тем, что второй вызов функций LoadLibrary или LoadLibraryEx просто вернет дескриптор уже загруженной DLL. В таком случае есть вероятность некорректного завершения процесса.

Если вы планируете только получить доступ к данным или ресурсам в DLL, лучшим вариантом будет использовать флаги LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE или LOAD_LIBRARY_AS_IMAGE_RESOURCE или их вместе.

Windows Me/98/95:  Это значение не поддерживается.

LOAD_IGNORE_CODE_AUTHZ_LEVEL
0x00000010
If this value is used, the system does not perform automatic trust comparisons on the DLL or its dependents when they are loaded.

Windows 2000/NT и Windows Me/98/95:  Это значение не поддерживается.

LOAD_LIBRARY_AS_DATAFILE
0x00000002
Если используется этот флаг, система If this value is used, the system maps the file into the calling process's virtual address space as if it were a data file. Ничего не будет подготовлено для выполнения(имеется в виду исполняемый код)Nothing is done to execute or prepare to execute the mapped file. Таким образом Вы не сможете вызывать функции, такие как GetModuleHandle or GetProcAddress из этой DLL. Using this value causes writes to read-only memory to raise an access violation. Используйте этот флаг в том случае, когда Вы хотите загрузить DLL только для того, чтобы извлечь сообщения или ресурсы из нее.


Windows Me/98/95:  Вы можете использовать полученный дескриптор только с функциями управления ресурсами, такими как

EnumResourceLanguages, EnumResourceNames, EnumResourceTypes, FindResource, FindResourceEx, LoadResource, и SizeofResource.
Вы не можете использовать данный дескриптор со специализированными функциями управления ресурсами, такими как: LoadBitmap, LoadCursor, LoadIcon, LoadImage, и LoadMenu.

LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE
0x00000040
Подобна флагу LOAD_LIBRARY_AS_DATAFILE, за исключением того, что Dll файл на диске открывается для монопольной записи.

Таким образом другие процессы не могут открыть DLL файл для записи до тех пор пока он используется. Тем не менее, файл DLL может быть открыт другими процессами.

Windows XP/2000:   Это значение флага не поддерживается ОС до Windows Vista.

LOAD_LIBRARY_AS_IMAGE_RESOURCE
0x00000020
Если используется данное значение флага, система отображает файл в виртуальное адресное пространство как файл изображения.
However, the loader does not load the static imports or perform the other usual initialization steps. 

Используйте этот флаг в том случае, если вы хотите загрузить DLL только для доступа к сообщениями и ресурсам.

Windows XP/2000:  Это значение флага не поддерживается ОС до Windows Vista.

LOAD_WITH_ALTERED_SEARCH_PATH
0x00000008
If this value is used, and lpFileName specifies a path, the system uses the alternate file search strategy discussed in the Remarks section to find associated executable modules that the specified

module causes to be loaded.


If this value is not used, or if lpFileName does not specify a path, the system uses the standard search strategy discussed in the Remarks section to find associated executable modules that the specified module causes to be loaded.

Возвращаемое значение

Если вызов функции будет удачен, возвращаемое значение будет содержать дескриптор загруженного исполняемого файла.

Если вызов функции будет не удачен, возвращаемое значение будет NULL. Для получения расширенной информации об ошибке используйте функцию GetLastError.

Windows Me/98/95:  Если вы используете LoadLibraryEx для загрузки ресурсов из модуля, числовой идентификатор которых больше чем 0x7FFF,

вызов LoadLibraryEx возвратит ошибку. Если вы используете LoadLibraryEx для загрузки модуля, который не содержит ресурсов, вызов функции будет не удачным, а GetLastError возвратит ERROR_BAD_FORMAT. Если вы попытаетесь загрузить 16-bit DLL напрямую из 32-bit кода, вызов функции вернет ошибкуLoadLibraryEx. If you are attempting to load a DLL whose subsystem version is greater than 4.0, LoadLibraryEx fails.

Если Вы попытаетесь вызвать функцией DllMain версию функции для Unicode, вызов LoadLibraryEx возвратит ошибку.

Раздел Сносок

If lpFileName does not include a path and there is more than one loaded module with the same base name and extension, the function returns a handle to the module that was loaded first.

Вызывающий процесс может использовать дескриптор возвращенный в результате вызова данной функции для идентификации загружаемого исполняемого модуля в вызовах функций GetProcAddress, FindResource, и LoadResource.

Для того чтобы включить или выключить сообщения об ошибках отображаемых загрузчиком во время загрузки DLL используйте функцию SetErrorMode.

Функция LoadLibraryEx очень похожа на функцию LoadLibrary. The differences consist of a set of optional behaviors that LoadLibraryEx provides. Первое, функция LoadLibraryEx может отобразить DLL модуль без вызова функции DllMain DLL. Второе, LoadLibraryEx может также использовать 2 стратегии для поиска исполняемых модулей, которые связаны с указанным модулем. Третье, LoadLibraryEx can load a module in a way that is optimized for the case where the module will never be executed, loading the module as if it were a data file. You select these optional behaviors by setting the dwFlags parameter; if dwFlags is zero, LoadLibraryEx behaves identically to LoadLibrary.

Если LOAD_LIBRARY_AS_DATAFILE, LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE, или LOAD_LIBRARY_AS_IMAGE_RESOURCE указываются в качестве is specified for the dwFlags parameter, the loader checks whether the DLL module was already loaded by the process as a normal DLL. Если так, то это означает, что она загружена в виртуальное адресное пространство вызвавшего процесса. В таком случае, LoadLibraryEx возвратит дескриптор DLL и увеличит счетчик ссылок на нее. Если DLL модуль не был загружен как DLL, система загрузит DLL модуль как файл данных или изображения, но не как DLL файл. В таком случае, LoadLibraryEx возвращается дескриптор файла данных или изображения, но для данного размещения не создается счетчик ссылок. Если LoadLibraryEx вызывается дважды для одного и того же файла с установленными значениями флага LOAD_LIBRARY_AS_DATAFILE , LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE, или LOAD_LIBRARY_AS_IMAGE_RESOURCE, файл отображается в памяти дважды.

LOAD_LIBRARY_AS_DATAFILE не запрещает другим процессам изменять DLL пока она загружена. Для увеличения безопасности вашего приложения Вам лучше использовать значение флага LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE при отображении файла данных n creating a data mapping, unless you specifically need to use LOAD_LIBRARY_AS_DATAFILE.

На Windows Vista или более поздних ОС LOAD_LIBRARY_AS_IMAGE_RESOURCE флаг может быть использован вместе с любым из двух: LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE или LOAD_LIBRARY_AS_DATAFILE, но не с обоими. In this case, the loader chooses whether to perform the mapping as an image resource or a data file, selecting whichever option enables the system to share pages more effectively. Specifying LOAD_LIBRARY_AS_IMAGE_RESOURCE or LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE, or both, prevents other processes from modifying the DLL while it is loaded.

When the <A HREF="freelibrary.htm">FreeLibrary</A> function is called, if the handle specified in the hModule parameter is a data or image mapping handle, the mapping is destroyed. Otherwise, the handle is treated as a normal DLL handle, and the DLL reference count is decremented.

It is not safe to call LoadLibraryEx from DllMain. Для получения более обширной информации смотрите секцию Сносок в DllMain.

The LoadLibraryEx function performs a standard search for modules if the file name is specified without a path and the base file name does not match the base file name of a loaded module, or there is a path specified but LOAD_WITH_ALTERED_SEARCH_PATH is not used. If a path is specified and dwFlags is set to LOAD_WITH_ALTERED_SEARCH_PATH, the LoadLibraryEx function uses an alternate file search strategy. For more information, see <A HREF="dynamic-link_library_search_order.htm">Dynamic-Link Library Search Order</A>.

The search path can be altered using the SetDllDirectoryfunction. This solution is recommended instead of using SetCurrentDirectory or hard-coding the full path to the DLL.

If a path is specified and there is a redirection file associated with the application, the LoadLibraryEx function searches for the module in the application directory. If the module exists in the application directory, LoadLibraryEx ignores the path specification and loads the module from the application directory. If the module does not exist in the application directory, the function loads the module from the specified directory. For more information, see Dynamic Link Library Redirection.

If you call LoadLibraryEx with the name of an assembly without a path specification and the assembly is listed in the system compatible manifest, the call is automatically redirected to the side-by-side assembly.

Windows Server 2003 и Windows XP:  The Visual C++ compiler supports a syntax that enables you to declare thread-local variables: _declspec(thread). If you use this syntax in a DLL, you will not be able to load the DLL explicitly using LoadLibraryEx on versions of Windows prior to Windows Vista. If your DLL will be loaded explicitly, you must use the thread local storage functions instead of _declspec(thread). For an example, see <A HREF="using_thread_local_storage_in_a_dynamic_link_library.htm">Using Thread Local Storage in a Dynamic Link Library</A>.

Требования

Клиент Требует Windows Vista, Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98, or Windows 95.
Сервер Требует Windows Server "Longhorn", Windows Server 2003, Windows 2000 Server или Windows NT Server.
Заголовок Описано в Winbase.h; include Windows.h.
Library Используйте Kernel32.lib
DLL Требует Kernel32.dll.
Unicode

Implemented as LoadLibraryExW (Unicode) и LoadLibraryExA (ANSI). Note that Unicode support on Windows Me/98/95 requires Microsoft Layer for Unicode.

Windows::Library#LoadModule[править]


 LoadModule(hmodule, param_block)

(нет описания...)

Windows::Library#SetDllDirectory[править]


 SetDllDirectory(path)

(нет описания...)