diff --git a/AgentInterface/AgentInterface.csproj b/AgentInterface/AgentInterface.csproj
index 3b092db..d3bfed6 100644
--- a/AgentInterface/AgentInterface.csproj
+++ b/AgentInterface/AgentInterface.csproj
@@ -22,6 +22,7 @@
DEBUG;TRACE
prompt
4
+ true
pdbonly
diff --git a/AgentInterface/Api/ScreenShare/DesktopDuplication/DesktopDuplicator.cs b/AgentInterface/Api/ScreenShare/DesktopDuplication/DesktopDuplicator.cs
index d92c739..0d6c965 100644
--- a/AgentInterface/Api/ScreenShare/DesktopDuplication/DesktopDuplicator.cs
+++ b/AgentInterface/Api/ScreenShare/DesktopDuplication/DesktopDuplicator.cs
@@ -53,7 +53,8 @@ public DesktopDuplicator()
Adapter1 adapter;
try
{
- adapter = GetBestAdapter(out int bestAdapaterIndex);
+ int bestAdapaterIndex = 0; //To resolve issue of original ulterius solution not building
+ adapter = GetBestAdapter(out bestAdapaterIndex);
if (adapter == null) throw new SharpDXException();
Console.WriteLine($"Using the {adapter.Description.Description} for screen share.");
}
diff --git a/AgentInterface/Api/System/SystemData.cs b/AgentInterface/Api/System/SystemData.cs
index db38aa8..1db550c 100644
--- a/AgentInterface/Api/System/SystemData.cs
+++ b/AgentInterface/Api/System/SystemData.cs
@@ -67,6 +67,7 @@ public static List GetCpuTemps()
{
var myComputer = new Computer();
myComputer.Open();
+ //TO DO: System.NullReferenceException is getting thrown here by OpenHardwareLib
myComputer.CPUEnabled = true;
var tempTemps = new List();
var procCount = Environment.ProcessorCount;
diff --git a/AgentInterface/Api/Win32/WindowsIdentityImpersonator.cs b/AgentInterface/Api/Win32/WindowsIdentityImpersonator.cs
index 1e4a773..951605f 100644
--- a/AgentInterface/Api/Win32/WindowsIdentityImpersonator.cs
+++ b/AgentInterface/Api/Win32/WindowsIdentityImpersonator.cs
@@ -24,6 +24,8 @@ public WindowsIdentityImpersonator(string domain, string username, string passwo
if (returnValue == false)
{
+ //error: Could not login as DESKTOP-CI81MQI\Frob
+ //TO DO: looks that a default user is passed by client in dev settings
throw new UnauthorizedAccessException("Could not login as " + domain + "\\" + username + ".",
new global::System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error()));
}
diff --git a/RemoteTaskServer/Api/Network/Messages/MessageQueueManager.cs b/RemoteTaskServer/Api/Network/Messages/MessageQueueManager.cs
index 61fd6d4..323d40b 100644
--- a/RemoteTaskServer/Api/Network/Messages/MessageQueueManager.cs
+++ b/RemoteTaskServer/Api/Network/Messages/MessageQueueManager.cs
@@ -1,4 +1,5 @@
-#region
+
+#region
using System;
using System.Collections.Concurrent;
diff --git a/RemoteTaskServer/Api/Network/Models/WindowsServiceInformation.cs b/RemoteTaskServer/Api/Network/Models/WindowsServiceInformation.cs
new file mode 100644
index 0000000..9d6cbec
--- /dev/null
+++ b/RemoteTaskServer/Api/Network/Models/WindowsServiceInformation.cs
@@ -0,0 +1,22 @@
+namespace UlteriusServer.Api.Network.Models
+{
+ public class WindowsServiceInformation
+ {
+ public enum ServiceStatus
+ {
+ Running,
+ Stopped,
+ paused,
+ Disabled
+ }
+ public string Name { get; set; }
+
+ public string Description { get; set; }
+
+ public string Status { get; set; }
+
+ public string StartupType { get; set; }
+
+
+ }
+}
diff --git a/RemoteTaskServer/Api/Network/PacketHandlers/WindowsServicePacketHandler.cs b/RemoteTaskServer/Api/Network/PacketHandlers/WindowsServicePacketHandler.cs
new file mode 100644
index 0000000..efdb3c3
--- /dev/null
+++ b/RemoteTaskServer/Api/Network/PacketHandlers/WindowsServicePacketHandler.cs
@@ -0,0 +1,206 @@
+#region
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Drawing.Imaging;
+using System.IO;
+using System.Linq;
+using System.Threading.Tasks;
+using AgentInterface.Api.Win32;
+using UlteriusServer.Api.Network.Messages;
+using UlteriusServer.Api.Network.Models;
+using UlteriusServer.Utilities;
+using UlteriusServer.WebSocketAPI.Authentication;
+using vtortola.WebSockets;
+using System.ServiceProcess;
+using System.Management;
+
+#endregion
+
+namespace UlteriusServer.Api.Network.PacketHandlers
+{
+ class WindowsServicePacketHandler : PacketHandler
+ {
+ private AuthClient _authClient;
+ private MessageBuilder _builder;
+ private WebSocket _client;
+ private Packet _packet;
+
+ private List GetServiceInformation ()
+ {
+ var serviceinformation = new List();
+ var services = ServiceController.GetServices();
+ foreach (var service in services)
+ {
+ try
+ {
+ var name = service.ServiceName;
+ string desc;
+ var objPath = string.Format("Win32_Service.Name='{0}'", name);
+ using (ManagementObject obService = new ManagementObject(new ManagementPath(objPath)))
+ {
+ desc = obService["Description"].ToString();
+ }
+ var status = service.Status.ToString();
+ var startup = service.StartType.ToString();
+ var serP = new WindowsServiceInformation
+ {
+ Name = name,
+ Description = desc,
+ Status = status,
+ StartupType = status
+ };
+ serviceinformation.Add(serP);
+
+ }
+ catch (Exception)
+ {
+ Console.WriteLine("Error in windows service packet handler");
+ }
+ }
+ return serviceinformation;
+ }
+
+ ///
+ /// To pass back information about all windows services
+ ///
+ public void RequestServiceInformation()
+ {
+ var serviceInformation = GetServiceInformation();
+ _builder.WriteMessage(serviceInformation);
+ }
+
+ ///
+ /// To start a service by service name
+ ///
+ public void StartService()
+ {
+ var serviceName = _packet.Args[0].ToString();
+ bool serviceStarted = false;
+ try
+ {
+ var sc = new ServiceController(serviceName);
+ if (sc.Status == ServiceControllerStatus.Stopped)
+ {
+ sc.Start();
+ while (sc.Status == ServiceControllerStatus.Stopped)
+ {
+ System.Threading.Thread.Sleep(1000);
+ sc.Refresh();
+ }
+ serviceStarted = true;
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ serviceStarted = false;
+ }
+ var data = new
+ {
+ serviceStarted,
+ serviceName
+ };
+ _builder.WriteMessage(data);
+ }
+
+ ///
+ /// Stop a Windows Service
+ ///
+ public void StopService()
+ {
+ var serviceName = _packet.Args[0].ToString();
+ bool serviceStopped = false;
+ try
+ {
+ var sc = new ServiceController(serviceName);
+ if (sc.CanStop)
+ {
+ sc.Stop();
+ while (sc.Status != ServiceControllerStatus.Stopped)
+ {
+ System.Threading.Thread.Sleep(1000);
+ sc.Refresh();
+ }
+ serviceStopped = true;
+
+ }
+ else
+ {
+ serviceStopped = false;
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ serviceStopped = false;
+ }
+
+ var data = new
+ {
+ serviceStopped,
+ serviceName
+ };
+ _builder.WriteMessage(data);
+ }
+
+ public void DisableService ()
+ {
+ var serviceName = _packet.Args[0].ToString();
+ bool serviceDisabled;
+ try
+ {
+ var objPath = string.Format("Win32_Service.Name='{0}'", serviceName );
+ using (ManagementObject obService = new ManagementObject(new ManagementPath(objPath)))
+ {
+ var result = obService.InvokeMethod("ChangeStartMode", new object[] { "Disabled" });
+ if ((uint)result == 0)
+ {
+ serviceDisabled = true;
+ }
+ else
+ {
+ serviceDisabled = false;
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ serviceDisabled = false;
+ }
+
+ var data = new
+ {
+ serviceDisabled ,
+ serviceName
+ };
+ _builder.WriteMessage(data);
+ }
+
+ public override void HandlePacket(Packet packet)
+ {
+ _client = packet.Client;
+ _authClient = packet.AuthClient;
+ _packet = packet;
+ _builder = new MessageBuilder(_authClient, _client, _packet.EndPointName, _packet.SyncKey);
+ switch (_packet.EndPoint)
+ {
+ case PacketManager.EndPoints.RequestServiceInformation:
+ RequestServiceInformation();
+ break;
+ case PacketManager.EndPoints.StartService:
+
+ StartService();
+ break;
+ case PacketManager.EndPoints.StopService:
+ StopService();
+ break;
+ case PacketManager.EndPoints.DisableService:
+ DisableService();
+ break;
+ }
+ }
+ }
+}
diff --git a/RemoteTaskServer/Api/Network/PacketManager.cs b/RemoteTaskServer/Api/Network/PacketManager.cs
index 0de3af4..6c981d1 100644
--- a/RemoteTaskServer/Api/Network/PacketManager.cs
+++ b/RemoteTaskServer/Api/Network/PacketManager.cs
@@ -102,7 +102,11 @@ public enum EndPoints
SetPrimaryDisplay,
GetLogs,
GetAvailableMonitors,
- SetActiveMonitor
+ SetActiveMonitor,
+ RequestServiceInformation,
+ StartService,
+ StopService,
+ DisableService
}
#endregion
diff --git a/RemoteTaskServer/Packets.json b/RemoteTaskServer/Packets.json
index 25d0a9f..d60487f 100644
--- a/RemoteTaskServer/Packets.json
+++ b/RemoteTaskServer/Packets.json
@@ -220,9 +220,25 @@
"endPoint": "StartProcess",
"packetHandler": "ProcessPacketHandler"
},
- "listports": {
- "endPoint": "ListPorts",
- "packetHandler": "ServerPacketHandler"
- }
+ "listports": {
+ "endPoint": "ListPorts",
+ "packetHandler": "ServerPacketHandler"
+ },
+ "requestserviceinformation": {
+ "endPoint": "RequestServiceInformation",
+ "packetHandler": "WindowsServicePacketHandler"
+ },
+ "startservice": {
+ "endPoint": "StartService",
+ "packetHandler": "WindowsServicePacketHandler"
+ },
+ "stopservice": {
+ "endPoint": "StopService",
+ "packetHandler": "WindowsServicePacketHandler"
+ },
+ "disableservice": {
+ "endPoint": "DisableService",
+ "packetHandler": "WindowsServicePacketHandler"
+ }
}
}
\ No newline at end of file
diff --git a/RemoteTaskServer/UlteriusServer.csproj b/RemoteTaskServer/UlteriusServer.csproj
index a0dcfcb..de1d186 100644
--- a/RemoteTaskServer/UlteriusServer.csproj
+++ b/RemoteTaskServer/UlteriusServer.csproj
@@ -85,7 +85,9 @@
+
+
@@ -376,7 +378,7 @@
-
+
{3549cd6f-80f8-450f-b99e-cf0a736b1f2a}
WindowsInput
diff --git a/UlteriusAgent/UlteriusAgent.csproj b/UlteriusAgent/UlteriusAgent.csproj
index 730ede3..a55ab7a 100644
--- a/UlteriusAgent/UlteriusAgent.csproj
+++ b/UlteriusAgent/UlteriusAgent.csproj
@@ -65,7 +65,7 @@
-
+
{3549cd6f-80f8-450f-b99e-cf0a736b1f2a}
WindowsInput
diff --git a/UlteriusServer.sln b/UlteriusServer.sln
index 87dc310..8dfa894 100644
--- a/UlteriusServer.sln
+++ b/UlteriusServer.sln
@@ -18,7 +18,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UlteriusAgent", "UlteriusAg
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AgentInterface", "AgentInterface\AgentInterface.csproj", "{5C3B0B17-CBB7-4B4B-B527-1FAB2BB96466}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsInput", "..\inputsimulator2\WindowsInput\WindowsInput.csproj", "{3549CD6F-80F8-450F-B99E-CF0A736B1F2A}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsInput", "..\inputsimulator\WindowsInput\WindowsInput.csproj", "{3549CD6F-80F8-450F-B99E-CF0A736B1F2A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution