Impossible de comprendre comment appeler une fonction dans un fichier dll géré à l'aide de la DLL non managée.appelant une DLL dll à partir d'un fichier dll non géré (qui est injecté dans le processus en cours d'exécution)
Actuellement, j'ai été capable d'injecter une DLL non managée dans un processus en cours et d'appeler une DLL gérée (et surtout je suis un débutant en C++) en utilisant cela comme indiqué ci-dessous.
#include "stdafx.h"
#include <Windows.h>
#include "dllmain.h"
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved )
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
LoadManagedProject(L"C:\\Users\\nagaganesh.kurcheti\\Desktop\\ExampleProject.dll");
DisplayPid();
break;
}
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
void DisplayPid()
{
DWORD pid = GetCurrentProcessId();
wchar_t buf[64];
wsprintf(buf, L"Hey, it worked! Pid is %d", pid);
MessageBox(NULL, buf, L"Injected NEW MessageBox", NULL);
}
ET DE MAIN DLL JE SUIS appel d'une fonction POIGNEES LE PROCESSUS D'INJECTION QUI RESSEMBLE: -
DllExport void LoadManagedProject(const wchar_t * managedDllLocation)
{
HRESULT hr;
ICLRMetaHost* pClrMetaHost = NULL;
ICLRRuntimeInfo* pClrRuntimeInfo = NULL;
ICLRRuntimeHost* pClrRuntimeHost = NULL;
hr = CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, (LPVOID*)&pClrMetaHost);
if (hr == S_OK)
{
hr = pClrMetaHost->GetRuntime(L"v4.0.30319", IID_PPV_ARGS(&pClrRuntimeInfo));
if (hr == S_OK)
{
BOOL fLoadable;
hr = pClrRuntimeInfo->IsLoadable(&fLoadable);
if ((hr == S_OK) && fLoadable)
{
hr = pClrRuntimeInfo->GetInterface(CLSID_CLRRuntimeHost,
IID_PPV_ARGS(&pClrRuntimeHost));
if (hr == S_OK)
{
hr = pClrRuntimeHost->Start();
if (hr == S_OK)
{
MessageBox(NULL, L"HR=SOK45STTIME", L"Injected MessageBox", NULL);
DWORD result;
hr = pClrRuntimeHost->ExecuteInDefaultAppDomain(
managedDllLocation,
L"ExampleProject.Example",
L"EntryPoint",
L"Argument",
&result);
if (hr == S_OK)
{
MessageBox(NULL, L"HR=SOK6STTIME", L"Injected MessageBox", NULL);
}
}
}
}
}
}
}
je n'étais pas en mesure d'injecter ce processus après plusieurs essais. Puis-je obtenir quelle erreur j'ai faite ou suggérer une meilleure approche d'appeler un DLL géré (C#) en utilisant dll non géré qui est injecté dans un processus en cours d'exécution. Merci d'avance.
MISE À JOUR:
S'il est impossible de cette façon, pourriez-vous suggérer une meilleure approche de l'injection dll gérée dans un processus en cours d'exécution. Merci
Google « DllMain chargeur verrouillage » à Découvrez pourquoi cela ne peut jamais fonctionner. –
Pourriez-vous élaborer s'il vous plaît. Je suis un débutant à cette situation.Thankyou –