te
This commit is contained in:
parent
01151e679b
commit
57b2f0400e
265 changed files with 22828 additions and 6 deletions
266
Unused/Decal.Adapter/Surrogate.cs
Normal file
266
Unused/Decal.Adapter/Surrogate.cs
Normal file
|
|
@ -0,0 +1,266 @@
|
|||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
using Decal.Adapter.Support;
|
||||
using Decal.Interop.Core;
|
||||
using Decal.Interop.Net;
|
||||
using Microsoft.Win32;
|
||||
|
||||
namespace Decal.Adapter;
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
[ComVisible(true)]
|
||||
[ClassInterface(ClassInterfaceType.None)]
|
||||
[ComDefaultInterface(typeof(IAdapterSurrogate))]
|
||||
[ProgId("DecalAdapter.Surrogate")]
|
||||
[Guid("71A69713-6593-47EC-0002-0000000DECA1")]
|
||||
public sealed class Surrogate : MarshalByRefObject, IAdapterSurrogate, IDecalFileSurrogate
|
||||
{
|
||||
private string myAssemblyName;
|
||||
|
||||
private string myPath;
|
||||
|
||||
private string myTypeName;
|
||||
|
||||
string IAdapterSurrogate.Version
|
||||
{
|
||||
get
|
||||
{
|
||||
CoreManager current = CoreManager.Current;
|
||||
if (current == null)
|
||||
{
|
||||
current = CoreManager.Current;
|
||||
}
|
||||
if (File.Exists(Path.Combine(myPath, myAssemblyName)))
|
||||
{
|
||||
return FileVersionInfo.GetVersionInfo(Path.Combine(myPath, myAssemblyName)).FileVersion;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
bool IAdapterSurrogate.FileExists => File.Exists(Path.Combine(myPath, myAssemblyName));
|
||||
|
||||
string IAdapterSurrogate.FilePath => Path.Combine(myPath, myAssemblyName);
|
||||
|
||||
string IDecalFileSurrogate.Description => "Decal.Adapter Extension";
|
||||
|
||||
string IDecalFileSurrogate.Extension => "dll";
|
||||
|
||||
IntPtr IAdapterSurrogate.CreateInstance(DecalEnum pInitData, ref Guid riid)
|
||||
{
|
||||
if (CoreManager.ServiceRunning)
|
||||
{
|
||||
CoreManager current = CoreManager.Current;
|
||||
try
|
||||
{
|
||||
myTypeName = (string)((IDecalEnum)pInitData).get_Property("Object");
|
||||
myAssemblyName = (string)((IDecalEnum)pInitData).get_Property("Assembly");
|
||||
myPath = (string)((IDecalEnum)pInitData).get_Property("Path");
|
||||
Assembly assembly = ((!(pInitData.Group == "Plugins")) ? current.Assembly(myAssemblyName, myPath) : current.Assembly(myAssemblyName, myPath, current.PluginDomain));
|
||||
Type type = assembly.GetType(myTypeName);
|
||||
if (null == type)
|
||||
{
|
||||
throw new COMHResultException(HResults.E_FAIL);
|
||||
}
|
||||
IntPtr ppv;
|
||||
if (type.IsSubclassOf(typeof(Extension)))
|
||||
{
|
||||
Extension extension = ((!type.IsSubclassOf(typeof(PluginBase))) ? ((Extension)Activator.CreateInstance(type, null)) : ((Extension)current.PluginDomain.CreateInstanceFromAndUnwrap(Path.Combine(myPath, myAssemblyName), myTypeName)));
|
||||
extension.Path = myPath;
|
||||
object obj = null;
|
||||
switch (extension.ExtensionType)
|
||||
{
|
||||
case DecalExtensionType.Service:
|
||||
if (extension is ServiceBase serviceBase)
|
||||
{
|
||||
current.AddService(serviceBase);
|
||||
obj = new ServiceProxy(serviceBase);
|
||||
}
|
||||
break;
|
||||
case DecalExtensionType.NetworkFilter:
|
||||
if (extension is FilterBase filterBase)
|
||||
{
|
||||
current.AddFilter(filterBase);
|
||||
obj = new FilterProxy(filterBase);
|
||||
}
|
||||
break;
|
||||
case DecalExtensionType.Plugin:
|
||||
if (extension is PluginBase pluginBase)
|
||||
{
|
||||
current.AddPlugin(pluginBase);
|
||||
obj = new PluginProxy(pluginBase);
|
||||
}
|
||||
break;
|
||||
}
|
||||
IntPtr pUnk = ((obj == null) ? Marshal.GetIUnknownForObject(extension) : Marshal.GetIUnknownForObject(obj));
|
||||
int num = Marshal.QueryInterface(pUnk, ref riid, out ppv);
|
||||
Marshal.Release(pUnk);
|
||||
if (num < 0)
|
||||
{
|
||||
throw new Exception();
|
||||
}
|
||||
return ppv;
|
||||
}
|
||||
object o = Activator.CreateInstance(type, null);
|
||||
if (!type.IsSubclassOf(typeof(INetworkFilter)))
|
||||
{
|
||||
type.IsSubclassOf(typeof(INetworkFilter2));
|
||||
}
|
||||
IntPtr iUnknownForObject = Marshal.GetIUnknownForObject(o);
|
||||
Marshal.QueryInterface(iUnknownForObject, ref riid, out ppv);
|
||||
Marshal.Release(iUnknownForObject);
|
||||
return ppv;
|
||||
}
|
||||
catch
|
||||
{
|
||||
throw new COMHResultException(HResults.E_FAIL);
|
||||
}
|
||||
finally
|
||||
{
|
||||
Marshal.ReleaseComObject(pInitData);
|
||||
}
|
||||
}
|
||||
Marshal.ReleaseComObject(pInitData);
|
||||
throw new COMHResultException(HResults.E_FAIL);
|
||||
}
|
||||
|
||||
void IAdapterSurrogate.SetEnum(DecalEnum pInitData)
|
||||
{
|
||||
try
|
||||
{
|
||||
myTypeName = (string)((IDecalEnum)pInitData).get_Property("Object");
|
||||
myAssemblyName = (string)((IDecalEnum)pInitData).get_Property("Assembly");
|
||||
myPath = (string)((IDecalEnum)pInitData).get_Property("Path");
|
||||
Marshal.ReleaseComObject(pInitData);
|
||||
}
|
||||
catch (COMException)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
void IDecalFileSurrogate.Register(string Filename)
|
||||
{
|
||||
bool flag = false;
|
||||
int num = 0;
|
||||
int num2 = 0;
|
||||
try
|
||||
{
|
||||
if (File.Exists(Filename))
|
||||
{
|
||||
Assembly assembly = Assembly.LoadFile(Filename);
|
||||
string text = "";
|
||||
if (Attribute.IsDefined(assembly, typeof(GuidAttribute)))
|
||||
{
|
||||
text = ((GuidAttribute)Attribute.GetCustomAttribute(assembly, typeof(GuidAttribute))).Value.ToUpper(CultureInfo.InvariantCulture);
|
||||
}
|
||||
Type[] types;
|
||||
try
|
||||
{
|
||||
types = assembly.GetTypes();
|
||||
}
|
||||
catch (ReflectionTypeLoadException ex)
|
||||
{
|
||||
types = ex.Types;
|
||||
}
|
||||
Type[] array = types;
|
||||
foreach (Type type in array)
|
||||
{
|
||||
if (null == type || !type.IsPublic)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
int num3 = 0;
|
||||
if (!type.IsSubclassOf(typeof(Extension)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
string directoryName = Path.GetDirectoryName(Filename);
|
||||
string fileName = Path.GetFileName(Filename);
|
||||
string value = "";
|
||||
string value2 = "{71A69713-6593-47EC-0002-0000000DECA1}";
|
||||
string text2 = "";
|
||||
if (type.IsSubclassOf(typeof(PluginBase)))
|
||||
{
|
||||
text2 = "Plugins";
|
||||
num++;
|
||||
num3 = num;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!type.IsSubclassOf(typeof(FilterBase)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
text2 = "NetworkFilters";
|
||||
num2++;
|
||||
num3 = num2;
|
||||
}
|
||||
if (Attribute.IsDefined(type, typeof(FriendlyNameAttribute)))
|
||||
{
|
||||
value = ((FriendlyNameAttribute)Attribute.GetCustomAttribute(type, typeof(FriendlyNameAttribute))).Name;
|
||||
}
|
||||
string text3 = type.Namespace.ToString() + "." + type.Name.ToString();
|
||||
string text4 = "";
|
||||
if (Attribute.IsDefined(type, typeof(GuidAttribute)))
|
||||
{
|
||||
text4 = ((GuidAttribute)Attribute.GetCustomAttribute(type, typeof(GuidAttribute))).Value.ToString();
|
||||
}
|
||||
else if (!string.IsNullOrEmpty(text) && num3 == 1)
|
||||
{
|
||||
text4 = text;
|
||||
}
|
||||
else if (!string.IsNullOrEmpty(text))
|
||||
{
|
||||
byte[] array2 = new Guid(text).ToByteArray();
|
||||
array2[15] = (byte)(array2[15] ^ num3);
|
||||
text4 = new Guid(array2).ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
text4 = Guid.NewGuid().ToString();
|
||||
}
|
||||
text4 = text4.ToUpper(CultureInfo.InvariantCulture);
|
||||
string subkey = string.Format("SOFTWARE\\Decal\\{0}\\{1}", text2, "{" + text4 + "}");
|
||||
Util.WriteLine("Registering Decal.Adapter extension (Type:" + type.ToString() + ")");
|
||||
Util.WriteLine("Assembly Directory: " + directoryName);
|
||||
Util.WriteLine("Assembly File: " + fileName);
|
||||
Util.WriteLine("Assembly Object: " + text3);
|
||||
Util.WriteLine("Extension Registry CLSID: " + text4);
|
||||
RegistryKey registryKey = Registry.LocalMachine.CreateSubKey(subkey);
|
||||
if (registryKey != null)
|
||||
{
|
||||
registryKey.SetValue("Enabled", 0, RegistryValueKind.DWord);
|
||||
registryKey.SetValue("Assembly", fileName, RegistryValueKind.String);
|
||||
registryKey.SetValue("Path", directoryName, RegistryValueKind.String);
|
||||
registryKey.SetValue("Object", text3, RegistryValueKind.String);
|
||||
registryKey.SetValue("Surrogate", value2, RegistryValueKind.String);
|
||||
if (!string.IsNullOrEmpty(value))
|
||||
{
|
||||
registryKey.SetValue("", value, RegistryValueKind.String);
|
||||
}
|
||||
else
|
||||
{
|
||||
registryKey.SetValue("", text3, RegistryValueKind.String);
|
||||
}
|
||||
flag = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex2)
|
||||
{
|
||||
Util.WriteLine("Exception registering plugin: " + ex2.ToString());
|
||||
throw new COMHResultException(HResults.E_FAIL);
|
||||
}
|
||||
if (!flag)
|
||||
{
|
||||
throw new COMHResultException(HResults.E_FAIL);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue