From 829a664639375abcb8837f2240307e3bc4aab318 Mon Sep 17 00:00:00 2001 From: Atif Toor Date: Mon, 20 Mar 2017 12:22:33 +0500 Subject: [PATCH 1/5] modifications to make the solution build successfuly. --- AgentInterface/AgentInterface.csproj | 1 + .../Api/ScreenShare/DesktopDuplication/DesktopDuplicator.cs | 3 ++- RemoteTaskServer/UlteriusServer.csproj | 2 +- UlteriusAgent/UlteriusAgent.csproj | 2 +- UlteriusServer.sln | 2 +- 5 files changed, 6 insertions(+), 4 deletions(-) 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/RemoteTaskServer/UlteriusServer.csproj b/RemoteTaskServer/UlteriusServer.csproj index a0dcfcb..99990ff 100644 --- a/RemoteTaskServer/UlteriusServer.csproj +++ b/RemoteTaskServer/UlteriusServer.csproj @@ -376,7 +376,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 From 69c0f24e4852804994d2494a01fe90289e5f9887 Mon Sep 17 00:00:00 2001 From: Atif Toor Date: Wed, 22 Mar 2017 18:13:25 +0500 Subject: [PATCH 2/5] Get windows services from server --- AgentInterface/Api/System/SystemData.cs | 1 + .../Api/Win32/WindowsIdentityImpersonator.cs | 2 + .../Models/WindowsServiceInformation.cs | 22 ++++++ .../WindowsServicePacketHandler.cs | 71 +++++++++++++++++++ RemoteTaskServer/UlteriusServer.csproj | 2 + 5 files changed, 98 insertions(+) create mode 100644 RemoteTaskServer/Api/Network/Models/WindowsServiceInformation.cs create mode 100644 RemoteTaskServer/Api/Network/PacketHandlers/WindowsServicePacketHandler.cs 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/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..835c970 --- /dev/null +++ b/RemoteTaskServer/Api/Network/PacketHandlers/WindowsServicePacketHandler.cs @@ -0,0 +1,71 @@ +#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 + { + 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; + } + + public void RequestServiceInformation() + { + var serviceInformation = GetServiceInformation(); + _builder.WriteMessage(serviceInformation); + } + } +} diff --git a/RemoteTaskServer/UlteriusServer.csproj b/RemoteTaskServer/UlteriusServer.csproj index 99990ff..de1d186 100644 --- a/RemoteTaskServer/UlteriusServer.csproj +++ b/RemoteTaskServer/UlteriusServer.csproj @@ -85,7 +85,9 @@ + + From 83249ef6c61ad60bcad33bd35c31aa8ad8f2b25d Mon Sep 17 00:00:00 2001 From: Atif Toor Date: Thu, 23 Mar 2017 02:16:11 +0500 Subject: [PATCH 3/5] start a windows service --- .../WindowsServicePacketHandler.cs | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/RemoteTaskServer/Api/Network/PacketHandlers/WindowsServicePacketHandler.cs b/RemoteTaskServer/Api/Network/PacketHandlers/WindowsServicePacketHandler.cs index 835c970..831d698 100644 --- a/RemoteTaskServer/Api/Network/PacketHandlers/WindowsServicePacketHandler.cs +++ b/RemoteTaskServer/Api/Network/PacketHandlers/WindowsServicePacketHandler.cs @@ -62,10 +62,47 @@ private List GetServiceInformation () 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); + } } } From 44d5a4315ba274d612cbf4d645f0e73f8df2a90a Mon Sep 17 00:00:00 2001 From: Atif Toor Date: Fri, 24 Mar 2017 16:36:39 +0500 Subject: [PATCH 4/5] disable windows service --- .../Network/Messages/MessageQueueManager.cs | 3 +- .../WindowsServicePacketHandler.cs | 74 +++++++++++++++++++ 2 files changed, 76 insertions(+), 1 deletion(-) 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/PacketHandlers/WindowsServicePacketHandler.cs b/RemoteTaskServer/Api/Network/PacketHandlers/WindowsServicePacketHandler.cs index 831d698..a141c35 100644 --- a/RemoteTaskServer/Api/Network/PacketHandlers/WindowsServicePacketHandler.cs +++ b/RemoteTaskServer/Api/Network/PacketHandlers/WindowsServicePacketHandler.cs @@ -104,5 +104,79 @@ public void StartService() }; _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); + } } } From 1cc913f585a00dc674f1896531e9878e90c4783a Mon Sep 17 00:00:00 2001 From: Atif Toor Date: Fri, 24 Mar 2017 17:57:03 +0500 Subject: [PATCH 5/5] plugging code for windows service methods and enpoints --- .../WindowsServicePacketHandler.cs | 26 ++++++++++++++++++- RemoteTaskServer/Api/Network/PacketManager.cs | 6 ++++- RemoteTaskServer/Packets.json | 24 ++++++++++++++--- 3 files changed, 50 insertions(+), 6 deletions(-) diff --git a/RemoteTaskServer/Api/Network/PacketHandlers/WindowsServicePacketHandler.cs b/RemoteTaskServer/Api/Network/PacketHandlers/WindowsServicePacketHandler.cs index a141c35..efdb3c3 100644 --- a/RemoteTaskServer/Api/Network/PacketHandlers/WindowsServicePacketHandler.cs +++ b/RemoteTaskServer/Api/Network/PacketHandlers/WindowsServicePacketHandler.cs @@ -20,7 +20,7 @@ namespace UlteriusServer.Api.Network.PacketHandlers { - class WindowsServicePacketHandler + class WindowsServicePacketHandler : PacketHandler { private AuthClient _authClient; private MessageBuilder _builder; @@ -178,5 +178,29 @@ public void DisableService () }; _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