AppDomain.CreateInstanceFromAndUnwrap - Nie można rzutować przezroczystego proxy

Piszę bibliotekę .NET, aby wprowadzić zarządzane biblioteki DLL do procesów zewnętrznych. Moje obecne podejście to:

Posługiwać sięCreateRemoteThread aby wymusić wywołanie docelowego procesuLoadLibrary na niezarządzanym pliku DLL ładowania początkowego. Od tego momentu wykonujemy kod w docelowym procesie.Moja biblioteka DLL bootstrapu tworzy następnie wystąpienie CLR i wywołaniaExecuteInDefaultAppDomain na niej, która wykonuje metodę w zarządzanej bibliotece pomocniczej DLL.Ta metoda tworzy nową domenę aplikacji i wywołaniaAppDomain.CreateInstanceFromAndUnwrap przekazać wykonanie do mojej biblioteki DLL ładunku, rzucając wynik jakoIInjectionPayload.Pomysł polega na tym, że moja biblioteka DLL ładunków ujawnia klasę, która implementujeIInjectionPayload, więc DLL pomocnika może po prostu wywołaćpayload.Run().

Robię to w ten sposób, aby kod ładunku mógł zostać całkowicie rozładowany po prostu wywołującAppDomain.Unload (po zasygnalizowaniu tego, aby posprzątać).

Takie podejście działa - klasa w mojej bibliotece DLL ładunków jest tworzona w procesie docelowym, więc kodujmogą być wykonane - ale nie mogę rzucić obiektu zwróconego przezCreateInstanceFromAndUnwrap doIInjectionPayload; rzuca następujący wyjątek:

Nie można przesłać przezroczystego proxy do typu „blah.Blah.IInjectionPayload”.

Próbowałem użyćCreateInstanceAndUnwrap, iActivator.CreateInstanceFrom śledzony przezObject.Unwrap, ale obie te metody powodują również zgłoszenie tego samego wyjątku.

Podpisem mojej klasy ładunku jest:

public class Program : MarshalByRefObject, IInjectionPayload

Jestem zakłopotany, ponieważ DLL ładunków jest ładowany i klasa jest tworzona zgodnie z przeznaczeniem. Każda pomoc byłaby bardzo mile widziana.

questionAnswers(1)

yourAnswerToTheQuestion