Skip to content
This repository was archived by the owner on Jan 9, 2019. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions AgentInterface/AgentInterface.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.");
}
Expand Down
1 change: 1 addition & 0 deletions AgentInterface/Api/System/SystemData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ public static List<float> GetCpuTemps()
{
var myComputer = new Computer();
myComputer.Open();
//TO DO: System.NullReferenceException is getting thrown here by OpenHardwareLib
myComputer.CPUEnabled = true;
var tempTemps = new List<float>();
var procCount = Environment.ProcessorCount;
Expand Down
2 changes: 2 additions & 0 deletions AgentInterface/Api/Win32/WindowsIdentityImpersonator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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()));
}
Expand Down
3 changes: 2 additions & 1 deletion RemoteTaskServer/Api/Network/Messages/MessageQueueManager.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#region

#region

using System;
using System.Collections.Concurrent;
Expand Down
22 changes: 22 additions & 0 deletions RemoteTaskServer/Api/Network/Models/WindowsServiceInformation.cs
Original file line number Diff line number Diff line change
@@ -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; }


}
}
Original file line number Diff line number Diff line change
@@ -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<WindowsServiceInformation> GetServiceInformation ()
{
var serviceinformation = new List<WindowsServiceInformation>();
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;
}

/// <summary>
/// To pass back information about all windows services
/// </summary>
public void RequestServiceInformation()
{
var serviceInformation = GetServiceInformation();
_builder.WriteMessage(serviceInformation);
}

/// <summary>
/// To start a service by service name
/// </summary>
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);
}

/// <summary>
/// Stop a Windows Service
/// </summary>
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;
}
}
}
}
6 changes: 5 additions & 1 deletion RemoteTaskServer/Api/Network/PacketManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,11 @@ public enum EndPoints
SetPrimaryDisplay,
GetLogs,
GetAvailableMonitors,
SetActiveMonitor
SetActiveMonitor,
RequestServiceInformation,
StartService,
StopService,
DisableService
}

#endregion
Expand Down
24 changes: 20 additions & 4 deletions RemoteTaskServer/Packets.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
}
}
4 changes: 3 additions & 1 deletion RemoteTaskServer/UlteriusServer.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,9 @@
<Compile Include="Api\Network\Messages\RectangleConverter.cs" />
<Compile Include="Api\Network\Models\FanInformation.cs" />
<Compile Include="Api\Network\Models\LoginInformation.cs" />
<Compile Include="Api\Network\Models\WindowsServiceInformation.cs" />
<Compile Include="Api\Network\PacketHandlers\DisplayPacketHandler.cs" />
<Compile Include="Api\Network\PacketHandlers\WindowsServicePacketHandler.cs" />
<Compile Include="Api\Network\UlteriusAgentClient.cs" />
<Compile Include="Api\Services\LocalSystem\Daemons\JobModel.cs" />
<Compile Include="Api\Network\PacketHandlers\CronJobPacketHandler.cs" />
Expand Down Expand Up @@ -376,7 +378,7 @@
</COMReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\inputsimulator2\WindowsInput\WindowsInput.csproj">
<ProjectReference Include="..\..\inputsimulator\WindowsInput\WindowsInput.csproj">
<Project>{3549cd6f-80f8-450f-b99e-cf0a736b1f2a}</Project>
<Name>WindowsInput</Name>
</ProjectReference>
Expand Down
2 changes: 1 addition & 1 deletion UlteriusAgent/UlteriusAgent.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@
<None Include="FodyWeavers.xml" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\inputsimulator2\WindowsInput\WindowsInput.csproj">
<ProjectReference Include="..\..\inputsimulator\WindowsInput\WindowsInput.csproj">
<Project>{3549cd6f-80f8-450f-b99e-cf0a736b1f2a}</Project>
<Name>WindowsInput</Name>
</ProjectReference>
Expand Down
2 changes: 1 addition & 1 deletion UlteriusServer.sln
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down