アンマネージドdllを使用してマネージdllファイルの関数を呼び出す方法を特定できませんでした。アンマネージdllファイル(実行中のプロセスに注入されている)からマネージdllを呼び出す
現在、以下のように管理対象DLLを実行中のプロセスに注入し、管理対象DLLを呼び出すことができました(主に私は初心者ですが、C++への初心者です)。
#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);
}
AND DLL mainから私のように見える注入プロセスを処理する関数CALLING AM: - Iは、試行回数後にこのプロセスを注入することができなかった
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);
}
}
}
}
}
}
}
を。 実行中のプロセスに注入されたアンマネージドDLLを使用して、管理対象のDLL(C#)を呼び出す方法を間違えたり、より良いアプローチを提案したりすることはできますか?前もって感謝します。
UPDATE:
それはこのようできない場合は、実行中のプロセスにマネージDLLを注入する任意の最善のアプローチを提案することができます。あなたは
グーグル「のDllMainローダーロック」への詳細を見つけることができますなぜこれがうまくいかないのかを調べる。 –
詳細を教えてください。私はこの状況の初心者です。 –