reupload this
This commit is contained in:
179
module.c
Normal file
179
module.c
Normal file
@@ -0,0 +1,179 @@
|
||||
#include "progwrp.h"
|
||||
#include "export.h"
|
||||
#include "implementations.h"
|
||||
#include "strsafe.h"
|
||||
|
||||
UNICODE_STRING g_DllPath;
|
||||
|
||||
HMODULE WINAPI Implementation_LoadLibraryA(LPCSTR lpLibFileName)
|
||||
{
|
||||
return Implementation_LoadLibraryExA(lpLibFileName, 0, 0);
|
||||
}
|
||||
|
||||
HMODULE WINAPI Implementation_LoadLibraryExA(LPCSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
|
||||
{
|
||||
HMODULE hModule;
|
||||
ANSI_STRING DllPathA;
|
||||
UNICODE_STRING DllPath;
|
||||
ULONG LoadFlags;
|
||||
|
||||
hModule = NULL;
|
||||
|
||||
RtlInitAnsiString(&DllPathA, lpLibFileName);
|
||||
RtlAnsiStringToUnicodeString(&DllPath, &DllPathA, TRUE);
|
||||
|
||||
LoadFlags = 0;
|
||||
|
||||
if (dwFlags & DONT_RESOLVE_DLL_REFERENCES)
|
||||
LoadFlags |= DONT_RESOLVE_DLL_REFERENCES;
|
||||
|
||||
if (dwFlags & LOAD_LIBRARY_AS_DATAFILE)
|
||||
LoadFlags |= DONT_RESOLVE_DLL_REFERENCES;
|
||||
|
||||
LdrLoadDll(NULL, &LoadFlags, &DllPath, &hModule);
|
||||
|
||||
if (hModule)
|
||||
TLSInit_DllMain_ProcessAttach_Internal(hModule);
|
||||
else
|
||||
{
|
||||
if (g_strstr(lpLibFileName, "dxgi") ||
|
||||
g_strstr(lpLibFileName, "bcryptprimitives") ||
|
||||
g_strstr(lpLibFileName, "api-ms-win-core-fibers-l1-1-0") ||
|
||||
g_strstr(lpLibFileName, "api-ms-win-core-fibers-l1-1-1"))
|
||||
return GetModuleHandleA("progwrp.dll");
|
||||
}
|
||||
|
||||
RtlFreeUnicodeString(&DllPath);
|
||||
|
||||
return hModule;
|
||||
}
|
||||
|
||||
HMODULE WINAPI Implementation_LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
|
||||
{
|
||||
UNICODE_STRING DllPath;
|
||||
HMODULE hModule = 0;
|
||||
ULONG LoadFlags;
|
||||
|
||||
RtlInitUnicodeString(&DllPath, lpLibFileName);
|
||||
|
||||
LoadFlags = 0;
|
||||
|
||||
if (dwFlags & DONT_RESOLVE_DLL_REFERENCES)
|
||||
LoadFlags |= DONT_RESOLVE_DLL_REFERENCES;
|
||||
|
||||
if (dwFlags & LOAD_LIBRARY_AS_DATAFILE)
|
||||
LoadFlags |= DONT_RESOLVE_DLL_REFERENCES;
|
||||
|
||||
LdrLoadDll(NULL, &LoadFlags, &DllPath, &hModule);
|
||||
|
||||
if (hModule)
|
||||
TLSInit_DllMain_ProcessAttach_Internal(hModule);
|
||||
else
|
||||
{
|
||||
if (g_wcsstr(lpLibFileName, L"dxgi") ||
|
||||
g_wcsstr(lpLibFileName, L"bcryptprimitives") ||
|
||||
g_wcsstr(lpLibFileName, L"api-ms-win-core-fibers-l1-1-0") ||
|
||||
g_wcsstr(lpLibFileName, L"api-ms-win-core-fibers-l1-1-1"))
|
||||
return GetModuleHandleA("progwrp.dll");
|
||||
}
|
||||
|
||||
return hModule;
|
||||
}
|
||||
|
||||
HMODULE WINAPI Implementation_LoadLibraryW(LPCWSTR lpLibFileName)
|
||||
{
|
||||
return Implementation_LoadLibraryExW(lpLibFileName, 0, 0);
|
||||
}
|
||||
|
||||
FARPROC WINAPI Implementation_GetProcAddress(
|
||||
HMODULE hModule,
|
||||
LPCSTR lpProcName
|
||||
)
|
||||
{
|
||||
ANSI_STRING ProcNameStr;
|
||||
PANSI_STRING pStr;
|
||||
ULONG_PTR pfnFunc = NULL;
|
||||
ULONG Ordinal = 0;
|
||||
if(lpProcName > 0x10000)
|
||||
{
|
||||
RtlInitAnsiString(&ProcNameStr, lpProcName);
|
||||
pStr = &ProcNameStr;
|
||||
}
|
||||
else
|
||||
{
|
||||
pStr = NULL;
|
||||
|
||||
if(lpProcName > 0)
|
||||
Ordinal = lpProcName;
|
||||
}
|
||||
if(LdrGetProcedureAddress(hModule, pStr, Ordinal, &pfnFunc) != 0)
|
||||
{
|
||||
LdrGetProcedureAddress(GetModuleHandleA("progwrp.dll"), pStr, Ordinal, &pfnFunc);
|
||||
}
|
||||
|
||||
return pfnFunc;
|
||||
}
|
||||
|
||||
BOOL WINAPI Implementation_GetModuleHandleExA(
|
||||
DWORD dwFlags,
|
||||
LPCSTR lpModuleName,
|
||||
HMODULE *phModule
|
||||
)
|
||||
{
|
||||
if (phModule) {
|
||||
if (lpModuleName)
|
||||
*phModule = Implementation_LoadLibraryA(lpModuleName);
|
||||
else
|
||||
*phModule = GetModuleHandleA(NULL);
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL WINAPI Implementation_GetModuleHandleExW(
|
||||
DWORD dwFlags,
|
||||
LPCWSTR lpModuleName,
|
||||
HMODULE *phModule
|
||||
)
|
||||
{
|
||||
if (phModule) {
|
||||
if (lpModuleName)
|
||||
*phModule = Implementation_LoadLibraryW(lpModuleName);
|
||||
else
|
||||
*phModule = GetModuleHandleA(NULL);
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL WINAPI Implementation_SetDllDirectoryW(
|
||||
LPCWSTR lpPathName
|
||||
)
|
||||
{
|
||||
/* PWSTR PathStr;
|
||||
DWORD PathLen;
|
||||
|
||||
PathLen = GetEnvironmentVariableW(L"PATH", NULL, 0);
|
||||
|
||||
PathStr = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (PathLen + MAX_PATH + 1)*sizeof(WCHAR));
|
||||
|
||||
if(PathStr)
|
||||
{
|
||||
EnterCriticalSection(&SrwSharedCs2);
|
||||
GetEnvironmentVariableW(L"PATH", PathStr, (PathLen + MAX_PATH + 1));
|
||||
StringCchCatW(PathStr, (PathLen + MAX_PATH + 1), L';');
|
||||
StringCchCatW(PathStr, (PathLen + MAX_PATH + 1), lpPathName);
|
||||
SetEnvironmentVariableW(L"PATH", PathStr);
|
||||
LeaveCriticalSection(&SrwSharedCs2);
|
||||
HeapFree(GetProcessHeap(), 0, PathStr);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
else*/
|
||||
return FALSE;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user