private IDirectXHooker GetHooker(Parameter parameter) { IDirectXHooker hooker = null; switch (parameter.DirectXVersion) { case DirectXVersion.D3D9: hooker = new DirectXHooker.DriectX9Hooker(parameter, logger); break; case DirectXVersion.D3D11: hooker = new DirectXHooker.DriectX11Hooker(parameter); break; case DirectXVersion.D3D12: hooker = new DirectXHooker.DriectX12Hooker(parameter, logger); break; default: logger.Error($"Unknown {parameter.DirectXVersion} version of DirectX."); break; } return(hooker); }
private IDirectXHooker GetCurrentVerionDirectX(Parameter parameter) { var versions = new System.Collections.Generic.Dictionary <string, string>() { { "9", "d3d9.dll" }, { "10", "d3d10.dll" }, { "10_1", "d3d10_1.dll" }, { "11", "d3d11.dll" }, { "12", "d3d12.dll" } }; var checkedVersions = versions .Where(it => GetModuleHandle(it.Value) != IntPtr.Zero) .Select(it => it.Key); if (checkedVersions.Count() > 0) { logger.Debug($"已检测到进程可用的驱动版本:{string.Join(", ", checkedVersions)}."); } var currentVersion = checkedVersions .FirstOrDefault(); IDirectXHooker hooker = null; if (currentVersion != null) { logger.Debug($"当前驱动版本为 {currentVersion}."); switch (currentVersion) { case "9": hooker = new DirectXHooker.DriectX9Hooker(parameter, logger); break; case "11": hooker = new DirectXHooker.DriectX11Hooker(parameter); break; case "12": hooker = new DirectXHooker.DriectX12Hooker(parameter, logger); break; default: logger.Error($"尚未实现 DirectX{currentVersion} 版本,请联系韦大神!"); break; } } else { logger.Error($"未检测到目标进程对应的 DirectX 版本."); } return(hooker); }
public InjectEntryPoint(RemoteHooking.IContext context, Parameter parameter) { server = RemoteHooking.IpcConnectClient <ServerInterface>(parameter.ChannelName); var channel = new IpcServerChannel( parameter.ChannelName, parameter.ChannelName + Guid.NewGuid().ToString("N"), new BinaryServerFormatterSinkProvider() { TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full }); ChannelServices.RegisterChannel(channel, false); proxy = new ServerInterfaceEventProxy(); logger = new IpcConnectLogger(server); server.Ping(); hooker = GetCurrentVerionDirectX(parameter); }