diff options
Diffstat (limited to 'winsup/utils/module_info.cc')
-rw-r--r-- | winsup/utils/module_info.cc | 114 |
1 files changed, 0 insertions, 114 deletions
diff --git a/winsup/utils/module_info.cc b/winsup/utils/module_info.cc deleted file mode 100644 index c0e7079..0000000 --- a/winsup/utils/module_info.cc +++ /dev/null @@ -1,114 +0,0 @@ -/* module_info.cc - - Copyright 1999,2000,2001 Red Hat, Inc. - - Written by Egor Duda <deo@logos-m.ru> - -This file is part of Cygwin. - -This software is a copyrighted work licensed under the terms of the -Cygwin license. Please consult the file "CYGWIN_LICENSE" for -details. */ - -#include <stdlib.h> -#include <windows.h> -#include <psapi.h> - -static int psapi_loaded = 0; -static HMODULE psapi_module_handle = NULL; - -typedef BOOL WINAPI (tf_EnumProcessModules) (HANDLE, HMODULE *, DWORD, - LPDWORD); -typedef BOOL WINAPI (tf_GetModuleInformation) (HANDLE, HMODULE, LPMODULEINFO, - DWORD); -typedef DWORD WINAPI (tf_GetModuleFileNameExA) (HANDLE, HMODULE, LPSTR, - DWORD); - -static tf_EnumProcessModules *psapi_EnumProcessModules = NULL; -static tf_GetModuleInformation *psapi_GetModuleInformation = NULL; -static tf_GetModuleFileNameExA *psapi_GetModuleFileNameExA = NULL; - -/* Returns full name of Dll, which is loaded by hProcess at BaseAddress. - Uses psapi.dll. */ - -char * -psapi_get_module_name (HANDLE hProcess, DWORD BaseAddress) -{ - DWORD len; - MODULEINFO mi; - unsigned int i; - HMODULE dh_buf[1]; - HMODULE *DllHandle = dh_buf; - DWORD cbNeeded; - BOOL ok; - - char name_buf[MAX_PATH + 1]; - - if (!psapi_loaded || - psapi_EnumProcessModules == NULL || - psapi_GetModuleInformation == NULL || - psapi_GetModuleFileNameExA == NULL) - { - if (psapi_loaded) - goto failed; - psapi_loaded = 1; - psapi_module_handle = LoadLibrary ("psapi.dll"); - if (!psapi_module_handle) - goto failed; - psapi_EnumProcessModules = - (tf_EnumProcessModules *) GetProcAddress (psapi_module_handle, - "EnumProcessModules"); - psapi_GetModuleInformation = - (tf_GetModuleInformation *) GetProcAddress (psapi_module_handle, - "GetModuleInformation"); - psapi_GetModuleFileNameExA = - (tf_GetModuleFileNameExA *) GetProcAddress (psapi_module_handle, - "GetModuleFileNameExA"); - if (psapi_EnumProcessModules == NULL - || psapi_GetModuleInformation == NULL - || psapi_GetModuleFileNameExA == NULL) - goto failed; - } - - ok = (*psapi_EnumProcessModules) (hProcess, - DllHandle, sizeof (HMODULE), &cbNeeded); - - if (!ok || !cbNeeded) - goto failed; - DllHandle = (HMODULE *) malloc (cbNeeded); - if (!DllHandle) - goto failed; - ok = (*psapi_EnumProcessModules) (hProcess, DllHandle, cbNeeded, &cbNeeded); - if (!ok) - { - free (DllHandle); - goto failed; - } - - for (i = 0; i < cbNeeded / sizeof (HMODULE); i++) - { - if (!(*psapi_GetModuleInformation) (hProcess, - DllHandle[i], &mi, sizeof (mi))) - { - free (DllHandle); - goto failed; - } - - len = (*psapi_GetModuleFileNameExA) (hProcess, - DllHandle[i], name_buf, MAX_PATH); - if (len == 0) - { - free (DllHandle); - goto failed; - } - - if ((DWORD) (mi.lpBaseOfDll) == BaseAddress) - { - free (DllHandle); - return strdup (name_buf); - } - } - -failed: - return NULL; -} |