private UsbStorageGuard InstallUsbStorageGuard(IBeamgunSettings beamgunSettings) { var usbGuard = new UsbStorageGuard(beamgunSettings); BeamgunState.UsbMassStorageDisabled = usbGuard.UsbStorageDisabled; BeamgunState.PropertyChanged += (sender, args) => { if (args.PropertyName != nameof(BeamgunState.UsbMassStorageDisabled)) { return; } if (!beamgunSettings.IsAdmin) { BeamgunState.AppendToAlert("Cannot change USB Mass Storage settings without administrative privileges."); } try { usbGuard.UsbStorageDisabled = BeamgunState.UsbMassStorageDisabled; } catch (PrivilegeNotHeldException e) { BeamgunState.AppendToAlert($"Privileges exception: {e.Message}"); } }; return(usbGuard); }
public KeyboardWatcher(IBeamgunSettings settings, WorkstationLocker locker, Action <string> report, Action <string> alarm) { var keyboardQuery = new WqlEventQuery("__InstanceCreationEvent", new TimeSpan(0, 0, 1), "TargetInstance isa \"Win32_Keyboard\""); _watcher = new ManagementEventWatcher(keyboardQuery); _watcher.EventArrived += (caller, args) => { var obj = (ManagementBaseObject)args.NewEvent["TargetInstance"]; alarm($"Alerting on keyboard insertion: " + $"{obj["Name"]} " + $"{obj["Caption"]} " + $"{obj["Description"]} " + $"{obj["DeviceID"]} " + $"{obj["Layout"]} " + $"{obj["PNPDeviceID"]}."); if (!settings.LockWorkstation) { return; } report(locker.Lock() ? "Successfully locked the workstation." : "Could not lock the workstation."); }; _watcher.Start(); }
public NetworkWatcher(IBeamgunSettings settings, NetworkAdapterDisabler networkAdapterDisabler, Action <string> report, Action <string> alarm) { var networkQuery = new WqlEventQuery("__InstanceCreationEvent", new TimeSpan(0, 0, 1), "TargetInstance isa \"Win32_NetworkAdapter\""); _watcher = new ManagementEventWatcher(networkQuery); _watcher.EventArrived += (caller, args) => { var obj = (ManagementBaseObject)args.NewEvent["TargetInstance"]; var alertMessage = $"Alerting on network adapter insertion: {obj["Description"]} (Device ID {obj["DeviceID"]}) "; alarm(alertMessage); Triggered = settings.DisableNetworkAdapter; if (Triggered) { report($"Disabling {obj["Description"]} every {settings.DisableNetworkAdapterInterval} ms until Reset."); } while (Triggered) { try { if (!networkAdapterDisabler.Disable(obj["DeviceID"].ToString())) { report($"DANGER: Unable to disable {obj["AdapterType"]}!"); } Thread.Sleep((int)settings.DisableNetworkAdapterInterval); } catch (NetworkAdapterDisablerException e) { report(e.Message); } } }; _watcher.Start(); }
public void Update(IBeamgunSettings settings) { if (!settings.CheckForUpdates) { return; } using (var client = new WebClient()) { var url = settings.VersionUrl + "?id=" + settings.BeamgunId + "&ver=" + Assembly.GetExecutingAssembly().GetName().Version; var requestTask = client.DownloadStringTaskAsync(url); requestTask.ContinueWith(x => { try { var versionJson = JObject.Parse(x.Result); settings.LatestVersion = new Version(versionJson["latest_version"].ToString()); settings.DownloadUrl = versionJson["download_url"].ToString(); settings.VersionUrl = versionJson["update_version_url"].ToString(); } catch (Exception e) { Debug.WriteLine($"Unable to retrieve version information: {e.Message}"); } }); } }
public MouseWatcher(IBeamgunSettings settings, WorkstationLocker locker, Action <string> report, Action <string> alarm, Func <bool> disabled) { var MouseQuery = new WqlEventQuery("__InstanceCreationEvent", new TimeSpan(0, 0, 1), "TargetInstance isa \"Win32_PointingDevice\""); _watcher = new ManagementEventWatcher(MouseQuery); _watcher.EventArrived += (caller, args) => { if (disabled()) { return; } var obj = (ManagementBaseObject)args.NewEvent["TargetInstance"]; alarm($"Alerting on mouse insertion: " + $"{obj["Name"]} " + $"{obj["Caption"]} " + $"{obj["Description"]} " + $"{obj["DeviceID"]} " + $"{obj["Manufacturer"]} " + $"{obj["PNPDeviceID"]}."); if (!settings.LockOnMouse) { return; } report(locker.Lock() ? "Successfully locked the workstation." : "Could not lock the workstation."); }; _watcher.Start(); }
public void Update(IBeamgunSettings settings) { if (!settings.CheckForUpdates) { return; } JObject versionJson; using (var client = new WebClient()) { var url = settings.VersionUrl + "?id=" + settings.BeamgunId + "&ver=" + Assembly.GetExecutingAssembly().GetName().Version; using (var data = client.OpenRead(Uri.EscapeUriString(url))) { if (data == null) { throw new Exception("Could not connect to update server."); } using (var reader = new StreamReader(data)) { versionJson = JObject.Parse(reader.ReadToEnd()); } } } try { settings.LatestVersion = new Version(versionJson["latest_version"].ToString()); settings.DownloadUrl = versionJson["download_url"].ToString(); settings.VersionUrl = versionJson["update_version_url"].ToString(); } catch (Exception e) { throw new Exception("Could not parse update results from server.", e); } }
public KeyboardWatcher(IBeamgunSettings settings, WorkstationLocker locker, Action <string> report, Action <string> alarm, Func <bool> disabled) { var keyboardQuery = new WqlEventQuery("__InstanceCreationEvent", new TimeSpan(0, 0, 1), "TargetInstance isa \"Win32_Keyboard\""); _watcher = new ManagementEventWatcher(keyboardQuery); _watcher.EventArrived += (caller, args) => { if (disabled()) { return; } var obj = (ManagementBaseObject)args.NewEvent["TargetInstance"]; alarm($"Alerting on keyboard insertion: " + $"{obj["Name"]} " + $"{obj["Caption"]} " + $"{obj["Description"]} " + $"{obj["DeviceID"]}" + $"{obj["Layout"]} " + $"{obj["PNPDeviceID"]}."); if (!settings.LockOnKeyboard) { return; } if (WhiteList.WhiteListed(obj)) { report($"Device is whitelisted, remove {obj["PNPDeviceID"]} from {WhiteList.WhiteFilename} if you've changed your mind."); return; } report(locker.Lock() ? "Successfully locked the workstation." : "Could not lock the workstation."); }; _watcher.Start(); }
private Alarm InstallAlarm(IBeamgunSettings beamgunSettings) { var alarm = new Alarm(beamgunSettings.StealFocusInterval, BeamgunState); alarm.AlarmCallback += () => { BeamgunState.MainWindowState = WindowState.Normal; BeamgunState.MainWindowVisibility = Visibility.Visible; DoStealFocus(); }; return(alarm); }
public NetworkWatcher(IBeamgunSettings settings, Report report, TripAlarm alarm) { var networkQuery = new WqlEventQuery("__InstanceCreationEvent", new TimeSpan(0, 0, 1), "TargetInstance isa \"Win32_NetworkAdapter\""); _watcher = new ManagementEventWatcher(networkQuery); _watcher.EventArrived += (caller, args) => { var obj = (ManagementBaseObject)args.NewEvent["TargetInstance"]; var alertMessage = $"Alerting on network adapter insertion: " + $"{obj["AdapterType"]} " + $"{obj["Caption"]} " + $"{obj["Description"]} " + $"{obj["DeviceID"]} " + $"{obj["GUID"]} " + $"{obj["MACAddress"]} " + $"{obj["Manufacturer"]} " + $"{obj["Name"]} " + $"{obj["PermanentAddress"]} " + $"{obj["NetworkAddresses"]} " + $"{obj["ProductName"]} " + $"{obj["ServiceName"]} " + $"{obj["SystemCreationClassName"]} " + $"{obj["SystemName"]} "; alarm(alertMessage); if (!settings.DisableNetworkAdapter) { return; } // TODO: Parse out into separate class? var query = $"SELECT * FROM Win32_NetworkAdapter WHERE DeviceID = \"{obj["DeviceID"]}\""; var searcher = new ManagementObjectSearcher(query); foreach (var item in searcher.Get()) { var managementObject = (ManagementObject)item; try { var disableCode = (uint)managementObject.InvokeMethod("Disable", null); report(disableCode == 0 ? "Network adapter successfully disabled." : $"Danger! Unable to disable network adapter: {disableCode}"); return; } catch (ManagementException e) { report($"Error disabling new network adapter: {e}"); } } }; _watcher.Start(); }
public VersionCheckerTimer(IBeamgunSettings beamgunSettings, VersionChecker checker, Report report) { _timer = new Timer(state => { try { checker.Update(beamgunSettings); var availableVersion = beamgunSettings.LatestVersion; var currentVersion = Assembly.GetExecutingAssembly().GetName().Version; report( availableVersion > currentVersion ? $"Version {availableVersion} is available at {beamgunSettings.DownloadUrl}" : $"Beamgun is up to date."); } catch (Exception e) { report($"Unable to connect to update server. {e.Message}"); } }, null, 0, beamgunSettings.UpdatePollInterval); }
public BeamgunState(IBeamgunSettings settings) { _settings = settings; }
public UsbStorageGuard(IBeamgunSettings settings) { _settings = settings; }
public DisableCommand(IViewModel viewModel, IBeamgunSettings beamgunSettings) { _viewModel = viewModel; _beamgunSettings = beamgunSettings; }