Improved implementation of LoadLibrary functions.
This commit is contained in:
parent
7b246121b4
commit
ebb93a1273
@ -32,6 +32,18 @@ typedef HANDLE DLL_DIRECTORY_COOKIE;
|
||||
#define LOAD_LIBRARY_SEARCH_SYSTEM32 0x00000800
|
||||
#define LOAD_LIBRARY_SEARCH_USER_DIRS 0x00000400
|
||||
|
||||
#define DONT_RESOLVE_DLL_REFERENCES 0x00000001
|
||||
#define LOAD_LIBRARY_AS_DATAFILE 0x00000002
|
||||
#define LOAD_WITH_ALTERED_SEARCH_PATH 0x00000008
|
||||
#define LOAD_IGNORE_CODE_AUTHZ_LEVEL 0x00000010
|
||||
#define LOAD_LIBRARY_AS_IMAGE_RESOURCE 0x00000020
|
||||
#define LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE 0x00000040
|
||||
#define LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR 0x00000100
|
||||
#define LOAD_LIBRARY_SEARCH_APPLICATION_DIR 0x00000200
|
||||
#define LOAD_LIBRARY_SEARCH_USER_DIRS 0x00000400
|
||||
#define LOAD_LIBRARY_SEARCH_SYSTEM32 0x00000800
|
||||
#define LOAD_LIBRARY_SEARCH_DEFAULT_DIRS 0x00001000
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
@ -83,17 +83,26 @@
|
||||
|
||||
DLL_DIRECTORY_COOKIE AddDllDirectory(PCWSTR NewDirectory)
|
||||
{
|
||||
/* TODO: Implement */
|
||||
WLog_ERR(TAG, "%s not implemented", __FUNCTION__);
|
||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
BOOL RemoveDllDirectory(DLL_DIRECTORY_COOKIE Cookie)
|
||||
{
|
||||
return TRUE;
|
||||
/* TODO: Implement */
|
||||
WLog_ERR(TAG, "%s not implemented", __FUNCTION__);
|
||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL SetDefaultDllDirectories(DWORD DirectoryFlags)
|
||||
{
|
||||
return TRUE;
|
||||
/* TODO: Implement */
|
||||
WLog_ERR(TAG, "%s not implemented", __FUNCTION__);
|
||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
HMODULE LoadLibraryA(LPCSTR lpLibFileName)
|
||||
@ -111,7 +120,7 @@ HMODULE LoadLibraryA(LPCSTR lpLibFileName)
|
||||
if (status < 1)
|
||||
return NULL;
|
||||
|
||||
hModule = LoadPackagedLibrary(filenameW, 0);
|
||||
hModule = LoadLibraryW(filenameW);
|
||||
free(filenameW);
|
||||
return hModule;
|
||||
#else
|
||||
@ -120,7 +129,7 @@ HMODULE LoadLibraryA(LPCSTR lpLibFileName)
|
||||
|
||||
if (!library)
|
||||
{
|
||||
WLog_ERR(TAG, "LoadLibraryA: %s", dlerror());
|
||||
WLog_ERR(TAG, "%s failed with %s", __FUNCTION__, dlerror());
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -133,31 +142,39 @@ HMODULE LoadLibraryW(LPCWSTR lpLibFileName)
|
||||
#if defined(_UWP)
|
||||
return LoadPackagedLibrary(lpLibFileName, 0);
|
||||
#else
|
||||
return (HMODULE) NULL;
|
||||
char* name = NULL;
|
||||
HMODULE module;
|
||||
int rc = ConvertFromUnicode(CP_UTF8, 0, lpLibFileName, -1, &name, 0, NULL, NULL);
|
||||
|
||||
if (rc < 0)
|
||||
return NULL;
|
||||
|
||||
module = LoadLibraryA(name);
|
||||
free(name);
|
||||
return module;
|
||||
#endif
|
||||
}
|
||||
|
||||
HMODULE LoadLibraryExA(LPCSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
|
||||
{
|
||||
#if !defined(_UWP)
|
||||
HMODULE library;
|
||||
library = dlopen(lpLibFileName, RTLD_LOCAL | RTLD_LAZY);
|
||||
if (dwFlags != 0)
|
||||
WLog_WARN(TAG, "%s does not support dwFlags 0x%08"PRIx32, __FUNCTION__, dwFlags);
|
||||
|
||||
if (!library)
|
||||
{
|
||||
WLog_ERR(TAG, "LoadLibraryExA: failed to open %s: %s", lpLibFileName, dlerror());
|
||||
return NULL;
|
||||
}
|
||||
if (hFile)
|
||||
WLog_WARN(TAG, "%s does not support hFile != NULL", __FUNCTION__);
|
||||
|
||||
return library;
|
||||
#else
|
||||
return (HMODULE)NULL;
|
||||
#endif
|
||||
return LoadLibraryA(lpLibFileName);
|
||||
}
|
||||
|
||||
HMODULE LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
|
||||
{
|
||||
return (HMODULE) NULL;
|
||||
if (dwFlags != 0)
|
||||
WLog_WARN(TAG, "%s does not support dwFlags 0x%08"PRIx32, __FUNCTION__, dwFlags);
|
||||
|
||||
if (hFile)
|
||||
WLog_WARN(TAG, "%s does not support hFile != NULL", __FUNCTION__);
|
||||
|
||||
return LoadLibraryW(lpLibFileName);
|
||||
}
|
||||
|
||||
#endif
|
||||
@ -191,11 +208,17 @@ BOOL FreeLibrary(HMODULE hLibModule)
|
||||
|
||||
HMODULE GetModuleHandleA(LPCSTR lpModuleName)
|
||||
{
|
||||
/* TODO: Implement */
|
||||
WLog_ERR(TAG, "%s not implemented", __FUNCTION__);
|
||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
HMODULE GetModuleHandleW(LPCWSTR lpModuleName)
|
||||
{
|
||||
/* TODO: Implement */
|
||||
WLog_ERR(TAG, "%s not implemented", __FUNCTION__);
|
||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -209,6 +232,7 @@ HMODULE GetModuleHandleW(LPCWSTR lpModuleName)
|
||||
|
||||
DWORD GetModuleFileNameW(HMODULE hModule, LPWSTR lpFilename, DWORD nSize)
|
||||
{
|
||||
/* TODO: Implement */
|
||||
WLog_ERR(TAG, "%s is not implemented", __FUNCTION__);
|
||||
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user