From d5a10a63bc04366f2c5776dbc5c2e3165f1add12 Mon Sep 17 00:00:00 2001 From: David Hall Date: Tue, 5 Sep 2017 09:59:00 -0600 Subject: [PATCH] Remove TaskSchedulerConfig (preparing for submodule) --- TaskSchedulerConfig/App.config | 6 - TaskSchedulerConfig/CommandLink.cs | 298 ------- TaskSchedulerConfig/Configurer.cs | 60 -- TaskSchedulerConfig/Diagnostic.cs | 260 ------ TaskSchedulerConfig/FileSystemRights.cs | 63 -- TaskSchedulerConfig/Firewall.cs | 146 ---- TaskSchedulerConfig/InteropUtil.cs | 100 --- TaskSchedulerConfig/LocalSecurityPolicy.cs | 466 ----------- TaskSchedulerConfig/Main.Designer.cs | 207 ----- TaskSchedulerConfig/Main.cs | 127 --- TaskSchedulerConfig/Main.resx | 211 ----- TaskSchedulerConfig/ProblemItem.Designer.cs | 155 ---- TaskSchedulerConfig/ProblemItem.cs | 40 - TaskSchedulerConfig/ProblemItem.resx | 120 --- TaskSchedulerConfig/Program.cs | 14 - .../Properties/AssemblyInfo.cs | 15 - .../Properties/Resources.Designer.cs | 280 ------- TaskSchedulerConfig/Properties/Resources.resx | 190 ----- .../109_AllAnnotations_Default_16x16_72.png | Bin 865 -> 0 bytes .../109_AllAnnotations_Error_16x16_72.png | Bin 865 -> 0 bytes .../109_AllAnnotations_Warning_16x16_72.png | Bin 618 -> 0 bytes TaskSchedulerConfig/Resources/Minus.bmp | Bin 306 -> 0 bytes TaskSchedulerConfig/Resources/Plus.bmp | Bin 306 -> 0 bytes .../StatusAnnotations_Play_16xLG.png | Bin 990 -> 0 bytes TaskSchedulerConfig/Resources/restarrow.gif | Bin 1035 -> 0 bytes TaskSchedulerConfig/Resources/selarrow.gif | Bin 1041 -> 0 bytes TaskSchedulerConfig/Resources/shield.gif | Bin 1033 -> 0 bytes TaskSchedulerConfig/Resources/tsnew.ico | Bin 32289 -> 0 bytes TaskSchedulerConfig/ServiceHelper.cs | 21 - TaskSchedulerConfig/ServicesDetail.cs | 68 -- .../TaskSchedulerConfig.csproj | 202 ----- TaskSchedulerConfig/TaskSchedulerConfig.snk | Bin 596 -> 0 bytes .../TaskSchedulerConfigKey.pfx | Bin 1617 -> 0 bytes TaskSchedulerConfig/UAC.cs | 784 ------------------ TaskSchedulerConfig/WizardForm.Designer.cs | 542 ------------ TaskSchedulerConfig/WizardForm.cs | 577 ------------- TaskSchedulerConfig/WizardForm.resx | 687 --------------- TaskSchedulerConfig/app.manifest | 76 -- TaskSchedulerConfig/packages.config | 5 - 39 files changed, 5720 deletions(-) delete mode 100644 TaskSchedulerConfig/App.config delete mode 100644 TaskSchedulerConfig/CommandLink.cs delete mode 100644 TaskSchedulerConfig/Configurer.cs delete mode 100644 TaskSchedulerConfig/Diagnostic.cs delete mode 100644 TaskSchedulerConfig/FileSystemRights.cs delete mode 100644 TaskSchedulerConfig/Firewall.cs delete mode 100644 TaskSchedulerConfig/InteropUtil.cs delete mode 100644 TaskSchedulerConfig/LocalSecurityPolicy.cs delete mode 100644 TaskSchedulerConfig/Main.Designer.cs delete mode 100644 TaskSchedulerConfig/Main.cs delete mode 100644 TaskSchedulerConfig/Main.resx delete mode 100644 TaskSchedulerConfig/ProblemItem.Designer.cs delete mode 100644 TaskSchedulerConfig/ProblemItem.cs delete mode 100644 TaskSchedulerConfig/ProblemItem.resx delete mode 100644 TaskSchedulerConfig/Program.cs delete mode 100644 TaskSchedulerConfig/Properties/AssemblyInfo.cs delete mode 100644 TaskSchedulerConfig/Properties/Resources.Designer.cs delete mode 100644 TaskSchedulerConfig/Properties/Resources.resx delete mode 100644 TaskSchedulerConfig/Resources/109_AllAnnotations_Default_16x16_72.png delete mode 100644 TaskSchedulerConfig/Resources/109_AllAnnotations_Error_16x16_72.png delete mode 100644 TaskSchedulerConfig/Resources/109_AllAnnotations_Warning_16x16_72.png delete mode 100644 TaskSchedulerConfig/Resources/Minus.bmp delete mode 100644 TaskSchedulerConfig/Resources/Plus.bmp delete mode 100644 TaskSchedulerConfig/Resources/StatusAnnotations_Play_16xLG.png delete mode 100644 TaskSchedulerConfig/Resources/restarrow.gif delete mode 100644 TaskSchedulerConfig/Resources/selarrow.gif delete mode 100644 TaskSchedulerConfig/Resources/shield.gif delete mode 100644 TaskSchedulerConfig/Resources/tsnew.ico delete mode 100644 TaskSchedulerConfig/ServiceHelper.cs delete mode 100644 TaskSchedulerConfig/ServicesDetail.cs delete mode 100644 TaskSchedulerConfig/TaskSchedulerConfig.csproj delete mode 100644 TaskSchedulerConfig/TaskSchedulerConfig.snk delete mode 100644 TaskSchedulerConfig/TaskSchedulerConfigKey.pfx delete mode 100644 TaskSchedulerConfig/UAC.cs delete mode 100644 TaskSchedulerConfig/WizardForm.Designer.cs delete mode 100644 TaskSchedulerConfig/WizardForm.cs delete mode 100644 TaskSchedulerConfig/WizardForm.resx delete mode 100644 TaskSchedulerConfig/app.manifest delete mode 100644 TaskSchedulerConfig/packages.config diff --git a/TaskSchedulerConfig/App.config b/TaskSchedulerConfig/App.config deleted file mode 100644 index 2c307fa..0000000 --- a/TaskSchedulerConfig/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/TaskSchedulerConfig/CommandLink.cs b/TaskSchedulerConfig/CommandLink.cs deleted file mode 100644 index c42e807..0000000 --- a/TaskSchedulerConfig/CommandLink.cs +++ /dev/null @@ -1,298 +0,0 @@ -using System; -using System.ComponentModel; -using System.Drawing; -using System.Runtime.InteropServices; -using System.Windows.Forms; - -namespace TaskSchedulerConfig -{ - internal class CommandLink : Button - { - private const int BCM_SETNOTE = 0x00001609; - private const int BCM_SETSHIELD = 0x0000160C; - private const int BS_COMMANDLINK = 0x0000000E; - - private Color activeTextColor; - private string description; - private Label lblDescription; - private Label lblText; - private bool mActivated; - private DisplayStyle mDisplayStyle = DisplayStyle.Arrow; - private bool mMouseOver; - private PictureBox picIcon; - private string text; - private Color textColor; - - public CommandLink() - { - if (IsVistaOrLater) - { - FlatStyle = FlatStyle.System; - } - else - { - BackColor = Parent?.BackColor ?? Color.White; - FlatStyle = FlatStyle.Standard; - Size = new Size(400, 72); - TabStop = false; - UseVisualStyleBackColor = false; - - textColor = Color.FromArgb(21, 28, 85); - activeTextColor = Color.FromArgb(7, 74, 229); - - lblText = new Label { AutoSize = true, BackColor = Color.Transparent, ForeColor = textColor, Location = new Point(27, 10), Name = "lblText", Size = new Size(0, 21), TabIndex = 0 }; - lblText.Font = new Font("Segoe UI", 12f, System.Drawing.FontStyle.Regular, GraphicsUnit.Point, (byte)0); - lblText.ForeColor = Color.FromArgb((int)(byte)21, (int)(byte)28, (int)(byte)85); - lblText.Click += (o, e) => OnClick(e); - lblText.MouseLeave += CommandLink_MouseLeave; - Controls.Add(lblText); - - lblDescription = new Label { BackColor = Color.Transparent, ForeColor = textColor, Location = new Point(33, 36), Name = "lblDescription", Size = new Size(364, 32), TabIndex = 1, UseCompatibleTextRendering = true }; - lblDescription.Font = new Font("Segoe UI", 9f, System.Drawing.FontStyle.Regular, GraphicsUnit.Point, (byte)0); - lblDescription.ForeColor = Color.FromArgb((int)(byte)21, (int)(byte)28, (int)(byte)85); - lblDescription.Click += (o, e) => OnClick(e); - lblDescription.MouseLeave += CommandLink_MouseLeave; - Controls.Add(lblDescription); - - picIcon = new PictureBox { BackColor = Color.Transparent, Location = new Point(10, 13), Name = "picIcon", Size = new Size(16, 16), TabIndex = 2, TabStop = false }; - picIcon.Image = Properties.Resources.restarrow; - picIcon.Click += (o, e) => OnClick(e); - picIcon.MouseLeave += CommandLink_MouseLeave; - Controls.Add(picIcon); - - Click += (o, e) => Selected?.Invoke(this, EventArgs.Empty); - MouseEnter += (o, e) => MouseOver = true; - MouseLeave += CommandLink_MouseLeave; - - MouseOver = false; - Activated = false; - } - } - - public CommandLink(DisplayStyle style, string text = null, string description = null) : this() - { - Style = style; - Text = text; - Description = description; - } - - public event EventHandler Selected; - - public enum DisplayStyle - { - Arrow, - Shield, - } - - [Bindable(true)] - [DefaultValue(null)] - public string Description - { - get { return description; } - set - { - if (IsVistaOrLater) - SendMessage(Handle, BCM_SETNOTE, IntPtr.Zero, value); - else - lblDescription.Text = value; - description = value; - } - } - - [Bindable(true)] - [DefaultValue(DisplayStyle.Arrow)] - public DisplayStyle Style - { - get { return mDisplayStyle; } - set - { - bool bInv = false; - if (mDisplayStyle != value) - { - bInv = true; - } - mDisplayStyle = value; - if (bInv) - { - if (IsVistaOrLater) - { - if (mDisplayStyle == DisplayStyle.Shield) - SendMessage(Handle, BCM_SETSHIELD, 0, 1); - } - else - { - base.FlatStyle = FlatStyle.Standard; - - switch (mDisplayStyle) - { - case DisplayStyle.Arrow: - picIcon.Image = mMouseOver ? Properties.Resources.selarrow : Properties.Resources.restarrow; - break; - - case DisplayStyle.Shield: - picIcon.Image = Properties.Resources.shield; - break; - - default: - picIcon.Image = null; - break; - } - Invalidate(); - } - } - } - } - - [Bindable(true)] - [DefaultValue(null)] - public override string Text - { - get { return text; } - set - { - if (IsVistaOrLater) - base.Text = value; - else - lblText.Text = value; - text = value; - } - } - - protected override CreateParams CreateParams - { - get - { - CreateParams cp = base.CreateParams; - if (IsVistaOrLater) - cp.Style |= BS_COMMANDLINK; - return cp; - } - } - - private bool Activated - { - get { return mActivated; } - set - { - bool bInv = false; - if (mActivated != value) - bInv = true; - mActivated = value; - if (bInv) - Invalidate(); - } - } - - private bool Default => (object.ReferenceEquals(FindForm().AcceptButton, this)); - - private static bool IsVistaOrLater => System.Environment.OSVersion.Version.Major > 5; - - private bool MouseOver - { - get { return mMouseOver; } - set - { - bool bInv = false; - if (mMouseOver != value) - bInv = true; - mMouseOver = value; - if (!IsVistaOrLater && bInv) - { - if (mMouseOver == true) - { - lblText.ForeColor = activeTextColor; - lblDescription.ForeColor = activeTextColor; - if (Style == DisplayStyle.Arrow) - picIcon.Image = Properties.Resources.selarrow; - } - else - { - lblText.ForeColor = textColor; - lblDescription.ForeColor = textColor; - if (Style == DisplayStyle.Arrow) - { - picIcon.Image = Properties.Resources.restarrow; - } - } - Invalidate(); - } - } - } - - public void ActivateChanged(bool activate) - { - Activated = activate; - } - - protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) - { - if (IsVistaOrLater) - { - base.OnPaint(e); - } - else - { - if (base.FlatStyle != FlatStyle.Standard) - base.FlatStyle = FlatStyle.Standard; - - Pen oPen = null; - Rectangle r = ClientRectangle; - Brush oBrush = null; - - r.Width -= 1; - r.Height -= 1; - - if (MouseOver) - { - //the mouse is over is, draw the hover border - oPen = new Pen(Color.FromArgb(198, 198, 198)); - oBrush = new System.Drawing.Drawing2D.LinearGradientBrush(ClientRectangle, BackColor, Color.FromArgb(246, 246, 246), System.Drawing.Drawing2D.LinearGradientMode.Vertical); - } - else if (Activated && Default) - { - //draw the blue border - oPen = new Pen(Color.FromArgb(198, 244, 255)); - r.Width -= 2; - r.Height -= 2; - r.X += 1; - r.Y += 1; - } - - if (oBrush == null) - { - e.Graphics.FillRectangle(new SolidBrush(BackColor), ClientRectangle); - } - else - { - e.Graphics.FillRectangle(oBrush, ClientRectangle); - oBrush.Dispose(); - } - if (oPen != null) - { - oPen.LineJoin = System.Drawing.Drawing2D.LineJoin.Round; - e.Graphics.DrawLine(oPen, r.X + 2, r.Y, r.X + r.Width - 2, r.Y); - e.Graphics.DrawLine(oPen, r.X + r.Width - 2, r.Y, r.X + r.Width, r.Y + 2); - e.Graphics.DrawLine(oPen, r.X + r.Width, r.Y + 2, r.X + r.Width, r.Y + r.Height - 2); - e.Graphics.DrawLine(oPen, r.X + r.Width, r.Y + r.Height - 2, r.X + r.Width - 2, r.Y + r.Height); - e.Graphics.DrawLine(oPen, r.X + r.Width - 2, r.Y + r.Height, r.X + 2, r.Y + r.Height); - e.Graphics.DrawLine(oPen, r.X + 2, r.Y + r.Height, r.X, r.Y + r.Height - 2); - e.Graphics.DrawLine(oPen, r.X, r.Y + r.Height - 2, r.X, r.Y + 2); - e.Graphics.DrawLine(oPen, r.X, r.Y + 2, r.X + 2, r.Y); - oPen.Dispose(); - } - } - } - - [DllImport("user32.dll", CharSet = CharSet.Unicode)] - private static extern int SendMessage(IntPtr hWnd, UInt32 Msg, int wParam, int lParam); - - [DllImport("user32", CharSet = CharSet.Unicode)] - private static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, string lParam); - - private void CommandLink_MouseLeave(object sender, System.EventArgs e) - { - MouseOver = ClientRectangle.Contains(PointToClient(Control.MousePosition)); - Invalidate(); - } - } -} \ No newline at end of file diff --git a/TaskSchedulerConfig/Configurer.cs b/TaskSchedulerConfig/Configurer.cs deleted file mode 100644 index 3b1f2e9..0000000 --- a/TaskSchedulerConfig/Configurer.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Runtime.InteropServices; -using System.Security.Principal; -using System.ServiceProcess; -using System.Text; - -namespace TaskSchedulerConfig -{ - class Configurer - { - Validator v; - - public Configurer(Validator validator) - { - v = validator; - } - - internal bool EnableFirewall(object obj) - { - v.Firewall.Enabled = true; - return v.Firewall.Enabled; - } - - internal bool EnableFirewallRule(object obj) - { - if (obj is Firewall.Rule) - { - v.Firewall.Rules[(Firewall.Rule)obj] = true; - return v.Firewall.Rules[(Firewall.Rule)obj]; - } - throw new ArgumentException(); - } - - internal bool RunRemoteRegistryService(object obj) - { - v.RemoteRegistryService.SetStartType(ServiceStartMode.Automatic); - v.RemoteRegistryService.Start(); - return v.RemoteRegistryServiceRunning; - } - } - - internal static class ServiceHelper - { - [DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - private static extern Boolean ChangeServiceConfig(IntPtr hService, UInt32 nServiceType, UInt32 nStartType, UInt32 nErrorControl, String lpBinaryPathName, String lpLoadOrderGroup, IntPtr lpdwTagId, [In] char[] lpDependencies, String lpServiceStartName, String lpPassword, String lpDisplayName); - - private const uint SERVICE_NO_CHANGE = 0xFFFFFFFF; - - public static void SetStartType(this ServiceController svc, ServiceStartMode mode) - { - using (var serviceHandle = svc.ServiceHandle) - if (!ChangeServiceConfig(serviceHandle.DangerousGetHandle(), SERVICE_NO_CHANGE, (uint)mode, SERVICE_NO_CHANGE, null, null, IntPtr.Zero, null, null, null, null)) - throw new ExternalException("Could not change service start type.", new Win32Exception()); - } - } -} diff --git a/TaskSchedulerConfig/Diagnostic.cs b/TaskSchedulerConfig/Diagnostic.cs deleted file mode 100644 index 0ac61fe..0000000 --- a/TaskSchedulerConfig/Diagnostic.cs +++ /dev/null @@ -1,260 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Security.AccessControl; -using System.Security.Policy; -using System.Security.Principal; -using System.ServiceProcess; - -namespace TaskSchedulerConfig -{ - class Diagnostics : List - { - ServicesDetail v; - - public Diagnostics(string server) - { - v = new ServicesDetail(server); - - Add(new Diagnostic - { - Name = "V1 Local Access: User has insufficient permissions to schedule tasks", - Description = "To schedule a V1 task, the current user must be a member of the Administrators, Backup Operators, or Server Operators group on the local computer.", - Condition = o => v.IsLocal, - Troubleshooter = o => !(v.UserIsAdmin || v.UserIsBackupOperator || v.UserIsServerOperator), - Resolution = new Resolution - { - Name = "Add user to Administrators group", - Description = "Adding the user to the Administrators group will give it the right to schedule a V1 task.", - RequiresConsent = true, - RequiresElevation = true, - Resolver = AddUserRole - } - }); - - Add(new Diagnostic - { - Name = "V1 Remote Access: Firewall is not enabled", - Description = "Firewall must be enabled on local system.", - Condition = o => v.IsLocal, - Troubleshooter = o => !v.Firewall.Enabled, - Resolution = new Resolution - { - Name = "Enable the firewall", - Description = "Enabling the firewall allows for the Task Scheduler to secure its interactions.", - RequiresElevation = true, - Resolver = o => v.Firewall.Enabled = true - } - }); - - Add(new Diagnostic - { - Name = "V1 Remote Access: \"File and Printer Sharing\" rule on the firewall is not enabled", - Description = "The \"File and Printer Sharing\" rule must be enabled in order for the Task Scheduler V1 to share its information with other computers.", - Troubleshooter = o => !v.Firewall.Rules[Firewall.Rule.FileAndPrinterSharing], - Resolution = new Resolution - { - Name = "Enable the \"File and Printer Sharing\" rule on the firewall", - Description = "Enabling the \"File and Printer Sharing\" rule on the firewall allows the Task Scheduler V1 to share its information with other computers.", - RequiresElevation = true, - Resolver = o => v.Firewall.Rules[Firewall.Rule.FileAndPrinterSharing] = true - } - }); - - Add(new Diagnostic - { - Name = "V1 Local Access: Invalid permissions on the \"%windir%\\Tasks\" directory", - Description = "Permissions on the \"%windir%\\Tasks\" directory do not allow V1 tasks to be created or edited by the current user", - Condition = o => v.IsLocal, - Troubleshooter = CheckTasksDirPerms, - Resolution = new Resolution - { - Name = "Give current user access to \"%windir%\\Tasks\" directory", - Description = "Giving the current user access to the \"%windir%\\Tasks\" directory will, in effect, give the user the right to create or edit V1 tasks.", - RequiresConsent = true, - RequiresElevation = true, - Resolver = UpdateTasksDirPerms - } - }); - - if (System.Environment.OSVersion.Version.Major < 6) - return; - - Add(new Diagnostic - { - Name = "V2 Local Access: User has insufficient permissions to schedule tasks", - Description = "To schedule a V2 task, the current user must have \"Log on as a batch job\" and \"Log on as a service\" privileges.", - Condition = o => v.IsLocal, - //Troubleshooter = o => !v.UserRights[LocalSecurityAccountPrivileges.LogonAsBatchJob], - RequiresElevation = true, - Troubleshooter = o => !v.UserAccessRights[LocalSecurity.LsaSecurityAccessRights.BatchLogon], - Resolution = new Resolution - { - Name = "Grant user \"Log on as a batch job\" right", - Description = "Adding the \"Log on as a batch job\" right to the user will give it the right to schedule a V2 task on this and other computers.", - RequiresConsent = true, - RequiresElevation = true, - Resolver = o => v.UserAccessRights[LocalSecurity.LsaSecurityAccessRights.BatchLogon] = true, - } - }); - - Add(new Diagnostic - { - Name = "V2 Remote Access: \"Remote Task Management\" rule on the firewall is not enabled", - Description = "The \"Remote Task Management\" rule must be enabled in order for the Task Scheduler V2 to share its information with other computers.", - Troubleshooter = o => !v.Firewall.Rules[Firewall.Rule.RemoteTaskManagement], - Resolution = new Resolution - { - Name = "Enable the \"Remote Task Management\" rule on the firewall", - Description = "Enabling the \"Remote Task Management\" rule on the firewall allows the Task Scheduler V2 to share its information with other computers.", - RequiresElevation = true, - Resolver = o => v.Firewall.Rules[Firewall.Rule.RemoteTaskManagement] = true - } - }); - - Add(new Diagnostic - { - Name = "V2 Remote Event Access: \"Remote Event Log Management\" rule on the firewall is not enabled", - Description = "The \"Remote Event Log Management\" rule must be enabled in order for the Task Scheduler V2 to share its events with other computers.", - Troubleshooter = o => !v.Firewall.Rules[Firewall.Rule.RemoteEventLogManagment], - Resolution = new Resolution - { - Name = "Enable the \"Remote Event Log Management\" rule on the firewall", - Description = "Enabling the \"Remote Event Log Management\" rule on the firewall allows the Task Scheduler V2 to share its events with other computers.", - RequiresElevation = true, - Resolver = o => v.Firewall.Rules[Firewall.Rule.RemoteEventLogManagment] = true - } - }); - - Add(new Diagnostic - { - Name = "V2 Remote Access: \"Remote Registry\" service is not running", - Description = "The \"Remote Registry\" service must be running in order for the Task Scheduler V1 to connect to this computer.", - Troubleshooter = o => !v.RemoteRegistryServiceRunning, - Resolution = new Resolution - { - Name = "Automatically start the \"Remote Registry\" service", - Description = "Starting the \"Remote Registry\" service and setting that service to start automatically will ensure that other V1 computers can connect to this computer.", - RequiresElevation = true, - Resolver = StartRemoteRegistryService - } - }); - } - - public event EventHandler ShowMessage; - - public IEnumerable Issues - { - get - { - foreach (var item in this) - { - if (item.HasIssue.HasValue && item.HasIssue.Value) - yield return item; - } - } - } - - public IEnumerable NonIsseus - { - get - { - foreach (var item in this) - { - if (item.Condition(null) && item.HasIssue.HasValue && !item.HasIssue.Value) - yield return item; - } - } - } - - public string Server => v.Server; - - public IEnumerable UnRun - { - get - { - foreach (var item in this) - { - if (item.Condition(null) && !item.HasIssue.HasValue) - yield return item; - } - } - } - - private void ShowThisMessage(string s) { ShowMessage?.Invoke(this, new ShowMessageEventArgs(s)); } - - private void AddUserRole(object role) - { - throw new InvalidOperationException("You must add the current user manually to the Administrators, Backup Operators, or Server Operators group."); - } - - private bool CheckTasksDirPerms(object obj) - { - ShowThisMessage("Checking permissions on \\Windows\\Tasks folder..."); - var dir = new DirectoryInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "Tasks")); - return !DirectoryHasPermission(dir, FileSystemRights.FullControl); - } - - private static bool DirectoryHasPermission(DirectoryInfo DirectoryPath, FileSystemRights AccessRight) - { - if (DirectoryPath != null) - try { return (DirectoryPath.GetEffectiveRights(WindowsIdentity.GetCurrent()) & AccessRight) == AccessRight; } catch { } - return false; - } - - private void StartRemoteRegistryService(object obj) - { - if (v.RemoteRegistryService.Status != System.ServiceProcess.ServiceControllerStatus.Stopped && v.RemoteRegistryService.CanStop) - { - ShowThisMessage("Stopping \"Remote Registry\" service..."); - v.RemoteRegistryService.Stop(); - v.RemoteRegistryService.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(30)); - } - if (v.RemoteRegistryService.Status == System.ServiceProcess.ServiceControllerStatus.Stopped) - { - ShowThisMessage("Setting \"Remote Registry\" service to start automatically..."); - v.RemoteRegistryService.SetStartType(System.ServiceProcess.ServiceStartMode.Automatic); - ShowThisMessage("Starting \"Remote Registry\" service..."); - v.RemoteRegistryService.Start(); - v.RemoteRegistryService.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Running, TimeSpan.FromSeconds(30)); - } - } - - private void UpdateTasksDirPerms(object obj) - { - ShowThisMessage("Adding user rights to \\Windows\\Tasks folder..."); - string dir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "Tasks"); - var di = new DirectoryInfo(dir); - var sec = di.GetAccessControl(AccessControlSections.Access); - sec.AddAccessRule(new FileSystemAccessRule(v.sid, FileSystemRights.Modify, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow)); - di.SetAccessControl(sec); - } - - public class Diagnostic - { - public bool? HasIssue { get; set; } - public bool? Resolved { get; set; } - public string Name { get; set; } - public string Description { get; set; } - public Predicate Condition { get; set; } = o => true; - public bool RequiresElevation { get; set; } = false; - public Predicate Troubleshooter { get; set; } - public Resolution Resolution { get; set; } - } - - public class Resolution - { - public string Name { get; set; } - public string Description { get; set; } - public bool RequiresConsent { get; set; } = false; - public bool RequiresElevation { get; set; } = false; - public Action Resolver { get; set; } - } - - public class ShowMessageEventArgs : EventArgs - { - public ShowMessageEventArgs(string msg) { Message = msg; } - public string Message { get; } - } - } -} diff --git a/TaskSchedulerConfig/FileSystemRights.cs b/TaskSchedulerConfig/FileSystemRights.cs deleted file mode 100644 index 3320d5d..0000000 --- a/TaskSchedulerConfig/FileSystemRights.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Security.AccessControl; -using System.Security.Principal; - -namespace System.IO -{ - internal static class FileSystemInfoExtensions - { - /// Determines the effective access rights for the given user. - /// The directory. - /// The windows identity. - /// Effective rights for identity. - public static FileSystemRights GetEffectiveRights(this DirectoryInfo path, WindowsIdentity windowsIdentity) => - GetEffectiveRights(path.GetAccessControl(), windowsIdentity); - - /// Determines the effective access rights for the given user. - /// The file. - /// The windows identity. - /// Effective rights for identity. - public static FileSystemRights GetEffectiveRights(this FileInfo path, WindowsIdentity windowsIdentity) => - GetEffectiveRights(path.GetAccessControl(), windowsIdentity); - - private static T GetEffectiveRights(CommonObjectSecurity securityObject, WindowsIdentity windowsIdentity) where T : struct, IConvertible where R : AccessRule - { - if (!typeof(T).IsEnum) - throw new ArgumentException($"Type '{typeof(T).FullName}' is not an enum"); - if (windowsIdentity == null) - throw new ArgumentNullException(nameof(windowsIdentity)); - if (securityObject == null) - throw new ArgumentNullException(nameof(securityObject)); - - int denyRights = 0, allowRights = 0; - - // get all access rules for the path - this works for a directory path as well as a file path - AuthorizationRuleCollection authorizationRules = securityObject.GetAccessRules(true, true, typeof(SecurityIdentifier)); - - // get the user's sids - List sids = new List(windowsIdentity.Groups.Select(g => g.Value)); - sids.Insert(0, windowsIdentity.User.Value); - - // get the access rules filtered by the user's sids - var rules = (from rule in authorizationRules.Cast() - where sids.Contains(rule.IdentityReference.Value) - select rule); - - System.Reflection.PropertyInfo pi = null; - foreach (var rule in rules) - { - if (pi == null) - pi = rule.GetType().GetProperty("AccessMask", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance, null, typeof(int), Type.EmptyTypes, null); - if (pi == null) - throw new InvalidOperationException("Unable to retrieve access mask."); - if (rule.AccessControlType == AccessControlType.Deny) - denyRights |= (int)pi.GetValue(rule, null); - else - allowRights |= (int)pi.GetValue(rule, null); - } - - return (T)Enum.ToObject(typeof(T), (allowRights | denyRights) ^ denyRights); - } - } -} diff --git a/TaskSchedulerConfig/Firewall.cs b/TaskSchedulerConfig/Firewall.cs deleted file mode 100644 index 23a2017..0000000 --- a/TaskSchedulerConfig/Firewall.cs +++ /dev/null @@ -1,146 +0,0 @@ -using System; - -namespace TaskSchedulerConfig -{ - class Firewall : IDisposable - { - internal static bool OldFirewall = Environment.OSVersion.Version.Major == 5; - - public enum Rule - { - FileAndPrinterSharing, - RemoteEventLogManagment, - RemoteTaskManagement - } - - public Firewall(string server) - { - Rules = new RulesContainer(this); - Type NetFwMgrType = Type.GetTypeFromProgID(OldFirewall ? "HNetCfg.FwMgr" : "HNetCfg.FwPolicy2", server, true); - Instance = Activator.CreateInstance(NetFwMgrType); - } - - public bool Enabled - { - get - { - if (OldFirewall) - return Instance.LocalPolicy.CurrentProfile.FirewallEnabled; - else - { - const int NET_FW_PROFILE2_DOMAIN = 1; - const int NET_FW_PROFILE2_PRIVATE = 2; - const int NET_FW_PROFILE2_PUBLIC = 4; - - bool result = false; - int CurrentProfiles = Instance.CurrentProfileTypes; - - // The returned 'CurrentProfiles' bit mask can have more than 1 bit set if multiple profiles are active or current at the same time - if ((CurrentProfiles & NET_FW_PROFILE2_DOMAIN) != 0 && Instance.FirewallEnabled(NET_FW_PROFILE2_DOMAIN)) - result = true; - if ((CurrentProfiles & NET_FW_PROFILE2_PRIVATE) != 0 && Instance.FirewallEnabled(NET_FW_PROFILE2_PRIVATE)) - result = true; - if ((CurrentProfiles & NET_FW_PROFILE2_PUBLIC) != 0 && Instance.FirewallEnabled(NET_FW_PROFILE2_PUBLIC)) - result = true; - return result; - } - } - set - { - if (OldFirewall) - { - Instance.LocalPolicy.CurrentProfile.FirewallEnabled = value; - } - else - { - int CurrentProfiles = Instance.CurrentProfileTypes; - Instance.set_FirewallEnabled(CurrentProfiles, value); - } - } - } - - public RulesContainer Rules { get; private set; } - - public dynamic Instance { get; private set; } - - public class RulesContainer - { - private const int NET_FW_SERVICE_FILE_AND_PRINT = 0; - private const string FPS = "File and Printer Sharing"; - private const string RELM = "Remote Event Log Management"; - private const string RSTM = "Remote Scheduled Tasks Management"; - - private Firewall firewall; - - internal RulesContainer(Firewall f) { firewall = f; } - - public bool this[Rule rule] - { - get - { - if (Firewall.OldFirewall) - { - switch (rule) - { - case Rule.FileAndPrinterSharing: - return firewall.Instance.LocalPolicy.CurrentProfile.Services.Item(NET_FW_SERVICE_FILE_AND_PRINT).Enabled; - default: - throw new IndexOutOfRangeException("Unrecognized rule"); - } - } - else - { - switch (rule) - { - case Rule.FileAndPrinterSharing: - return firewall.Instance.IsRuleGroupCurrentlyEnabled(FPS); - case Rule.RemoteEventLogManagment: - return firewall.Instance.IsRuleGroupCurrentlyEnabled(RELM); - case Rule.RemoteTaskManagement: - return firewall.Instance.IsRuleGroupCurrentlyEnabled(RSTM); - default: - throw new IndexOutOfRangeException("Unrecognized rule"); - } - } - } - set - { - if (Firewall.OldFirewall) - { - switch (rule) - { - case Rule.FileAndPrinterSharing: - firewall.Instance.LocalPolicy.CurrentProfile.Services.Item(NET_FW_SERVICE_FILE_AND_PRINT).Enabled = value; - break; - default: - throw new IndexOutOfRangeException("Unrecognized rule"); - } - } - else - { - switch (rule) - { - case Rule.FileAndPrinterSharing: - firewall.Instance.EnableRuleGroup(firewall.Instance.CurrentProfileTypes, FPS, value); - break; - case Rule.RemoteEventLogManagment: - firewall.Instance.EnableRuleGroup(firewall.Instance.CurrentProfileTypes, RELM, value); - break; - case Rule.RemoteTaskManagement: - firewall.Instance.EnableRuleGroup(firewall.Instance.CurrentProfileTypes, RSTM, value); - break; - default: - throw new IndexOutOfRangeException("Unrecognized rule"); - } - } - } - } - } - - public void Dispose() - { - Rules = null; - Instance = null; - } - } -} diff --git a/TaskSchedulerConfig/InteropUtil.cs b/TaskSchedulerConfig/InteropUtil.cs deleted file mode 100644 index cc3bf3b..0000000 --- a/TaskSchedulerConfig/InteropUtil.cs +++ /dev/null @@ -1,100 +0,0 @@ - -namespace System.Runtime.InteropServices -{ - internal static class InteropUtil - { - internal const int cbBuffer = 256; - - [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.LinkDemand, Flags = System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)] - public static T ToStructure(this IntPtr ptr) => (T)Marshal.PtrToStructure(ptr, typeof(T)); - - public static IntPtr StructureToPtr(object value) - { - IntPtr ret = Marshal.AllocHGlobal(Marshal.SizeOf(value)); - Marshal.StructureToPtr(value, ret, false); - return ret; - } - - [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.LinkDemand, Flags = System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)] - public static void AllocString(ref IntPtr ptr, ref uint size) - { - FreeString(ref ptr, ref size); - if (size == 0) size = cbBuffer; - ptr = Marshal.AllocHGlobal(cbBuffer); - } - - [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.LinkDemand, Flags = System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)] - public static void FreeString(ref IntPtr ptr, ref uint size) - { - if (ptr != IntPtr.Zero) - { - Marshal.FreeHGlobal(ptr); - ptr = IntPtr.Zero; - size = 0; - } - } - - [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.LinkDemand, Flags = System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)] - public static string GetString(IntPtr pString) => Marshal.PtrToStringUni(pString); - - [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.LinkDemand, Flags = System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)] - public static bool SetString(ref IntPtr ptr, ref uint size, string value = null) - { - string s = GetString(ptr); - if (value == string.Empty) value = null; - if (string.Compare(s, value) != 0) - { - FreeString(ref ptr, ref size); - if (value != null) - { - ptr = Marshal.StringToHGlobalUni(value); - size = (uint)value.Length + 1; - } - return true; - } - return false; - } - - /// - /// Converts an that points to a C-style array into a CLI array. - /// - /// Type of native structure used by the C-style array. - /// Output type for the CLI array. must be able to convert to . - /// The pointing to the native array. - /// The number of items in the native array. - /// An array of type containing the converted elements of the native array. - public static T[] ToArray(this IntPtr ptr, int count) where S : IConvertible - { - IntPtr tempPtr; - T[] ret = new T[count]; - int stSize = Marshal.SizeOf(typeof(S)); - for (int i = 0; i < count; i++) - { - tempPtr = new IntPtr(ptr.ToInt64() + (i * stSize)); - S val = ToStructure(tempPtr); - ret[i] = (T)Convert.ChangeType(val, typeof(T)); - } - return ret; - } - - /// - /// Converts an that points to a C-style array into a CLI array. - /// - /// Type of native structure used by the C-style array. - /// The pointing to the native array. - /// The number of items in the native array. - /// An array of type containing the elements of the native array. - public static T[] ToArray(this IntPtr ptr, int count) - { - IntPtr tempPtr; - T[] ret = new T[count]; - int stSize = Marshal.SizeOf(typeof(T)); - for (int i = 0; i < count; i++) - { - tempPtr = new IntPtr(ptr.ToInt64() + (i * stSize)); - ret[i] = ToStructure(tempPtr); - } - return ret; - } - } -} diff --git a/TaskSchedulerConfig/LocalSecurityPolicy.cs b/TaskSchedulerConfig/LocalSecurityPolicy.cs deleted file mode 100644 index f610308..0000000 --- a/TaskSchedulerConfig/LocalSecurityPolicy.cs +++ /dev/null @@ -1,466 +0,0 @@ -using System.Collections.Generic; -using System.Runtime.InteropServices; -// ReSharper disable InconsistentNaming -// ReSharper disable FieldCanBeMadeReadOnly.Local - -namespace System.Security.Policy -{ - /// Provides access to the local security authority on a given server. - public class LocalSecurity - { - private static LocalSecurity local; - private SafeLsaHandle handle; - private string svr; - - /// - /// Initializes a new instance of the class. - /// - public LocalSecurity() : this(null) { } - - /// Initializes a new instance of the class. - /// The server. Use null for the local server. - /// The access rights mask for the actions to be taken. - /// - public LocalSecurity(string server = null, LsaPolicyAccessRights accessRights = LsaPolicyAccessRights.AllAccess) - { - LSA_UNICODE_STRING systemName = server; - LSA_OBJECT_ATTRIBUTES objectAttributes = LSA_OBJECT_ATTRIBUTES.Empty; - ThrowIfLsaError(LsaOpenPolicy(systemName, ref objectAttributes, 0x000F0000 | (int)accessRights, out handle)); // Add in STANDARD_RIGHTS_REQUIRED - svr = server; - } - - /// Access rights for a local security policy. - [Flags] - public enum LsaPolicyAccessRights - { - /// - /// This access type is needed to read the target system's miscellaneous security policy information. This - /// includes the default quota, auditing, server state and role information, and trust information. This - /// access type is also needed to enumerate trusted domains, accounts, and privileges. - /// - ViewLocalInformation = 1, - - /// This access type is needed to view audit trail or audit requirements information. - ViewAuditInformation = 2, - - /// - /// This access type is needed to view sensitive information, such as the names of accounts established for - /// trusted domain relationships. - /// - GetPrivateInformation = 4, - - /// This access type is needed to change the account domain or primary domain information. - TrustAdmin = 8, - - /// This access type is needed to create a new Account object. - CreateAccount = 0x10, - - /// This access type is needed to create a new Private Data object. - CreateSecret = 0x20, - - /// Set the default system quotas that are applied to user accounts. - SetDefaultQuotaLimits = 0x80, - - /// This access type is needed to update the auditing requirements of the system. - SetAuditRequirements = 0x100, - - /// - /// This access type is needed to change the characteristics of the audit trail such as its maximum size or - /// the retention period for audit records, or to clear the log. - /// - AuditLogAdmin = 0x200, - - /// - /// This access type is needed to modify the server state or role (master/replica) information. It is also - /// needed to change the replica source and account name information. - /// - ServerAdmin = 0x400, - - /// This access type is needed to translate between names and SIDs. - LookupNames = 0x800, - - /// All access. - AllAccess = 0xFFF, - } - - /// Account rights determine the type of logon that a user account can perform. An administrator assigns account rights to user and group accounts. Each user's account rights include those granted to the user and to the groups to which the user belongs. - [Flags] - public enum LsaSecurityAccessRights - { - /// Required for an account to log on using the interactive logon type. - InteractiveLogon = 0x00000001, - - /// Required for an account to log on using the network logon type. - NetworkLogon = 0x00000002, - - /// Required for an account to log on using the batch logon type. - BatchLogon = 0x00000004, - - /// Required for an account to log on using the service logon type. - ServiceLogon = 0x00000010, - - /// Explicitly denies an account the right to log on using the interactive logon type. - DenyInteractiveLogon = 0x00000040, - - /// Explicitly denies an account the right to log on using the network logon type. - DenyNetworkLogon = 0x00000080, - - /// Explicitly denies an account the right to log on using the batch logon type. - DenyBatchLogon = 0x00000100, - - /// Explicitly denies an account the right to log on using the service logon type. - DenyServiceLogon = 0x00000200, - - /// Remote interactive logon - RemoteInteractiveLogon = 0x00000400, - - /// Explicitly denies an account the right to log on remotely using the interactive logon type. - DenyRemoteInteractiveLogon = 0x00000800, - } - - [Flags] - private enum LsaAccountAccessMask - { - View = 0x00000001, - AdjustPrivileges = 0x00000002, - AdjustQuotas = 0x00000004, - AdjustSystemAccess = 0x00000008, - } - - /// Gets the current user's account rights. - /// The current user's account rights. - public Rights CurrentAccountRights => new Rights(this); - - /// Gets the current user's system access. - /// The current user's system access. - public SystemAccess CurrentSystemAccess => new SystemAccess(this); - - /// Gets a instance for the local server and rights to lookup names. - /// A instance for the local server. - public static LocalSecurity Local => local ?? (local = new LocalSecurity()); - - /// Enumerates the accounts with the specified privilege. - /// The privilege name. - /// - /// An array of objects representing all accounts with the specified privilege. - /// - /// Unable to enumerate accounts. - public Principal.SecurityIdentifier[] EnumerateAccountsWithRight(string privilege) - { - SafeLsaMemoryHandle buffer; - uint count; - ThrowIfLsaError(LsaEnumerateAccountsWithUserRight(handle, privilege, out buffer, out count)); - return Array.ConvertAll(buffer.DangerousGetHandle().ToArray((int)count), i => new Principal.SecurityIdentifier(i.Sid)); - } - - /// Gets the account rights for the specified user. - /// The user name of the account for which to manage privileges. - /// A instance for the specified user. - public Rights UserAccountRights(string user) => new Rights(this, user); - - /// Gets the system access for the specified user. - /// The user name of the account for which to manage privileges. - /// A instance for the specified user. - public SystemAccess UserSystemAccess(string user) => new SystemAccess(this, user); - - [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true, PreserveSig = true)] - [return: MarshalAs(UnmanagedType.Bool)] - private static extern bool LookupAccountName(string lpSystemName, string lpAccountName, SafeMemoryHandle psid, ref int cbsid, Text.StringBuilder domainName, ref int cbdomainLength, ref int use); - - [DllImport("advapi32.dll", PreserveSig = true)] - private static extern int LsaAddAccountRights(SafeLsaHandle PolicyHandle, SafeMemoryHandle AccountSid, LSA_UNICODE_STRING[] UserRights, int CountOfRights); - - [DllImport("advapi32.dll")] - private static extern int LsaClose(IntPtr ObjectHandle); - - [DllImport("advapi32.dll", PreserveSig = true)] - private static extern int LsaCreateAccount(SafeLsaHandle PolicyHandle, SafeMemoryHandle AccountSid, LsaAccountAccessMask DesiredAccess, out SafeLsaHandle AccountHandle); - - [DllImport("advapi32.dll", PreserveSig = true)] - private static extern int LsaEnumerateAccountRights(SafeLsaHandle PolicyHandle, SafeMemoryHandle AccountSid, out IntPtr UserRightsPtr, out int CountOfRights); - - [DllImport("advapi32.dll", PreserveSig = true)] - private static extern int LsaEnumerateAccountsWithUserRight(SafeLsaHandle PolicyHandle, LSA_UNICODE_STRING UserRights, out SafeLsaMemoryHandle EnumerationBuffer, out uint CountReturned); - - [DllImport("advapi32.dll", PreserveSig = true)] - private static extern int LsaFreeMemory(IntPtr Buffer); - - [DllImport("advapi32.dll", PreserveSig = true)] - private static extern int LsaGetSystemAccessAccount(SafeLsaHandle AccountHandle, out int SystemAccess); - - [DllImport("advapi32.dll")] - private static extern int LsaNtStatusToWinError(int status); - - [DllImport("advapi32.dll", PreserveSig = true)] - private static extern int LsaOpenAccount(SafeLsaHandle PolicyHandle, SafeMemoryHandle AccountSid, LsaAccountAccessMask DesiredAccess, out SafeLsaHandle AccountHandle); - - [DllImport("advapi32.dll", PreserveSig = true)] - private static extern int LsaOpenPolicy(LSA_UNICODE_STRING SystemName, ref LSA_OBJECT_ATTRIBUTES ObjectAttributes, int DesiredAccess, out SafeLsaHandle PolicyHandle); - - [DllImport("advapi32.dll", PreserveSig = true)] - private static extern int LsaRemoveAccountRights(SafeLsaHandle PolicyHandle, SafeMemoryHandle AccountSid, LSA_UNICODE_STRING[] UserRights, int CountOfRights); - - [DllImport("advapi32.dll", PreserveSig = true)] - private static extern int LsaSetSystemAccessAccount(SafeLsaHandle AccountHandle, int SystemAccess); - - private void AddRight(string accountName, string privilegeName) - { - LSA_UNICODE_STRING[] userRights = { privilegeName }; - ThrowIfLsaError(LsaAddAccountRights(handle, GetSid(accountName), userRights, userRights.Length)); - } - - private SafeLsaHandle GetAccount(string accountName, LsaAccountAccessMask mask = LsaAccountAccessMask.View) - { - var sid = GetSid(accountName); - SafeLsaHandle hAcct; - int res = LsaNtStatusToWinError(LsaOpenAccount(handle, sid, mask, out hAcct)); - if (res == 2) - ThrowIfLsaError(LsaCreateAccount(handle, sid, mask, out hAcct)); - else if (res != 0) - throw new ComponentModel.Win32Exception(res); - return hAcct; - } - - private string[] GetRights(string accountName) - { - IntPtr userRightsPtr; - int countOfRights; - int result = LsaNtStatusToWinError(LsaEnumerateAccountRights(handle, GetSid(accountName), out userRightsPtr, out countOfRights)); - if (result == 2) // Try adding account and retrying - { - using (GetAccount(accountName)) - result = LsaNtStatusToWinError(LsaEnumerateAccountRights(handle, GetSid(accountName), out userRightsPtr, out countOfRights)); - } - if (result != 0 && result != 2) - throw new ComponentModel.Win32Exception(result); - return Array.ConvertAll(userRightsPtr.ToArray(countOfRights), u => u.ToString()); - } - - private SafeMemoryHandle GetSid(string accountName) - { - int sidSize = 0, nameSize = 0, accountType = 0; - LookupAccountName(svr, accountName, new SafeMemoryHandle(), ref sidSize, null, ref nameSize, ref accountType); - var domainName = new Text.StringBuilder(nameSize); - SafeMemoryHandle sid = new SafeMemoryHandle(sidSize); - if (!LookupAccountName(string.Empty, accountName, sid, ref sidSize, domainName, ref nameSize, ref accountType)) - throw new ComponentModel.Win32Exception(); - return sid; - } - - private LsaSecurityAccessRights GetSystemAccess(SafeLsaHandle hAcct) - { - int rights; - ThrowIfLsaError(LsaGetSystemAccessAccount(hAcct, out rights)); - return (LsaSecurityAccessRights)rights; - } - - private void RemoveRight(string accountName, string privilegeName) - { - LSA_UNICODE_STRING[] userRights = new LSA_UNICODE_STRING[] { privilegeName }; - ThrowIfLsaError(LsaRemoveAccountRights(handle, GetSid(accountName), userRights, userRights.Length)); - } - - private void SetSystemAccess(SafeLsaHandle hAcct, LsaSecurityAccessRights rights) - { - LsaSecurityAccessRights cur = GetSystemAccess(hAcct); - ThrowIfLsaError(LsaSetSystemAccessAccount(hAcct, (int)(cur | rights))); - } - - private static void ThrowIfLsaError(int lsaRetVal) - { - int ret = LsaNtStatusToWinError(lsaRetVal); - if (ret != 0) - throw new ComponentModel.Win32Exception(ret); - } - - [StructLayout(LayoutKind.Sequential)] - private struct LSA_ENUMERATION_INFORMATION - { - public IntPtr Sid; - } - - [StructLayout(LayoutKind.Sequential)] - private struct LSA_OBJECT_ATTRIBUTES - { - private int Length; - private IntPtr RootDirectory; - private IntPtr ObjectName; - private UInt32 Attributes; - private IntPtr SecurityDescriptor; - private IntPtr SecurityQualityOfService; - - public static LSA_OBJECT_ATTRIBUTES Empty => new LSA_OBJECT_ATTRIBUTES { Length = Marshal.SizeOf(typeof(LSA_OBJECT_ATTRIBUTES)) }; - } - - /// Allows for the privileges of a user to be retrieved, enumerated and set. - /// - public class Rights : IEnumerable - { - private LocalSecurity ctrl; - private string user; - - /// Initializes a new instance of the class. - /// The parent. - /// Name of the user. - public Rights(LocalSecurity parent, string userName = null) - { - ctrl = parent; user = userName ?? CurrentUserName; - } - - private static string CurrentUserName => Principal.WindowsIdentity.GetCurrent().Name; - - /// Gets or sets the enablement of the specified privilege. - /// true if the specified privilege is enabled; otherwise false. - /// The name of the privilege. - /// A value that represents the enablement of the specified privilege. - public bool this[string right] - { - get { return Array.IndexOf(ctrl.GetRights(user), right) != -1; } - set { if (value) ctrl.AddRight(user, right); else ctrl.RemoveRight(user, right); } - } - - Collections.IEnumerator Collections.IEnumerable.GetEnumerator() => GetEnumerator(); - - /// Returns an enumerator that iterates all of the user's current privileges. - /// - /// A that can be used to iterate through the collection. - /// - public IEnumerator GetEnumerator() => Array.AsReadOnly(ctrl.GetRights(user)).GetEnumerator(); - } - - /// Allows for the privileges of a user to be retrieved, enumerated and set. - /// - public class SystemAccess - { - private LocalSecurity ctrl; - private string user; - - /// Initializes a new instance of the class. - /// The parent. - /// Name of the user. - public SystemAccess(LocalSecurity parent, string userName = null) - { - ctrl = parent; user = userName ?? CurrentUserName; - } - - private static string CurrentUserName => Principal.WindowsIdentity.GetCurrent().Name; - - /// Gets or sets the enablement of the specified privilege. - /// true if the specified privilege is enabled; otherwise false. - /// The name of the privilege. - /// A value that represents the enablement of the specified privilege. - public bool this[LsaSecurityAccessRights right] - { - get { return (ctrl.GetSystemAccess(ctrl.GetAccount(user)) & right) == right; } - set - { - var hAcct = ctrl.GetAccount(user, LsaAccountAccessMask.View | LsaAccountAccessMask.AdjustSystemAccess); - var cur = ctrl.GetSystemAccess(hAcct); - bool hasFlag = cur.HasFlag(right); - if ((hasFlag && value) || (!hasFlag && !value)) - return; - if (value) - cur |= right; - else - cur &= ~right; - ctrl.SetSystemAccess(hAcct, cur); - } - } - } - - [StructLayout(LayoutKind.Sequential)] - private sealed class LSA_UNICODE_STRING : IDisposable - { - private ushort length; - private ushort MaximumLength; - private IntPtr Buffer; - - public LSA_UNICODE_STRING() : this(null) - { - } - - public LSA_UNICODE_STRING(string s) - { - if (s == null) - { - length = MaximumLength = 0; - Buffer = IntPtr.Zero; - } - else - { - // Unicode strings max. 32KB - if (s.Length > 0x7ffe) - throw new ArgumentException("String too long"); - Buffer = Marshal.StringToHGlobalUni(s); - own = true; - length = (ushort)(s.Length * Text.UnicodeEncoding.CharSize); - MaximumLength = (ushort)(length + Text.UnicodeEncoding.CharSize); - } - } - - public int Length => length / Text.UnicodeEncoding.CharSize; - - public override string ToString() => Marshal.PtrToStringUni(Buffer, Length); - - private bool own { get; } - - void IDisposable.Dispose() - { - if (own && Buffer != IntPtr.Zero) - Marshal.FreeHGlobal(Buffer); - } - - public static implicit operator LSA_UNICODE_STRING(string s) => new LSA_UNICODE_STRING(s); - } - - private sealed class SafeLsaHandle : Microsoft.Win32.SafeHandles.SafeHandleZeroOrMinusOneIsInvalid - { - public SafeLsaHandle() : base(true) - { - } - - internal SafeLsaHandle(IntPtr ptr) : base(true) - { - SetHandle(ptr); - } - - protected override bool ReleaseHandle() => LsaClose(handle) == 0; - } - - private sealed class SafeLsaMemoryHandle : SafeBuffer - { - public SafeLsaMemoryHandle() : base(true) - { - } - - internal SafeLsaMemoryHandle(IntPtr ptr) : base(true) - { - SetHandle(ptr); - } - - protected override bool ReleaseHandle() => LsaFreeMemory(handle) == 0; - } - - private sealed class SafeMemoryHandle : SafeBuffer - { - public SafeMemoryHandle() : base(true) - { - } - - public SafeMemoryHandle(int bytes) : base(true) - { - SetHandle(Marshal.AllocHGlobal(bytes)); - } - - internal SafeMemoryHandle(IntPtr ptr) : base(true) - { - SetHandle(ptr); - } - - protected override bool ReleaseHandle() - { - try { Marshal.FreeHGlobal(handle); handle = IntPtr.Zero; return true; } catch { return false; } - } - } - } -} \ No newline at end of file diff --git a/TaskSchedulerConfig/Main.Designer.cs b/TaskSchedulerConfig/Main.Designer.cs deleted file mode 100644 index bac1a3f..0000000 --- a/TaskSchedulerConfig/Main.Designer.cs +++ /dev/null @@ -1,207 +0,0 @@ -namespace TaskSchedulerConfig -{ - partial class Main - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main)); - this.localConfigList = new System.Windows.Forms.ListView(); - this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.imageList1 = new System.Windows.Forms.ImageList(this.components); - this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); - this.cancelBtn = new System.Windows.Forms.Button(); - this.panel1 = new System.Windows.Forms.Panel(); - this.flowLayoutPanel2 = new System.Windows.Forms.FlowLayoutPanel(); - this.fixItemBtn = new System.Windows.Forms.Button(); - this.fixAllBtn = new System.Windows.Forms.Button(); - this.retestBtn = new System.Windows.Forms.Button(); - this.panel2 = new System.Windows.Forms.Panel(); - this.flowLayoutPanel1.SuspendLayout(); - this.flowLayoutPanel2.SuspendLayout(); - this.panel2.SuspendLayout(); - this.SuspendLayout(); - // - // localConfigList - // - this.localConfigList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.columnHeader1}); - this.localConfigList.Dock = System.Windows.Forms.DockStyle.Fill; - this.localConfigList.FullRowSelect = true; - this.localConfigList.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; - this.localConfigList.Location = new System.Drawing.Point(10, 10); - this.localConfigList.MultiSelect = false; - this.localConfigList.Name = "localConfigList"; - this.localConfigList.Size = new System.Drawing.Size(444, 262); - this.localConfigList.SmallImageList = this.imageList1; - this.localConfigList.TabIndex = 0; - this.localConfigList.UseCompatibleStateImageBehavior = false; - this.localConfigList.View = System.Windows.Forms.View.Details; - this.localConfigList.SelectedIndexChanged += new System.EventHandler(this.localConfigList_SelectedIndexChanged); - // - // columnHeader1 - // - this.columnHeader1.Width = 440; - // - // imageList1 - // - this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream"))); - this.imageList1.TransparentColor = System.Drawing.Color.Transparent; - this.imageList1.Images.SetKeyName(0, "109_AllAnnotations_Error_16x16_72.png"); - this.imageList1.Images.SetKeyName(1, "109_AllAnnotations_Default_16x16_72.png"); - this.imageList1.Images.SetKeyName(2, "109_AllAnnotations_Info_16x16_72.png"); - // - // flowLayoutPanel1 - // - this.flowLayoutPanel1.AutoSize = true; - this.flowLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.flowLayoutPanel1.BackColor = System.Drawing.SystemColors.Control; - this.flowLayoutPanel1.Controls.Add(this.cancelBtn); - this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft; - this.flowLayoutPanel1.Location = new System.Drawing.Point(0, 283); - this.flowLayoutPanel1.Name = "flowLayoutPanel1"; - this.flowLayoutPanel1.Size = new System.Drawing.Size(549, 43); - this.flowLayoutPanel1.TabIndex = 1; - // - // cancelBtn - // - this.cancelBtn.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.cancelBtn.Location = new System.Drawing.Point(464, 10); - this.cancelBtn.Margin = new System.Windows.Forms.Padding(10); - this.cancelBtn.Name = "cancelBtn"; - this.cancelBtn.Size = new System.Drawing.Size(75, 23); - this.cancelBtn.TabIndex = 0; - this.cancelBtn.Text = "Close"; - this.cancelBtn.UseVisualStyleBackColor = true; - this.cancelBtn.Click += new System.EventHandler(this.cancelBtn_Click); - // - // panel1 - // - this.panel1.BackColor = System.Drawing.SystemColors.ControlDark; - this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.panel1.Location = new System.Drawing.Point(0, 282); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(549, 1); - this.panel1.TabIndex = 2; - // - // flowLayoutPanel2 - // - this.flowLayoutPanel2.AutoSize = true; - this.flowLayoutPanel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.flowLayoutPanel2.Controls.Add(this.fixItemBtn); - this.flowLayoutPanel2.Controls.Add(this.fixAllBtn); - this.flowLayoutPanel2.Controls.Add(this.retestBtn); - this.flowLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Right; - this.flowLayoutPanel2.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; - this.flowLayoutPanel2.Location = new System.Drawing.Point(454, 0); - this.flowLayoutPanel2.Name = "flowLayoutPanel2"; - this.flowLayoutPanel2.Size = new System.Drawing.Size(95, 282); - this.flowLayoutPanel2.TabIndex = 3; - // - // fixItemBtn - // - this.fixItemBtn.Enabled = false; - this.fixItemBtn.Location = new System.Drawing.Point(10, 10); - this.fixItemBtn.Margin = new System.Windows.Forms.Padding(10, 10, 10, 7); - this.fixItemBtn.Name = "fixItemBtn"; - this.fixItemBtn.Size = new System.Drawing.Size(75, 23); - this.fixItemBtn.TabIndex = 0; - this.fixItemBtn.Text = "Fix"; - this.fixItemBtn.UseVisualStyleBackColor = true; - this.fixItemBtn.Click += new System.EventHandler(this.fixItemBtn_Click); - // - // fixAllBtn - // - this.fixAllBtn.Enabled = false; - this.fixAllBtn.Location = new System.Drawing.Point(10, 40); - this.fixAllBtn.Margin = new System.Windows.Forms.Padding(10, 0, 10, 7); - this.fixAllBtn.Name = "fixAllBtn"; - this.fixAllBtn.Size = new System.Drawing.Size(75, 23); - this.fixAllBtn.TabIndex = 1; - this.fixAllBtn.Text = "Fix All"; - this.fixAllBtn.UseVisualStyleBackColor = true; - this.fixAllBtn.Click += new System.EventHandler(this.fixAllBtn_Click); - // - // retestBtn - // - this.retestBtn.Location = new System.Drawing.Point(10, 70); - this.retestBtn.Margin = new System.Windows.Forms.Padding(10, 0, 10, 10); - this.retestBtn.Name = "retestBtn"; - this.retestBtn.Size = new System.Drawing.Size(75, 23); - this.retestBtn.TabIndex = 2; - this.retestBtn.Text = "Retest"; - this.retestBtn.UseVisualStyleBackColor = true; - this.retestBtn.Click += new System.EventHandler(this.retestBtn_Click); - // - // panel2 - // - this.panel2.Controls.Add(this.localConfigList); - this.panel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel2.Location = new System.Drawing.Point(0, 0); - this.panel2.Name = "panel2"; - this.panel2.Padding = new System.Windows.Forms.Padding(10, 10, 0, 10); - this.panel2.Size = new System.Drawing.Size(454, 282); - this.panel2.TabIndex = 4; - // - // Main - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.SystemColors.Window; - this.CancelButton = this.cancelBtn; - this.ClientSize = new System.Drawing.Size(549, 326); - this.Controls.Add(this.panel2); - this.Controls.Add(this.flowLayoutPanel2); - this.Controls.Add(this.panel1); - this.Controls.Add(this.flowLayoutPanel1); - this.Name = "Main"; - this.Text = "Task Scheduler Configuration"; - this.Load += new System.EventHandler(this.Main_Load); - this.flowLayoutPanel1.ResumeLayout(false); - this.flowLayoutPanel2.ResumeLayout(false); - this.panel2.ResumeLayout(false); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.ListView localConfigList; - private System.Windows.Forms.ColumnHeader columnHeader1; - private System.Windows.Forms.ImageList imageList1; - private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; - private System.Windows.Forms.Button cancelBtn; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel2; - private System.Windows.Forms.Button fixItemBtn; - private System.Windows.Forms.Button fixAllBtn; - private System.Windows.Forms.Panel panel2; - private System.Windows.Forms.Button retestBtn; - } -} \ No newline at end of file diff --git a/TaskSchedulerConfig/Main.cs b/TaskSchedulerConfig/Main.cs deleted file mode 100644 index c6e2212..0000000 --- a/TaskSchedulerConfig/Main.cs +++ /dev/null @@ -1,127 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Windows.Forms; -using Res = TaskSchedulerConfig.Properties.Resources; - -namespace TaskSchedulerConfig -{ - public partial class Main : Form - { - private ListViewItem curSel; - private Configurer fixer; - private Dictionary groups = new Dictionary(); - private Validator v; - - public Main() - { - InitializeComponent(); - } - - private void AddLocalItem(string group, string text, object o = null, bool success = true, Predicate fix = null, object fixParam = null, string tooltip = null) - { - ListViewGroup g = null; - if (!string.IsNullOrEmpty(group) && !groups.TryGetValue(group, out g)) - groups.Add(group, g = localConfigList.Groups.Add(group, group)); - var i = new ListViewItem(string.Format(text, o), success ? 1 : 0); - if (fix != null) - i.Tag = new FixInfo(fix, fixParam); - i.ToolTipText = tooltip; - localConfigList.Items.Add(i); - i.Group = g; - } - - private void cancelBtn_Click(object sender, EventArgs e) - { - Close(); - } - - private void fixAllBtn_Click(object sender, EventArgs e) - { - foreach (ListViewItem item in localConfigList.Items) - if (item.ImageIndex == 0 && item.Tag != null) - if (RunFix(item.Tag as FixInfo)) - item.ImageIndex = 1; - } - - private void fixItemBtn_Click(object sender, EventArgs e) - { - var fi = curSel?.Tag as FixInfo; - if (curSel != null && RunFix(fi)) - curSel.ImageIndex = 1; - } - - private void localConfigList_SelectedIndexChanged(object sender, EventArgs e) - { - curSel = localConfigList.SelectedItems.Count > 0 ? localConfigList.SelectedItems[0] : null; - fixItemBtn.Enabled = (curSel?.ImageIndex ?? 1) == 0 && curSel?.Tag != null; - } - - private void Main_Load(object sender, EventArgs e) - { - v = new Validator(null); - fixer = new Configurer(v); - retestBtn_Click(this, EventArgs.Empty); - } - - private void retestBtn_Click(object sender, EventArgs e) - { - localConfigList.Items.Clear(); - Predicate c = d => { try { return !d.Troubleshooter(null); } catch { return false; } }; - Predicate f = d => { try { d.Resolution.Resolver(null); return !d.Troubleshooter(null); } catch { return false; } }; - - foreach (var d in new Diagnostics(null)) - { - AddLocalItem(null, d.Name, null, c(d), o => f(d), null, d.Description); - } - - /*bool v2 = Environment.OSVersion.Version.Major > 5; - - AddLocalItem(Res.GroupGeneral, Res.UserIsAdmin, v.User, v.UserIsAdmin); - AddLocalItem(Res.GroupGeneral, Res.UserIsServerOperator, v.User, v.UserIsServerOperator); - AddLocalItem(Res.GroupGeneral, Res.UserIsBackupOperator, v.User, v.UserIsBackupOperator); - AddLocalItem(Res.GroupGeneral, Res.FirewallEnabled, null, v.Firewall.Enabled, fixer.EnableFirewall); - - AddLocalItem(Res.GroupV1, Res.UserHasCorrectRights, v.User, v.UserIsAdmin || v.UserIsBackupOperator || v.UserIsServerOperator); - AddLocalItem(Res.GroupV1, Res.FirewallRuleEnabled, Res.FileAndPrinterSharingRule, v.Firewall.Rules[Firewall.Rule.FileAndPrinterSharing], fixer.EnableFirewallRule, Firewall.Rule.FileAndPrinterSharing); - - if (v2) - { - AddLocalItem(Res.GroupV2, Res.FirewallRuleEnabled, Res.RemoteTaskManagementRule, v.Firewall.Rules[Firewall.Rule.RemoteTaskManagement], fixer.EnableFirewallRule, Firewall.Rule.RemoteTaskManagement); - AddLocalItem(Res.GroupV2, Res.RemoteRegistryServiceRunning, null, v.RemoteRegistryServiceRunning, fixer.RunRemoteRegistryService); - }*/ - - bool hasError = false; - foreach (ListViewItem item in localConfigList.Items) - if (item.ImageIndex == 0 && item.Tag != null) - hasError = true; - fixAllBtn.Enabled = hasError; - } - - private bool RunFix(FixInfo fi) - { - if (fi != null) - { - try - { - return fi.meth(fi.methParam); - } - catch (Exception ex) - { - MessageBox.Show(this, ex.Message, null, MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - return false; - } - - private class FixInfo - { - public Predicate meth; - public object methParam; - - public FixInfo(Predicate m, object p) - { - meth = m; methParam = p; - } - } - } -} \ No newline at end of file diff --git a/TaskSchedulerConfig/Main.resx b/TaskSchedulerConfig/Main.resx deleted file mode 100644 index de4a961..0000000 --- a/TaskSchedulerConfig/Main.resx +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD0 - EgAAAk1TRnQBSQFMAgEBAwEAARgBAAEYAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA - AwABEAMAAQEBAAEgBgABECIAAy0BRgNMAY0BXwFeAV8BxwNqAfADagHwAV8BXgFfAccDTAGNAy0BRiAA - Ay0BRgNMAY0BXwFeAV8BxwNqAfADagHwAV8BXgFfAccDTAGNAy0BRiAAAzIBRgFXAVYBVwGNAWkBaAFp - AccBbwFuAW8B8AFvAW4BbwHwAWkBaAFpAccBVwFWAVcBjQMyAUZYAAMXASADTAGMAYECfwH1AaUBoQGg - Af8BvgG5AbcB/wHQAckByAH/AdAByQHIAf8BvgG5AbcB/wGlAaEBoAH/AYECfwH1A0wBjAMXASAQAAMX - ASADTAGMAYECfwH1AaUBoQGgAf8BvgG5AbcB/wHQAckByAH/AdAByQHIAf8BvgG5AbcB/wGlAaEBoAH/ - AYECfwH1A0wBjAMXASAQAAMZASADVgGMAYUCgwH1AaUBoQGgAf8BvgG5AbcB/wHQAckByAH/AdAByQHI - Af8BvgG5AbcB/wGlAaEBoAH/AYUCgwH1A1YBjAMZASBMAAMXASADVAGjAZsClwH/AbQBrwG8Af8BhAF8 - AcQB/wFPAU0BwwH/AikBwAH/AikBwgH/AU8BTQHFAf8BhAGBAcgB/wG0Aa8BvQH/AZsClwH/A1QBowMX - ASAIAAMXASADVAGjAZsClwH/AbIBuwGtAf8BeAGzAXsB/wE4AZ4BQQH/ARcBlwElAf8BFgGjASsB/wFA - AbgBVQH/AYABwgGHAf8BswG8Aa4B/wGbApcB/wNUAaMDFwEgCAADGQEgAV8BXgFfAaMBmwKXAf8BxAGz - Aa8B/wHJAZIBggH/AcMBaAFPAf8BlgFFASsB/wGWAUYBLAH/AaQBZQFQAf8BzAGPAYAB/wHFAbIBrgH/ - AZsClwH/AV8BXgFfAaMDGQEgSAADTAGMAZsClwH/AaoBpQHEAf8BOwE5AbYB/wIAAawB/wIAAZ0B/wIA - Aa8B/wIAAbgB/wIAAcEB/wIAAZsB/wE8ATkBtQH/AakBpAHHAf8BmwKXAf8DTAGMCAADTAGMAZsClwH/ - AaYBvwGjAf8BQAGpAUoB/wEgAZIBJQH/AfcB/AH4Af8BswHrAb0B/wFDAZYBQgH/AQcBogEfAf8BBQGx - AScB/wFIAb0BXQH/AakBwQGlAf8BmwKXAf8DTAGMCAADVgGMAZsClwH/AcsBsAGmAf8BvwFuAVMB/wG2 - AT8BGwH/AckBjAF3Af8B3QG7AbEB/wHdAbwBtAH/AbABZwFTAf8BmAExARMB/wHIAWwBVgH/Ac4BrAGj - Af8BmwKXAf8DVgGMRAADLQFGAYECfwH1AbYBsAG9Af8BVAFSAbgB/wKAAdAB/wK7AegB/wIAAXYB/wIA - AZ8B/wIAAbMB/wIBAaEB/wLXAewB/wKFAcsB/wE5ATgBsgH/AbQBrwG9Af8BgQJ/AfUDLQFGAy0BRgGB - An8B9QGyAb0BrQH/AUUBswFRAf8BJwGcAS8B/wH8Af4B/AX/Af4D/wGjAeMBrgH/ARQBkAEdAf8BBQGo - ASIB/wEFAa8BJgH/AUoBtwFaAf8BswG8Aa4B/wGBAn8B9QMtAUYDMgFGAYUCgwH1AcUBtgGxAf8BvQFu - AVIB/wGxAUMBHgH/AbEBPwEaAf8B1wGqAZsB/wH6AvsB/wH6AvsB/wG5AXUBYwH/AZoBMgEUAf8BvwE/ - AR8B/wHHAWwBVgH/AcQBsgGuAf8BhQKDAfUDMgFGQAADTAGNAaUBoQGgAf8BiAGEAcUB/wI7AcIB/wKr - AdYD/wHsAf8CxwHXAf8CAAF2Af8CAAGWAf8C0gHcA/8B8gH/ArYB7gH/AgQBigH/AYUBgQHHAf8BpQGh - AaAB/wNMAY0DTAGNAaUBoQGgAf8BegHCAYMB/wEvAagBPAH/AfgB/QH5Bf8BrQHmAbgB/wH+Af8B/gH/ - AfcB/AH4Af8BQwGWAUIB/wEMAZ4BHwH/AQUBpQEhAf8BBQGpASMB/wGCAbsBhQH/AaUBoQGgAf8DTAGN - AVcBVgFXAY0BpQGhAaAB/wHMAZoBhwH/AbIBSAEgAf8BrwFDAR0B/wGwAT8BGgH/AdcBqgGbAf8B0QHS - AdQB/wH6AvsB/wG4AXUBYwH/AZUBMAETAf8BugE+AR4B/wG6AT8BHgH/AckBkAGBAf8BpQGhAaAB/wFX - AVYBVwGNQAABXwFeAV8BxwG+AbkBtwH/AWEBXwHHAf8CAAGrAf8CHgG9Af8CqwHUA/8B6QH/Ar0B0QH/ - Ar0BzwH/AvcB2gH/ArYB4wH/AhkBnAH/AgABugH/AU8BTQHCAf8BvgG5AbcB/wFfAV4BXwHHAV8BXgFf - AccBvgG5AbcB/wFOAcUBYAH/AeUB8QHlBf8B8wH8AfUB/wEnAaIBMwH/AbIB5wG8Af8B/QH+Af0B/wGn - AeUBsgH/ARgBkQEgAf8BBwGfAR0B/wEFAZ8BHgH/AUQBqwFRAf8BvgG5AbcB/wFfAV4BXwHHAWkBaAFp - AccBvgG5AbcB/wHKAXwBXgH/Ab8BVwEwAf8BsAFGASAB/wGsAT4BGQH/AdcBqgGbAf8B1wHYAdoB/wH6 - AvsB/wG9AYMBcQH/AZQBMAETAf8BtwE/ARwB/wGzAT4BGwH/AbwBZwFNAf8BvgG5AbcB/wFpAWgBaQHH - QAADagHwAdAByQHIAf8BTgFNAcoB/wIAAbQB/wIAAaoB/wJBAb4B/wKdAdMB/wL4AeYB/wL1AeUB/wKo - AdwB/wITAZcB/wIAAakB/wIAAa0B/wIqAb0B/wHQAckByAH/A2oB8ANqAfAB0AHJAcgB/wFAAcIBWgH/ - AY0B4QGgAf8B6QHzAekB/wFGAbMBUwH/ARcBqgEqAf8BeQHOAYgB/wH+Af8B/gH/AfgB/QH4Af8BQwGa - AUQB/wESAZoBIQH/AQUBmAEaAf8BGQGcASoB/wHQAckByAH/A2oB8AFvAW4BbwHwAdAByQHIAf8BygFr - AUYB/wHKAWIBOwH/AcMBWwEzAf8BsAFEAR0B/wHXAaoBmwH/AdcB2AHaAf8B+gL7Af8BwQGOAXwB/wGV - ATEBEgH/AbIBPwEaAf8BrQE+ARoB/wGwAUoBKQH/AdAByQHIAf8BbwFuAW8B8EAAA2oB8AHQAckByAH/ - AVUBVAHOAf8CLQHKAf8CAAG5Af8CAgG2Af8CkAHaAf8C9AHhAf8C9gHoAf8CkQHUAf8CAAF4Af8CAAGd - Af8CAAGyAf8CKwG8Af8B0AHJAcgB/wNqAfADagHwAdAByQHIAf8BPwHCAVwB/wE3AcMBVQH/ATgBwgFW - Af8BJwGzAUUB/wEaAaoBMwH/ASUBtQE9Af8BsgHnAbwB/wH9Af4B/QH/AaUB4wGvAf8BHAGSASMB/wEH - AZUBFgH/ARwBmQEoAf8B0AHJAcgB/wNqAfABbwFuAW8B8AHQAckByAH/AdEBcAFMAf8BzgFoAUAB/wHP - AWgBQQH/AcoBYQE5Af8B1wGqAZsB/wHXAdgB2gH/AfoC+wH/AboBgwFvAf8BlAEvARAB/wGwAUABGgH/ - AaoBPwEaAf8BrgFLASkB/wHQAckByAH/AW8BbgFvAfBAAAFfAV4BXwHHAb4BuQG3Af8BegF3AdMB/wET - ARIByQH/AjEB0QH/Ap0B5wP/AfkB/wL4AfAB/wHlAeQB3AH/AvoB5QH/AowBzwH/AgABeQH/AgABlAH/ - AVcBVAHAAf8BvgG5AbcB/wFfAV4BXwHHAV8BXgFfAccBvgG5AbcB/wFkAcoBeQH/ATUBxAFVAf8BMgHA - AVIB/wEwAbsBTwH/AS4BtgFMAf8BLAG0AUgB/wFsAdEBgAH/AfwB/gH8Af8B+AH9AfkB/wFLAaQBTgH/ - AREBlgEjAf8BSwGnAVUB/wG+AbkBtwH/AV8BXgFfAccBaQFoAWkBxwG+AbkBtwH/AdcBjQFuAf8B1AFv - AUYB/wHUAW4BRgH/AdUBbgFGAf8B1wGqAZsB/wH2AeQB3QH/AfoC+wH/AbQBdAFeAf8BqAE+ARkB/wGu - AUQBHgH/Aa0BRAEeAf8BugFsAVAB/wG+AbkBtwH/AWkBaAFpAcdAAANMAY0BpQGhAaAB/wGmAaEB0gH/ - AmoB5QH/AqAB6Qn/AmkB3AH/Al0BzQH/AfcB9QHjA/8B8AH/Ao8B0AH/AjEBiwH/AYwBiAHFAf8BpQGh - AaAB/wNMAY0DTAGNAaUBoQGgAf8BkwHRAZ0B/wE7AcsBXAH/ATgByAFZAf8BNgHDAVQB/wEyAb4BUAH/ - AS8BuQFNAf8BMQG8AU4B/wGSAdwBoQX/AcgB7wHPAf8BJAGfATcB/wGIAbsBigH/AaUBoQGgAf8DTAGN - AVcBVgFXAY0BpQGhAaAB/wHXAawBmwH/Ad0BdAFJAf8B2wF2AU0B/wHZAXUBTQH/AegBfgFWAf8B7QFy - AUQB/wHlAXEBRgH/Ad4BXAEsAf8BzQFkATsB/wHGAV8BOAH/AcEBWwE0Af8BzAGbAYkB/wGlAaEBoAH/ - AVcBVgFXAY1AAAMtAUYBgQJ/AfUBvAG2AcEB/wGEAYMB4AH/At0B9wX/AoIB5wH/AgYBxgH/AQUBBgHD - Af8CbwHWA/8B5gH/AtkB5AH/AWUBYwHNAf8BtgGwAb0B/wGBAn8B9QMtAUYDLQFGAYECfwH1AbgBwwG1 - Af8BbAHSAYMB/wE+Ac4BXwH/ATwBywFbAf8BOQHGAVcB/wE1AcEBVAH/ATIBvQFPAf8BQgHFAVsB/wG0 - AegBvgH/Af0B/gH9Af8BXgG6AWkB/wG1Ab0BsAH/AYECfwH1Ay0BRgMyAUYBhQKDAfUByAG4AbQB/wHd - AZwBggH/AeUBfAFQAf8B4QF7AVIB/wH0AZMBbAH/AfUB5AHdAv8B+QHyAf8B7gGLAWQB/wHPAWQBOQH/ - Ac0BaQFAAf8BzQGGAWgB/wHFAbUBsAH/AYUCgwH1AzIBRkQAA0wBjAGbApcB/wG6AbUBzQH/AXwBegHf - Af8CiwHwAf8BGwEcAdcB/wI2Ad0B/wIzAdcB/wEWARcBzAH/AmoB2gH/AWIBYAHQAf8BrwGqAccB/wGb - ApcB/wNMAYwIAANMAYwBmwKXAf8BswHOAbQB/wFtAdYBhQH/AT8B0gFgAf8BPgHNAV8B/wE8AcoBWwH/ - ATgBxQFXAf8BNgHBAVMB/wGcAeEBqgH/AbcB4wG+Af8BrwHHAa0B/wGbApcB/wNMAYwIAANWAYwBmwKX - Af8B0wG5AbAB/wHhAaABhwH/Ae8BgwFYAf8B9wGcAXcJ/wH0AZQBbQH/AdUBbAFBAf8B1AGLAW0B/wHP - AbQBqgH/AZsClwH/A1YBjEgAAxcBIANUAaMBmwKXAf8BvAG2AcIB/wGsAacB1QH/AYgBhQHYAf8BZQFj - AdYB/wFfAV0B0QH/AXABbgHNAf8BlAGQAcoB/wG3AbIBvgH/AZsClwH/A1QBowMXASAIAAMXASADVAGj - AZsClwH/AboBwgG3Af8BmgHUAaMB/wFrAdUBgwH/AUwB0wFqAf8BSQHPAWYB/wFoAcoBegH/AY4BygGW - Af8BtgHDAbIB/wGbApcB/wNUAaMDFwEgCAADGQEgAV8BXgFfAaMBmwKXAf8ByAG4AbQB/wHbAbABoAH/ - AeoBmgF1Af8B8AGRAWoB/wHwAZEBagH/AeYBigFjAf8B1gGmAZMB/wHGAbcBsgH/AZsClwH/AV8BXgFf - AaMDGQEgTAADFwEgA0wBjAGBAn8B9QGlAaEBoAH/Ab4BuQG3Af8B0AHJAcgB/wHQAckByAH/Ab4BuQG3 - Af8BpQGhAaAB/wGBAn8B9QNMAYwDFwEgEAADFwEgA0wBjAGBAn8B9QGlAaEBoAH/Ab4BuQG3Af8B0AHJ - AcgB/wHQAckByAH/Ab4BuQG3Af8BpQGhAaAB/wGBAn8B9QNMAYwDFwEgEAADGQEgA1YBjAGFAoMB9QGl - AaEBoAH/Ab4BuQG3Af8B0AHJAcgB/wHQAckByAH/Ab4BuQG3Af8BpQGhAaAB/wGFAoMB9QNWAYwDGQEg - WAADLQFGA0wBjQFfAV4BXwHHA2oB8ANqAfABXwFeAV8BxwNMAY0DLQFGIAADLQFGA0wBjQFfAV4BXwHH - A2oB8ANqAfABXwFeAV8BxwNMAY0DLQFGIAADMgFGAVcBVgFXAY0BaQFoAWkBxwFvAW4BbwHwAW8BbgFv - AfABaQFoAWkBxwFXAVYBVwGNAzIBRlAAAUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcA - A/8BAAHwAQ8B8AEPAfABDwIAAcABAwHAAQMBwAEDAgABgAEBAYABAQGAAQECAAGAAQEBgAEBAYABAUIA - AYABAQGAAQEBgAEBAgABgAEBAYABAQGAAQECAAHAAQMBwAEDAcABAwIAAfABDwHwAQ8B8AEPAgAL - - - \ No newline at end of file diff --git a/TaskSchedulerConfig/ProblemItem.Designer.cs b/TaskSchedulerConfig/ProblemItem.Designer.cs deleted file mode 100644 index 9270bfb..0000000 --- a/TaskSchedulerConfig/ProblemItem.Designer.cs +++ /dev/null @@ -1,155 +0,0 @@ -namespace TaskSchedulerConfig -{ - partial class ProblemItem - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.title = new System.Windows.Forms.Label(); - this.desc = new System.Windows.Forms.Label(); - this.resolution = new System.Windows.Forms.CheckBox(); - this.pictureBox1 = new System.Windows.Forms.PictureBox(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.label1 = new System.Windows.Forms.Label(); - this.pictureBox2 = new System.Windows.Forms.PictureBox(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); - this.tableLayoutPanel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); - this.SuspendLayout(); - // - // title - // - this.title.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.title.AutoSize = true; - this.title.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.title.Location = new System.Drawing.Point(19, 2); - this.title.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.title.Name = "title"; - this.title.Size = new System.Drawing.Size(97, 13); - this.title.TabIndex = 0; - this.title.Text = "Root cause title"; - // - // desc - // - this.desc.Location = new System.Drawing.Point(19, 17); - this.desc.Name = "desc"; - this.desc.Size = new System.Drawing.Size(354, 32); - this.desc.TabIndex = 1; - this.desc.Text = "Root cause description text goes here and should be able to wrap if needed."; - // - // resolution - // - this.resolution.AutoSize = true; - this.resolution.Location = new System.Drawing.Point(21, 52); - this.resolution.Margin = new System.Windows.Forms.Padding(5, 3, 3, 3); - this.resolution.Name = "resolution"; - this.resolution.Size = new System.Drawing.Size(119, 17); - this.resolution.TabIndex = 2; - this.resolution.Text = "Repair by doing this"; - this.resolution.UseVisualStyleBackColor = true; - // - // pictureBox1 - // - this.pictureBox1.Location = new System.Drawing.Point(0, 0); - this.pictureBox1.Margin = new System.Windows.Forms.Padding(0); - this.pictureBox1.Name = "pictureBox1"; - this.tableLayoutPanel1.SetRowSpan(this.pictureBox1, 3); - this.pictureBox1.Size = new System.Drawing.Size(16, 16); - this.pictureBox1.TabIndex = 3; - this.pictureBox1.TabStop = false; - this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.AutoSize = true; - this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel1.ColumnCount = 4; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.pictureBox1, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.resolution, 1, 2); - this.tableLayoutPanel1.Controls.Add(this.title, 1, 0); - this.tableLayoutPanel1.Controls.Add(this.desc, 1, 1); - this.tableLayoutPanel1.Controls.Add(this.label1, 2, 0); - this.tableLayoutPanel1.Controls.Add(this.pictureBox2, 3, 0); - this.tableLayoutPanel1.Location = new System.Drawing.Point(15, 13); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 3; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.Size = new System.Drawing.Size(449, 72); - this.tableLayoutPanel1.TabIndex = 4; - // - // label1 - // - this.label1.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(379, 2); - this.label1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(51, 13); - this.label1.TabIndex = 0; - this.label1.Text = "Detected"; - // - // pictureBox2 - // - this.pictureBox2.Location = new System.Drawing.Point(433, 0); - this.pictureBox2.Margin = new System.Windows.Forms.Padding(0); - this.pictureBox2.Name = "pictureBox2"; - this.pictureBox2.Size = new System.Drawing.Size(16, 16); - this.pictureBox2.TabIndex = 3; - this.pictureBox2.TabStop = false; - this.pictureBox2.Click += new System.EventHandler(this.pictureBox1_Click); - // - // ProblemItem - // - this.Controls.Add(this.tableLayoutPanel1); - this.MinimumSize = new System.Drawing.Size(20, 10); - this.Name = "ProblemItem"; - this.Size = new System.Drawing.Size(537, 254); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); - this.tableLayoutPanel1.ResumeLayout(false); - this.tableLayoutPanel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Label title; - private System.Windows.Forms.Label desc; - private System.Windows.Forms.CheckBox resolution; - private System.Windows.Forms.PictureBox pictureBox1; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.PictureBox pictureBox2; - } -} diff --git a/TaskSchedulerConfig/ProblemItem.cs b/TaskSchedulerConfig/ProblemItem.cs deleted file mode 100644 index 7135c68..0000000 --- a/TaskSchedulerConfig/ProblemItem.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using System.Windows.Forms; - -namespace TaskSchedulerConfig -{ - public partial class ProblemItem : UserControl - { - private bool hidden = false; - - public ProblemItem() - { - InitializeComponent(); - } - - public string Title - { - get { return title.Text; } - set { title.Text = value; } - } - - public string Description - { - get { return desc.Text; } - set { desc.Text = value; } - } - - public string Resolution - { - get { return resolution.Text; } - set { resolution.Text = value; } - } - - private void pictureBox1_Click(object sender, EventArgs e) - { - hidden = !hidden; - resolution.Visible = desc.Visible = !hidden; - pictureBox1.Image = hidden ? Properties.Resources.Minus : Properties.Resources.Plus; - } - } -} diff --git a/TaskSchedulerConfig/ProblemItem.resx b/TaskSchedulerConfig/ProblemItem.resx deleted file mode 100644 index 29dcb1b..0000000 --- a/TaskSchedulerConfig/ProblemItem.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/TaskSchedulerConfig/Program.cs b/TaskSchedulerConfig/Program.cs deleted file mode 100644 index b5a80c7..0000000 --- a/TaskSchedulerConfig/Program.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Windows.Forms; - -namespace TaskSchedulerConfig -{ - class Program - { - static void Main(string[] args) - { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new WizardForm()); - } - } -} diff --git a/TaskSchedulerConfig/Properties/AssemblyInfo.cs b/TaskSchedulerConfig/Properties/AssemblyInfo.cs deleted file mode 100644 index 51e9470..0000000 --- a/TaskSchedulerConfig/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("TaskSchedulerConfig")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("464ae5dd-6049-4a73-b07c-10cc1e3742f6")] \ No newline at end of file diff --git a/TaskSchedulerConfig/Properties/Resources.Designer.cs b/TaskSchedulerConfig/Properties/Resources.Designer.cs deleted file mode 100644 index 9d7bfe0..0000000 --- a/TaskSchedulerConfig/Properties/Resources.Designer.cs +++ /dev/null @@ -1,280 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace TaskSchedulerConfig.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TaskSchedulerConfig.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Detected { - get { - object obj = ResourceManager.GetObject("Detected", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized string similar to File and Printer Sharing. - /// - internal static string FileAndPrinterSharingRule { - get { - return ResourceManager.GetString("FileAndPrinterSharingRule", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Firewall is enabled. - /// - internal static string FirewallEnabled { - get { - return ResourceManager.GetString("FirewallEnabled", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Firewall rule '{0}' is enabled. - /// - internal static string FirewallRuleEnabled { - get { - return ResourceManager.GetString("FirewallRuleEnabled", resourceCulture); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Fixed { - get { - object obj = ResourceManager.GetObject("Fixed", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized string similar to General Information. - /// - internal static string GroupGeneral { - get { - return ResourceManager.GetString("GroupGeneral", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Version 1 (XP/Server 2000). - /// - internal static string GroupV1 { - get { - return ResourceManager.GetString("GroupV1", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Version 2 (Vista/2003 and later). - /// - internal static string GroupV2 { - get { - return ResourceManager.GetString("GroupV2", resourceCulture); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Minus { - get { - object obj = ResourceManager.GetObject("Minus", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap NotFixed { - get { - object obj = ResourceManager.GetObject("NotFixed", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Plus { - get { - object obj = ResourceManager.GetObject("Plus", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized string similar to "Remote Registry" service is running. - /// - internal static string RemoteRegistryServiceRunning { - get { - return ResourceManager.GetString("RemoteRegistryServiceRunning", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Remote Scheduled Tasks Management. - /// - internal static string RemoteTaskManagementRule { - get { - return ResourceManager.GetString("RemoteTaskManagementRule", resourceCulture); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap restarrow { - get { - object obj = ResourceManager.GetObject("restarrow", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Run { - get { - object obj = ResourceManager.GetObject("Run", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap selarrow { - get { - object obj = ResourceManager.GetObject("selarrow", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap shield { - get { - object obj = ResourceManager.GetObject("shield", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). - /// - internal static System.Drawing.Icon ts { - get { - object obj = ResourceManager.GetObject("ts", resourceCulture); - return ((System.Drawing.Icon)(obj)); - } - } - - /// - /// Looks up a localized string similar to User '{0}' is a member of at least one of the required groups. - /// - internal static string UserHasCorrectRights { - get { - return ResourceManager.GetString("UserHasCorrectRights", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to User has access rights to C:\Windows\Tasks. - /// - internal static string UserHasPathAccess { - get { - return ResourceManager.GetString("UserHasPathAccess", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to User '{0}' is a member of the Administrators group. - /// - internal static string UserIsAdmin { - get { - return ResourceManager.GetString("UserIsAdmin", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to User '{0}' is a member of the Backup Operators group. - /// - internal static string UserIsBackupOperator { - get { - return ResourceManager.GetString("UserIsBackupOperator", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to User '{0}' is a member of the Server Operators group. - /// - internal static string UserIsServerOperator { - get { - return ResourceManager.GetString("UserIsServerOperator", resourceCulture); - } - } - } -} diff --git a/TaskSchedulerConfig/Properties/Resources.resx b/TaskSchedulerConfig/Properties/Resources.resx deleted file mode 100644 index cdd9c44..0000000 --- a/TaskSchedulerConfig/Properties/Resources.resx +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - File and Printer Sharing - - - Firewall is enabled - - - Firewall rule '{0}' is enabled - - - General Information - - - Version 1 (XP/Server 2000) - - - Version 2 (Vista/2003 and later) - - - Remote Scheduled Tasks Management - - - - ..\Resources\restarrow.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\selarrow.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\shield.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - User '{0}' is a member of at least one of the required groups - - - User has access rights to C:\Windows\Tasks - - - User '{0}' is a member of the Administrators group - - - User '{0}' is a member of the Backup Operators group - - - User '{0}' is a member of the Server Operators group - - - ..\Resources\Minus.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\Plus.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\tsnew.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - "Remote Registry" service is running - - - ..\Resources\109_AllAnnotations_Warning_16x16_72.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\109_AllAnnotations_Default_16x16_72.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\109_AllAnnotations_Error_16x16_72.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\StatusAnnotations_Play_16xLG.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - \ No newline at end of file diff --git a/TaskSchedulerConfig/Resources/109_AllAnnotations_Default_16x16_72.png b/TaskSchedulerConfig/Resources/109_AllAnnotations_Default_16x16_72.png deleted file mode 100644 index 53c66d0f28a508d6c6930b2cc389769c92de8538..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 865 zcmV-n1D^beP)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ;*GWV{RCwB~lS^n+cNoQg_s*kwn~Y=3JT6I-ppDb< zK}=f>#+K41nutn4yC`-Lw~8Pbw{8^N*gF&&nC?O!t5S_pjARyF4wRNiVsvCiG)*&| z88b79CQk1A@4}3@uix_Uo%4Ng&XI%=yg4HmMh*c(KtB*)hqFKinADP5`ptc*Auw`b zqzgE=r8RV>t-V8uL{&BiTL4&Eu2C)(DJ;y_tChtRFsdcBxz_^gi&amJG5GzsBEL%_<+J}fqX9e3vfwGYIEN8PtJ93k0;*ii!!xgg2(m@!V=hy zi*4Cd?JB#wdTEj+!roROp2+92W#FP`<@w5?Ev=z%V|!!1yGokJ<_xywVwyIVVPTp! zia$VqXpqm;VNwsT(G%)pwYIwF=J@#EGBDKE-l3ENc^(;eF-;RgH!*YrLpKpZFc3M$ z=aD1KJo}5OLWZ1skGA#>1sIZn{zz2ii7|^|ydqn=iLKjMmP1eI0N-pqi|HC%zI~O- zT9v6vhDcNe=$C=`=3oo|>Uj_{UfEAwU!%BM;e}-INq7JWiHZNNbH6stil}q%`EUcdavd4Ly0~yFJE!XgS0vrr} zO}Ht{*x_Hl@bZMMNYxl8zFYvwtu}wQ!TCM?PWgt^773p$zaq`YFOxHm1 zG;w+G%B$cjmx=%x8JH|A%-45VdkMW8X8+iSIKp8_J&puS z6n`UcPUBGwdilv5A+2P>F9f*b00000NkvXXu0mjf<<^L6 diff --git a/TaskSchedulerConfig/Resources/109_AllAnnotations_Error_16x16_72.png b/TaskSchedulerConfig/Resources/109_AllAnnotations_Error_16x16_72.png deleted file mode 100644 index 631acc8f4597ffcb036a3a418299b1fb47b0eb8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 865 zcmV-n1D^beP)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ;*GWV{RCwB~lUqoW0Tjo7-!5h5ZJYXSZfQ=p9Hyyd zpa?w-6e|eI$Mw(wf=>|z1%^EZMigOQf-=QowRKsxv5Pt{)1~h6 z^^gnS>%e(Aob%_v|MwSUS!Qp!uDe=+HlP`>?T+2RBrqloNYD1}3mE~|b=P6wny#?u ziqTY>E$R(u3bX*MtVRikf&}~v@#Uq(Az)A%kbHjyc8_mbtTsn=Svk73Rg~YpkpAH# zv9m)`qajsR&W5>y&jCMPkNZB*D-B3K)$S+PELNN2WN8`Nsc|%UIRuCAu)oBJkV=v8 z|D@nT2m9vdsB1e7R-41?afg9!Wo$jxsw*t&KVDU>Hq5+1f6+nCnKL9~8~8^?*o=h9 zzvLwE_H7PS9bxOieGWD>65Wi|JsBN+s{-1LrqXQ9Vgz+0%=-8^S!Of(-d;8%5!N;~ z$h~=sY{2*QDKBQ;(rm88Xe!NKURrEZ0nMV`fbi-i{)dmqnwlb=N}+W+DeUiurDYUq zCEq29$2~ph1%X6`6|ue(pjidjGzD4`U%d#%5<>6Z5$NioG8SWhXD2yY4NF5qjC6Nn z28slMr29k0A)6xOXL5U+$oxEOvP{;gQ*7tvqE@L$$ue1@h^e@k93b(>y1yJK0Qbsj zl$2J-FIh%cUQY4l%M?4EEKW=inVu$n?i^?D-X&%-kqf9REUc_X0o)2;G8_t$Hdi9H zv|#A#L*LOsbb6YHb~{scI|{Ft{PuRv4-Ye|R->*zPB;_u4=;(ZJ5f zk0hTz=U!72R^SjY(a^xor%!x+|DLK7jl^q@5%4d>fw2sU{T8duRg;&``p_Wp$=9r< z(`bPMyX{dbDQRj!+jW)M*g9U1TapH(?hJ{8UXNSEYI9gzH^{TMBF@c_`r<(WC@Zbh r)HkqMTgPlDm_d2)|Apya;{1C6UqnR&`+Sol00000NkvXXu0mjf=JkWW diff --git a/TaskSchedulerConfig/Resources/109_AllAnnotations_Warning_16x16_72.png b/TaskSchedulerConfig/Resources/109_AllAnnotations_Warning_16x16_72.png deleted file mode 100644 index 78f246f047efee82e1ee0b64f1adbef606253054..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 618 zcmV-w0+s!VP)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ-;7LS5RCwBylfP~gK^Vk;-}-FFIChME=h(5G2(T6; zpah97qN1X89i>STp`=JblN3Bb-XLY%Q1AcdkQrp!HXSPCG~edkf_v zbNLd`4I;g&my7af(tY z!^x4-&e|Q|sk}S%YrxB;<)U85f{Q}17Mvr0|04k1_t(Mm5D^gJ?7QL1(b)&!p$F_H zQ=ZPJBkW)V#(=Z@IwE#7fKVZ7{EzbK1jh-bjj_8Pu)0*s;YK}N6oDJ3Bf{6$rO6{A zf)fBiL|Ck3`TVK7>H(*(-W>D)7;>$iJe67F{IB>i05~0`Lczgc$^ZZW07*qoM6N<$ Ef-W!&ivR!s diff --git a/TaskSchedulerConfig/Resources/Minus.bmp b/TaskSchedulerConfig/Resources/Minus.bmp deleted file mode 100644 index cd6ba39ef51aa47761c371319b6291a4d1ea11f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 306 zcmZ?rHDY7{12Z700mPh8%*Y@C76%bW_#hZ2uxIzKiP!*8{6A3qF*X1cCnWdg?ORL) a)d!SVp6rc`fFe-2-@kuhB1+`&`40fRPR7gt diff --git a/TaskSchedulerConfig/Resources/Plus.bmp b/TaskSchedulerConfig/Resources/Plus.bmp deleted file mode 100644 index 49f391eea940f6ccae75808ccb1ab2ead04fafac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 306 zcmZ?rHDY7{12Z700mPh8%*Y@C76%bW_#hZ2uxIzKiP!*8{6A3qF*X1cN0BRX(u6C6 z%Ds8}7J`6sa5hx#_wQfJlf97004R=004l4008;_004mL004C`008P>0026e000+nl3&F}00009 za7bBm000XT000XT0n*)m`~Uy|7<5HgbW?9;ba!ELWdLwtX>N2bZe?^JG%heMIczh2 zP5=M{FiAu~R5(v%Q&~(CQ51b*K%>ZqF>yn&qEc6uh^=60DQJK(!4368qA{BIMWR6r zr7hGd2nDJ8_CaETL}LtYG45jGf+mVFk`Wg=P;F@`%TS~(%p4z6l%QvFlX++Ex%a%e z?-2lFg1NgpM00(^5xmb!Xf#TtvY zIo+DYrJrOzYO6Eet1H(!)2+;N%AcQZh?*fUTQTmx0@|AFP01Chy%*lp@ckH|)L3-( z_ux#!C8(;>J#&i}FbmB~BsY?H9hnoWWoU1=U?_yoj=fGVp$0q69&JAPV#a`1F+(mzv|>EjGtS5bgO* zn^l&yp}s(Wu-!=0ygPZAR4@sKhX(iszr+m};dxrn3+%g`C(JLA7ZRmKdqsb{M3RZ( zsAc_QJ;(uq@PpwnJu@L71|**M^6+-`;pK-$L>pslWLatAJFcru`Z(O-4-8KX2-Amw zZ56>?Td;>moy4+}QwIjJat%byxx0woz~|;K z&{Sn{L{=<6ntOTAh-?(br$&SpQU`PkOdSKZi-kBO!sT|uZFi%-;TB>_Vq1v($cnh7 zM-n{E9bbaV5fl0M^QE7dQj;QyF$DDV_MnyH;NjfJy|5FBWvW9&QLP%k@bI$ZYfmx4 zP#`#G&=aA1r~^~Wpvln$f$|=Y2j6Yq&}Z*M-J@%WDvV~;RT(p-lbBGcoGL3`bS3-D z7CNGSY0fR}EwKHxq1)XJ=MN_woCAD&FYY~mfP@l-Ke1Gmk$OBUrZU$-F|vkV8_`#KBg*1SZPjaQ(`qrs-Aa<1wN>UQs?Sx?nXjp_LRV*{ zq17@A+vV1bC$t$Z8#COtlssrIe%)34p10}+PrXY4TDL+~AB1T=jIw#0VfQ4{Z+lS8 z-h{;csR1{06Yo~1-m5DC@-WpTB(h^3|(XuV24@^XARl zw{PFQd-wkR`^R6NJpBFQ+3zSvzp!k!8nSmjiK?mexP@Z7mc)_rp4Z6Xn;x8*i+ zq$j_*@#rBlhoGv4#f|8N9^q2D2_H5XHn)m!^2tw+?+D8piti>Ihgw9lq}hRnx>mwV?WtL!lB?31yo MF%aCRs=#0k05A0((*OVf diff --git a/TaskSchedulerConfig/Resources/selarrow.gif b/TaskSchedulerConfig/Resources/selarrow.gif deleted file mode 100644 index a093cbc3d2700e280d709e70ad224153fe41a422..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1041 zcmZ?wbhEHb6krfwXlGzxU&G9{omXfBpUh@S_3bKJJJj`e>e%kHVml$tc3o5Etby!p zTh=EgtnX~K4jSkkHevnhEc3xn=39uyi$Kk9ae5zP4PQp+eNS@OZyRtXH10x@!}olr z?}b5cijyy;mt3z%e%FxxzNO;B#Jzj>?%TJo<#v1Pr#bU}Z(DGG-pP|EFJ8QO`SRr} zSFT*WdiC11YuB$|zj5Qn&6_vx+_`i2?%jL$?%n@#@4 z(`V0~J%9fE#fuj&U%q_x>ecJluiw0R^Y-oAckkZ4fB*i;_a~43y?plX?W-RzU;lXZ z`tSR|3AYh7``E(_>+a1fgyoG2joRio?zg3$FQH{&!yJW zV%i)#OFkN1=sv6$w!%Zx$#ucORzBIHl|rr@6I9p@GG1;-22dRvz#>-tK4;^k7QMApgk^FFpL0B)a=}iNZS~DBJyq5*Xfv=4d zm25K_938f;iDcnwdeXqC)_8k+fv`>hH#5f!J_V-^1H;C~cy8~G4>LA0wM9wkZF0%D zuz+dWY=@E)5fht^bSMicIPAEf!ZoqekuA8b(8;(}-L=VMp^@vU2^(}n6mA|k=qacW mxGZ9&(#Ng664on1B!yJUMOy@8e_xpB+|I9fY%L25gEatNr8n0A diff --git a/TaskSchedulerConfig/Resources/shield.gif b/TaskSchedulerConfig/Resources/shield.gif deleted file mode 100644 index b88581218e9214a4fb4b665f0658a29a4fce8ae2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1033 zcmd_pZBLR59Dwn^hz%2qDXk(~8Ck|@%Ph@iD`lC}*iw#7%TAM(_8_5Y7`MS32x*yd zn`qz>i3fQI12b<^GfkzlQ-Ml&j#O$GTT9C=dtuhr?$+n%`UbxjS8Cd!guNUJP@oFn zV9K8?R!+uIL3S>mor9drD=aABaySTwBRXGL%H@f8JRz@01XO!KLjSIP9S}3LoH-nn zJpmchl#{P_o*F-$FD*DHE-F$M3ei%*?J}XJ^8j82MsLMYUE` zZM!1HkXr0m-5etGn2O40|5!h}lR6u}?n8V8zJrX%0e&D9XNKZw;dnL~FQDOt>+mx2 zSUzjAlsi|F^%2Ru$whI%jf!A zd=$R=Kq9?SDXo{w(HpfY@vUaGPE~nTE0LIGb>{16dwqjep={G=bQ(>oT5U!fu!cM4 z{u+%AeW+J=J!~==TCEmKo1wK+YwR{!dfVZpP_;Dk%-G-YXUfUnhw^11>sPaa9Ww{hXuA)$3tkcQ zj*yU8t@mun=HM`TR<9!|SrAx+>h1@5 z^+~C9Od(`O)acY%|f98HbJ-NGmp;;Lwd^JwZinc}|~A zu4J5ga%t1&t^Y9-m4bcBuz$ig1fq;yHl%w@MFG1ONa4 diff --git a/TaskSchedulerConfig/Resources/tsnew.ico b/TaskSchedulerConfig/Resources/tsnew.ico deleted file mode 100644 index 75d6ddffd30a414475eea20fd0dfc1a5ebb0bb3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32289 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 diff --git a/TaskSchedulerConfig/ServiceHelper.cs b/TaskSchedulerConfig/ServiceHelper.cs deleted file mode 100644 index 057ec02..0000000 --- a/TaskSchedulerConfig/ServiceHelper.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.ComponentModel; -using System.Runtime.InteropServices; - -namespace System.ServiceProcess -{ - internal static class ServiceControllerExtensions - { - [DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - private static extern Boolean ChangeServiceConfig(IntPtr hService, UInt32 nServiceType, UInt32 nStartType, UInt32 nErrorControl, String lpBinaryPathName, String lpLoadOrderGroup, IntPtr lpdwTagId, [In] char[] lpDependencies, String lpServiceStartName, String lpPassword, String lpDisplayName); - - private const uint SERVICE_NO_CHANGE = 0xFFFFFFFF; - - public static void SetStartType(this ServiceController svc, ServiceStartMode mode) - { - using (var serviceHandle = svc.ServiceHandle) - if (!ChangeServiceConfig(serviceHandle.DangerousGetHandle(), SERVICE_NO_CHANGE, (uint)mode, SERVICE_NO_CHANGE, null, null, IntPtr.Zero, null, null, null, null)) - throw new ExternalException("Could not change service start type.", new Win32Exception()); - } - } -} \ No newline at end of file diff --git a/TaskSchedulerConfig/ServicesDetail.cs b/TaskSchedulerConfig/ServicesDetail.cs deleted file mode 100644 index 71227b1..0000000 --- a/TaskSchedulerConfig/ServicesDetail.cs +++ /dev/null @@ -1,68 +0,0 @@ -using Microsoft.Win32; -using System; -using System.IO; -using System.Linq; -using System.Security.Permissions; -using System.Security.Policy; -using System.Security.Principal; -using System.ServiceProcess; - -namespace TaskSchedulerConfig -{ - class ServicesDetail : IDisposable - { - private WindowsIdentity id; - public SecurityIdentifier sid; - private WindowsPrincipal prin; - private string server = null; - private Firewall fw = null; - private ServiceController sc = null; - - public ServicesDetail(string svr = null) - { - server = svr; - id = WindowsIdentity.GetCurrent(); - sid = new SecurityIdentifier(id.User.Value); - prin = new WindowsPrincipal(id); - } - - public bool UserIsAdmin => prin.IsInRole(WindowsBuiltInRole.Administrator); - public bool UserIsBackupOperator => prin.IsInRole(WindowsBuiltInRole.BackupOperator); - public bool UserIsServerOperator => prin.IsInRole(WindowsBuiltInRole.SystemOperator); - public bool V1TaskPathAccess - { - get - { - try - { - new FileIOPermission(FileIOPermissionAccess.AllAccess, Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "Tasks")).Demand(); - return true; - } - catch { } - return false; - } - } - - public Firewall Firewall => fw ?? (fw = new Firewall(server)); - - public bool IsLocal => string.IsNullOrEmpty(server); - - public ServiceController RemoteRegistryService => sc ?? (sc = new ServiceController("RemoteRegistry", server ?? ".")); - - public string Server => server; - - public string User => id.Name; - - public LocalSecurity.Rights UserRights => new LocalSecurity(Server).UserAccountRights(User); - - public LocalSecurity.SystemAccess UserAccessRights => new LocalSecurity(Server).UserSystemAccess(User); - - public bool RemoteRegistryServiceRunning => RemoteRegistryService.Status == ServiceControllerStatus.Running; - - void IDisposable.Dispose() - { - if (sc != null) { sc.Close(); sc = null; } - if (fw != null) { fw = null; } - } - } -} \ No newline at end of file diff --git a/TaskSchedulerConfig/TaskSchedulerConfig.csproj b/TaskSchedulerConfig/TaskSchedulerConfig.csproj deleted file mode 100644 index 0d6f772..0000000 --- a/TaskSchedulerConfig/TaskSchedulerConfig.csproj +++ /dev/null @@ -1,202 +0,0 @@ - - - - - Debug - AnyCPU - {464AE5DD-6049-4A73-B07C-10CC1E3742F6} - WinExe - Properties - TaskSchedulerConfig - TaskSchedulerConfig - v4.0 - 512 - true - SAK - SAK - SAK - SAK - - - true - C:\Users\dahall\Documents\Visual Studio 2010\Projects\TaskService\TaskSchedulerConfig\publish\ - true - Web - true - Foreground - 7 - Days - false - false - true - http://taskscheduler.codeplex.com/releases/clickonce/ - https://taskscheduler.codeplex.com - https://taskscheduler.codeplex.com/documentation - Task Scheduler Config - CodePlex Project - Task Scheduler Managed Wrapper - true - publish.htm - 6 - 1.0.0.%2a - false - true - true - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - BBAFC17DC36CE82DB0A597921CEAD17A2DC3F1F8 - - - TaskSchedulerConfigKey.pfx - - - true - - - true - - - true - - - TaskSchedulerConfig.snk - - - - - ..\packages\AeroWizard.2.1.10\lib\net40\AeroWizard.dll - True - - - ..\packages\TaskScheduler.2.5.28\lib\net40\JetBrains.Annotations.dll - - - ..\packages\TaskScheduler.2.5.28\lib\net40\Microsoft.Win32.TaskScheduler.dll - - - - - - - - - - Properties\SharedAssemblyInfo.cs - - - Component - - - - - - - - - - - True - True - Resources.resx - - - - - Form - - - WizardForm.cs - - - - - - Designer - - - - - - - ResXFileCodeGenerator - Resources.Designer.cs - - - WizardForm.cs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - False - Microsoft .NET Framework 4.5.2 %28x86 and x64%29 - true - - - False - .NET Framework 3.5 SP1 - false - - - - - \ No newline at end of file diff --git a/TaskSchedulerConfig/TaskSchedulerConfig.snk b/TaskSchedulerConfig/TaskSchedulerConfig.snk deleted file mode 100644 index 5221dff31e11fc7bb3e359e5e3e00814ba50a301..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50097RBK!8uE-VSvY=~xYq;nuJP|kD&{GgxJ z!>Eq5rHd{ZC{guqROiS5=pPp3&YJ6Xz$+bvv)z#%*2`e0Ka#Zp!A6+CioloMMZ$V& z9fa@isIPh-c~>I)`66CA_CK1pO4{kC^&kt^LI!pC{1~1>&EmP3Z;-+}&$GM0r{J1B7zrn6cWk3b z+S66ccyGbx3N&UR82I`*K4`M|I2@yf$7PVw-VuOp&cP(TtQEaNpKG=})%iRGB{M&m z6iJR23@QgS?tK|${<|H=s4+1^!tdmFBdUg`WoAgrKkK__fT+O(M=^8v1r-$1Yi^)n>Jvn)ofw_yY7{cSx@&_&T7H8nN?47W!Ey zq$D5a4!HY8fLZ|Ex_4@PihkYLE`qOOfS5Q!0nh02H`|_vsP}t*kcp5QHZYT&+l^vd ix2Mx$#p-MqLQekugWEfF#pBCr@JE{knQ^@k4}+O`87Tz- diff --git a/TaskSchedulerConfig/TaskSchedulerConfigKey.pfx b/TaskSchedulerConfig/TaskSchedulerConfigKey.pfx deleted file mode 100644 index 50640e5bfcbfb3f824629e716faebfd1944dc71a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1617 zcmb7EdpML?7(d@P-^^szC>i9^G!pAJeB(0XQVKOfq->-q9xK-s)}_d;nUpP(Zp7M* z+ooj_U;pB4IlK0jsm~0tE6Gh3Lm;lXa%vpaoa}6_geEKJ0#Ll+uEK`-pByZ5s zZkYUJLeX%2;!q?)YZmkIME8JQc$WRXm8?#8?ct2&(dJU${&ew&+E3F(-eJL=yf}NK z-$WIIu}^Ji`I80|XJSP4N4u;GjcqaGw;iG;gtH&xOZrbY@R_|4d5E!XSV5(~rOr2I zM%AgEWtkLzv16^&&7s@tol?EdC~Nbb9b9rN<^P}VEB&@U+VaCYw zHlwbD@lq3ULi?niMQyt4q&7Fj-K|!7qeVHtA(qj1_ICxFStZ4m6mDF)a_A1r9?@H) zru*-n2) za28`-zEO?)>83d)y&>7dOYYSv72oQmZ4L1j89Lk5v(3sGSAX7Z5T}vC{kA3DcdYNL zV0G!TYKlQ5i{FJSEM9XNMHUIe5C8zq`-h~lTZs-1)=#oG&Wv<|7R+G-sd_HA|UWj0Gxje<@3Syn6;}~d#DAoxsm6dybRr~ ztE92i$?jy)+xeD7$vl&DsM$3+x_I^6@%t?fQ-R9i zT)R|JU)PAc(-cZT0P?v!cuWMS%d@p0_ohVC=7gK<_)t#ARLL3*I%Q4t>)Dv<2lNX^ zuu_iNBkQXNJi66uN4JCrj_@zaHuzcA#JANPk>6OjO{#rLuFkBblE1g&T6R&D+>kd? zXeH54e%3f!j;3`Y+4hay(gDXL|2!MnUp_o&m-nT4WkvQh4~UYI)kWkzw^@q+edn$4 zRXCYM)R!Zmsu-}?FoL@ J-p@boe*&I1WQqU) diff --git a/TaskSchedulerConfig/UAC.cs b/TaskSchedulerConfig/UAC.cs deleted file mode 100644 index c92d807..0000000 --- a/TaskSchedulerConfig/UAC.cs +++ /dev/null @@ -1,784 +0,0 @@ -/****************************** Module Header ******************************\ - Module Name: NativeMethod.cs - Project: CSUACSelfElevation - Copyright (c) Microsoft Corporation. - - The P/Invoke signature some native Windows APIs used by the code sample. - - This source is subject to the Microsoft Public License. - See http://www.microsoft.com/en-us/openness/resources/licenses.aspx#MPL - All other rights reserved. - - THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, - EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. -\***************************************************************************/ - -using System; -using System.Runtime.InteropServices; -using Microsoft.Win32.SafeHandles; -using System.ComponentModel; -using System.Diagnostics; -using System.Security.Principal; - -namespace CSUACSelfElevation -{ - internal static class UACHandler - { - /// - /// The function checks whether the primary access token of the process belongs - /// to user account that is a member of the local Administrators group, even if - /// it currently is not elevated. - /// - /// - /// Returns true if the primary access token of the process belongs to user - /// account that is a member of the local Administrators group. Returns false - /// if the token does not. - /// - /// - /// When any native Windows API call fails, the function throws a Win32Exception - /// with the last error code. - /// - public static bool IsUserInAdminGroup() - { - bool fInAdminGroup = false; - SafeTokenHandle hToken = null; - SafeTokenHandle hTokenToCheck = null; - IntPtr pElevationType = IntPtr.Zero; - IntPtr pLinkedToken = IntPtr.Zero; - int cbSize = 0; - - try - { - // Open the access token of the current process for query and duplicate. - if (!NativeMethods.OpenProcessToken(Process.GetCurrentProcess().Handle, - NativeMethods.TOKEN_QUERY | NativeMethods.TOKEN_DUPLICATE, out hToken)) - { - throw new Win32Exception(); - } - - // Determine whether system is running Windows Vista or later operating - // systems (major version >= 6) because they support linked tokens, but - // previous versions (major version < 6) do not. - if (Environment.OSVersion.Version.Major >= 6) - { - // Running Windows Vista or later (major version >= 6). - // Determine token type: limited, elevated, or default. - - // Allocate a buffer for the elevation type information. - cbSize = sizeof(TOKEN_ELEVATION_TYPE); - pElevationType = Marshal.AllocHGlobal(cbSize); - if (pElevationType == IntPtr.Zero) - { - throw new Win32Exception(); - } - - // Retrieve token elevation type information. - if (!NativeMethods.GetTokenInformation(hToken, - TOKEN_INFORMATION_CLASS.TokenElevationType, pElevationType, - cbSize, out cbSize)) - { - throw new Win32Exception(); - } - - // Marshal the TOKEN_ELEVATION_TYPE enum from native to .NET. - TOKEN_ELEVATION_TYPE elevType = (TOKEN_ELEVATION_TYPE) - Marshal.ReadInt32(pElevationType); - - // If limited, get the linked elevated token for further check. - if (elevType == TOKEN_ELEVATION_TYPE.TokenElevationTypeLimited) - { - // Allocate a buffer for the linked token. - cbSize = IntPtr.Size; - pLinkedToken = Marshal.AllocHGlobal(cbSize); - if (pLinkedToken == IntPtr.Zero) - { - throw new Win32Exception(); - } - - // Get the linked token. - if (!NativeMethods.GetTokenInformation(hToken, - TOKEN_INFORMATION_CLASS.TokenLinkedToken, pLinkedToken, - cbSize, out cbSize)) - { - throw new Win32Exception(); - } - - // Marshal the linked token value from native to .NET. - IntPtr hLinkedToken = Marshal.ReadIntPtr(pLinkedToken); - hTokenToCheck = new SafeTokenHandle(hLinkedToken); - } - } - - // CheckTokenMembership requires an impersonation token. If we just got - // a linked token, it already is an impersonation token. If we did not - // get a linked token, duplicate the original into an impersonation - // token for CheckTokenMembership. - if (hTokenToCheck == null) - { - if (!NativeMethods.DuplicateToken(hToken, - SECURITY_IMPERSONATION_LEVEL.SecurityIdentification, - out hTokenToCheck)) - { - throw new Win32Exception(); - } - } - - // Check if the token to be checked contains admin SID. - WindowsIdentity id = new WindowsIdentity(hTokenToCheck.DangerousGetHandle()); - WindowsPrincipal principal = new WindowsPrincipal(id); - fInAdminGroup = principal.IsInRole(WindowsBuiltInRole.Administrator); - } - finally - { - // Centralized cleanup for all allocated resources. - if (hToken != null) - { - hToken.Close(); - hToken = null; - } - if (hTokenToCheck != null) - { - hTokenToCheck.Close(); - hTokenToCheck = null; - } - if (pElevationType != IntPtr.Zero) - { - Marshal.FreeHGlobal(pElevationType); - pElevationType = IntPtr.Zero; - } - if (pLinkedToken != IntPtr.Zero) - { - Marshal.FreeHGlobal(pLinkedToken); - pLinkedToken = IntPtr.Zero; - } - } - - return fInAdminGroup; - } - - - /// - /// The function checks whether the current process is run as administrator. - /// In other words, it dictates whether the primary access token of the - /// process belongs to user account that is a member of the local - /// Administrators group and it is elevated. - /// - /// - /// Returns true if the primary access token of the process belongs to user - /// account that is a member of the local Administrators group and it is - /// elevated. Returns false if the token does not. - /// - public static bool IsRunAsAdmin() - { - WindowsIdentity id = WindowsIdentity.GetCurrent(); - WindowsPrincipal principal = new WindowsPrincipal(id); - return principal.IsInRole(WindowsBuiltInRole.Administrator); - } - - - /// - /// The function gets the elevation information of the current process. It - /// dictates whether the process is elevated or not. Token elevation is only - /// available on Windows Vista and newer operating systems, thus - /// IsProcessElevated throws a C++ exception if it is called on systems prior - /// to Windows Vista. It is not appropriate to use this function to determine - /// whether a process is run as administrator. - /// - /// - /// Returns true if the process is elevated. Returns false if it is not. - /// - /// - /// When any native Windows API call fails, the function throws a Win32Exception - /// with the last error code. - /// - /// - /// TOKEN_INFORMATION_CLASS provides TokenElevationType to check the elevation - /// type (TokenElevationTypeDefault / TokenElevationTypeLimited / - /// TokenElevationTypeFull) of the process. It is different from TokenElevation - /// in that, when UAC is turned off, elevation type always returns - /// TokenElevationTypeDefault even though the process is elevated (Integrity - /// Level == High). In other words, it is not safe to say if the process is - /// elevated based on elevation type. Instead, we should use TokenElevation. - /// - public static bool IsProcessElevated() - { - bool fIsElevated = false; - SafeTokenHandle hToken = null; - int cbTokenElevation = 0; - IntPtr pTokenElevation = IntPtr.Zero; - - try - { - // Open the access token of the current process with TOKEN_QUERY. - if (!NativeMethods.OpenProcessToken(Process.GetCurrentProcess().Handle, - NativeMethods.TOKEN_QUERY, out hToken)) - { - throw new Win32Exception(); - } - - // Allocate a buffer for the elevation information. - cbTokenElevation = Marshal.SizeOf(typeof(TOKEN_ELEVATION)); - pTokenElevation = Marshal.AllocHGlobal(cbTokenElevation); - if (pTokenElevation == IntPtr.Zero) - { - throw new Win32Exception(); - } - - // Retrieve token elevation information. - if (!NativeMethods.GetTokenInformation(hToken, - TOKEN_INFORMATION_CLASS.TokenElevation, pTokenElevation, - cbTokenElevation, out cbTokenElevation)) - { - // When the process is run on operating systems prior to Windows - // Vista, GetTokenInformation returns false with the error code - // ERROR_INVALID_PARAMETER because TokenElevation is not supported - // on those operating systems. - throw new Win32Exception(); - } - - // Marshal the TOKEN_ELEVATION struct from native to .NET object. - TOKEN_ELEVATION elevation = (TOKEN_ELEVATION)Marshal.PtrToStructure( - pTokenElevation, typeof(TOKEN_ELEVATION)); - - // TOKEN_ELEVATION.TokenIsElevated is a non-zero value if the token - // has elevated privileges; otherwise, a zero value. - fIsElevated = (elevation.TokenIsElevated != 0); - } - finally - { - // Centralized cleanup for all allocated resources. - if (hToken != null) - { - hToken.Close(); - hToken = null; - } - if (pTokenElevation != IntPtr.Zero) - { - Marshal.FreeHGlobal(pTokenElevation); - pTokenElevation = IntPtr.Zero; - cbTokenElevation = 0; - } - } - - return fIsElevated; - } - - public static bool IsUacEnabled() - { - if (System.Environment.OSVersion.Version.Major < 6) - return true; - using (var uacKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System", false)) - return uacKey.GetValue("EnableLUA", 0).Equals(1); - } - - /// - /// The function gets the integrity level of the current process. Integrity - /// level is only available on Windows Vista and newer operating systems, thus - /// GetProcessIntegrityLevel throws a C++ exception if it is called on systems - /// prior to Windows Vista. - /// - /// - /// Returns the integrity level of the current process. It is usually one of - /// these values: - /// - /// SECURITY_MANDATORY_UNTRUSTED_RID - means untrusted level. It is used - /// by processes started by the Anonymous group. Blocks most write access. - /// (SID: S-1-16-0x0) - /// - /// SECURITY_MANDATORY_LOW_RID - means low integrity level. It is used by - /// Protected Mode Internet Explorer. Blocks write access to most objects - /// (such as files and registry keys) on the system. (SID: S-1-16-0x1000) - /// - /// SECURITY_MANDATORY_MEDIUM_RID - means medium integrity level. It is - /// used by normal applications being launched while UAC is enabled. - /// (SID: S-1-16-0x2000) - /// - /// SECURITY_MANDATORY_HIGH_RID - means high integrity level. It is used - /// by administrative applications launched through elevation when UAC is - /// enabled, or normal applications if UAC is disabled and the user is an - /// administrator. (SID: S-1-16-0x3000) - /// - /// SECURITY_MANDATORY_SYSTEM_RID - means system integrity level. It is - /// used by services and other system-level applications (such as WinInit, - /// WinLogon, SMSS, etc.) (SID: S-1-16-0x4000) - /// - /// - /// - /// When any native Windows API call fails, the function throws a Win32Exception - /// with the last error code. - /// - public static int GetProcessIntegrityLevel() - { - int IL = -1; - SafeTokenHandle hToken = null; - int cbTokenIL = 0; - IntPtr pTokenIL = IntPtr.Zero; - - try - { - // Open the access token of the current process with TOKEN_QUERY. - if (!NativeMethods.OpenProcessToken(Process.GetCurrentProcess().Handle, - NativeMethods.TOKEN_QUERY, out hToken)) - { - throw new Win32Exception(); - } - - // Then we must query the size of the integrity level information - // associated with the token. Note that we expect GetTokenInformation - // to return false with the ERROR_INSUFFICIENT_BUFFER error code - // because we've given it a null buffer. On exit cbTokenIL will tell - // the size of the group information. - if (!NativeMethods.GetTokenInformation(hToken, - TOKEN_INFORMATION_CLASS.TokenIntegrityLevel, IntPtr.Zero, 0, - out cbTokenIL)) - { - int error = Marshal.GetLastWin32Error(); - if (error != NativeMethods.ERROR_INSUFFICIENT_BUFFER) - { - // When the process is run on operating systems prior to - // Windows Vista, GetTokenInformation returns false with the - // ERROR_INVALID_PARAMETER error code because - // TokenIntegrityLevel is not supported on those OS's. - throw new Win32Exception(error); - } - } - - // Now we allocate a buffer for the integrity level information. - pTokenIL = Marshal.AllocHGlobal(cbTokenIL); - if (pTokenIL == IntPtr.Zero) - { - throw new Win32Exception(); - } - - // Now we ask for the integrity level information again. This may fail - // if an administrator has added this account to an additional group - // between our first call to GetTokenInformation and this one. - if (!NativeMethods.GetTokenInformation(hToken, - TOKEN_INFORMATION_CLASS.TokenIntegrityLevel, pTokenIL, cbTokenIL, - out cbTokenIL)) - { - throw new Win32Exception(); - } - - // Marshal the TOKEN_MANDATORY_LABEL struct from native to .NET object. - TOKEN_MANDATORY_LABEL tokenIL = (TOKEN_MANDATORY_LABEL) - Marshal.PtrToStructure(pTokenIL, typeof(TOKEN_MANDATORY_LABEL)); - - // Integrity Level SIDs are in the form of S-1-16-0xXXXX. (e.g. - // S-1-16-0x1000 stands for low integrity level SID). There is one - // and only one sub-authority. - IntPtr pIL = NativeMethods.GetSidSubAuthority(tokenIL.Label.Sid, 0); - IL = Marshal.ReadInt32(pIL); - } - finally - { - // Centralized cleanup for all allocated resources. - if (hToken != null) - { - hToken.Close(); - hToken = null; - } - if (pTokenIL != IntPtr.Zero) - { - Marshal.FreeHGlobal(pTokenIL); - pTokenIL = IntPtr.Zero; - cbTokenIL = 0; - } - } - - return IL; - } - - public static void RestartElevated() - { - // Elevate the process if it is not run as administrator. - if (!IsRunAsAdmin()) - { - // Launch itself as administrator - ProcessStartInfo proc = new ProcessStartInfo(System.Windows.Forms.Application.ExecutablePath) { UseShellExecute = true, WorkingDirectory = Environment.CurrentDirectory, Verb = "runas" }; - try - { - Process.Start(proc); - } - catch - { - // The user refused the elevation. Do nothing and return directly. - return; - } - - System.Windows.Forms.Application.Exit(); - } - else - { - System.Windows.Forms.MessageBox.Show("The process is running as administrator", "UAC"); - } - } - - /// - /// The TOKEN_INFORMATION_CLASS enumeration type contains values that - /// specify the type of information being assigned to or retrieved from - /// an access token. - /// - private enum TOKEN_INFORMATION_CLASS - { - TokenUser = 1, - TokenGroups, - TokenPrivileges, - TokenOwner, - TokenPrimaryGroup, - TokenDefaultDacl, - TokenSource, - TokenType, - TokenImpersonationLevel, - TokenStatistics, - TokenRestrictedSids, - TokenSessionId, - TokenGroupsAndPrivileges, - TokenSessionReference, - TokenSandBoxInert, - TokenAuditPolicy, - TokenOrigin, - TokenElevationType, - TokenLinkedToken, - TokenElevation, - TokenHasRestrictions, - TokenAccessInformation, - TokenVirtualizationAllowed, - TokenVirtualizationEnabled, - TokenIntegrityLevel, - TokenUIAccess, - TokenMandatoryPolicy, - TokenLogonSid, - MaxTokenInfoClass - } - - /// - /// The WELL_KNOWN_SID_TYPE enumeration type is a list of commonly used - /// security identifiers (SIDs). Programs can pass these values to the - /// CreateWellKnownSid function to create a SID from this list. - /// - private enum WELL_KNOWN_SID_TYPE - { - WinNullSid = 0, - WinWorldSid = 1, - WinLocalSid = 2, - WinCreatorOwnerSid = 3, - WinCreatorGroupSid = 4, - WinCreatorOwnerServerSid = 5, - WinCreatorGroupServerSid = 6, - WinNtAuthoritySid = 7, - WinDialupSid = 8, - WinNetworkSid = 9, - WinBatchSid = 10, - WinInteractiveSid = 11, - WinServiceSid = 12, - WinAnonymousSid = 13, - WinProxySid = 14, - WinEnterpriseControllersSid = 15, - WinSelfSid = 16, - WinAuthenticatedUserSid = 17, - WinRestrictedCodeSid = 18, - WinTerminalServerSid = 19, - WinRemoteLogonIdSid = 20, - WinLogonIdsSid = 21, - WinLocalSystemSid = 22, - WinLocalServiceSid = 23, - WinNetworkServiceSid = 24, - WinBuiltinDomainSid = 25, - WinBuiltinAdministratorsSid = 26, - WinBuiltinUsersSid = 27, - WinBuiltinGuestsSid = 28, - WinBuiltinPowerUsersSid = 29, - WinBuiltinAccountOperatorsSid = 30, - WinBuiltinSystemOperatorsSid = 31, - WinBuiltinPrintOperatorsSid = 32, - WinBuiltinBackupOperatorsSid = 33, - WinBuiltinReplicatorSid = 34, - WinBuiltinPreWindows2000CompatibleAccessSid = 35, - WinBuiltinRemoteDesktopUsersSid = 36, - WinBuiltinNetworkConfigurationOperatorsSid = 37, - WinAccountAdministratorSid = 38, - WinAccountGuestSid = 39, - WinAccountKrbtgtSid = 40, - WinAccountDomainAdminsSid = 41, - WinAccountDomainUsersSid = 42, - WinAccountDomainGuestsSid = 43, - WinAccountComputersSid = 44, - WinAccountControllersSid = 45, - WinAccountCertAdminsSid = 46, - WinAccountSchemaAdminsSid = 47, - WinAccountEnterpriseAdminsSid = 48, - WinAccountPolicyAdminsSid = 49, - WinAccountRasAndIasServersSid = 50, - WinNTLMAuthenticationSid = 51, - WinDigestAuthenticationSid = 52, - WinSChannelAuthenticationSid = 53, - WinThisOrganizationSid = 54, - WinOtherOrganizationSid = 55, - WinBuiltinIncomingForestTrustBuildersSid = 56, - WinBuiltinPerfMonitoringUsersSid = 57, - WinBuiltinPerfLoggingUsersSid = 58, - WinBuiltinAuthorizationAccessSid = 59, - WinBuiltinTerminalServerLicenseServersSid = 60, - WinBuiltinDCOMUsersSid = 61, - WinBuiltinIUsersSid = 62, - WinIUserSid = 63, - WinBuiltinCryptoOperatorsSid = 64, - WinUntrustedLabelSid = 65, - WinLowLabelSid = 66, - WinMediumLabelSid = 67, - WinHighLabelSid = 68, - WinSystemLabelSid = 69, - WinWriteRestrictedCodeSid = 70, - WinCreatorOwnerRightsSid = 71, - WinCacheablePrincipalsGroupSid = 72, - WinNonCacheablePrincipalsGroupSid = 73, - WinEnterpriseReadonlyControllersSid = 74, - WinAccountReadonlyControllersSid = 75, - WinBuiltinEventLogReadersGroup = 76, - WinNewEnterpriseReadonlyControllersSid = 77, - WinBuiltinCertSvcDComAccessGroup = 78 - } - - /// - /// The SECURITY_IMPERSONATION_LEVEL enumeration type contains values - /// that specify security impersonation levels. Security impersonation - /// levels govern the degree to which a server process can act on behalf - /// of a client process. - /// - private enum SECURITY_IMPERSONATION_LEVEL - { - SecurityAnonymous, - SecurityIdentification, - SecurityImpersonation, - SecurityDelegation - } - - /// - /// The TOKEN_ELEVATION_TYPE enumeration indicates the elevation type of - /// token being queried by the GetTokenInformation function or set by - /// the SetTokenInformation function. - /// - private enum TOKEN_ELEVATION_TYPE - { - TokenElevationTypeDefault = 1, - TokenElevationTypeFull, - TokenElevationTypeLimited - } - - /// - /// The structure represents a security identifier (SID) and its - /// attributes. SIDs are used to uniquely identify users or groups. - /// - [StructLayout(LayoutKind.Sequential)] - private struct SID_AND_ATTRIBUTES - { - public IntPtr Sid; - public UInt32 Attributes; - } - - /// - /// The structure indicates whether a token has elevated privileges. - /// - [StructLayout(LayoutKind.Sequential)] - private struct TOKEN_ELEVATION - { - public Int32 TokenIsElevated; - } - - /// - /// The structure specifies the mandatory integrity level for a token. - /// - [StructLayout(LayoutKind.Sequential)] - private struct TOKEN_MANDATORY_LABEL - { - public SID_AND_ATTRIBUTES Label; - } - - /// - /// Represents a wrapper class for a token handle. - /// - private class SafeTokenHandle : SafeHandleZeroOrMinusOneIsInvalid - { - private SafeTokenHandle() : base(true) - { - } - - internal SafeTokenHandle(IntPtr handle) : base(true) - { - SetHandle(handle); - } - - [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] - internal static extern bool CloseHandle(IntPtr handle); - - protected override bool ReleaseHandle() => CloseHandle(handle); - } - - private class NativeMethods - { - // Token Specific Access Rights - - public const UInt32 STANDARD_RIGHTS_REQUIRED = 0x000F0000; - public const UInt32 STANDARD_RIGHTS_READ = 0x00020000; - public const UInt32 TOKEN_ASSIGN_PRIMARY = 0x0001; - public const UInt32 TOKEN_DUPLICATE = 0x0002; - public const UInt32 TOKEN_IMPERSONATE = 0x0004; - public const UInt32 TOKEN_QUERY = 0x0008; - public const UInt32 TOKEN_QUERY_SOURCE = 0x0010; - public const UInt32 TOKEN_ADJUST_PRIVILEGES = 0x0020; - public const UInt32 TOKEN_ADJUST_GROUPS = 0x0040; - public const UInt32 TOKEN_ADJUST_DEFAULT = 0x0080; - public const UInt32 TOKEN_ADJUST_SESSIONID = 0x0100; - public const UInt32 TOKEN_READ = (STANDARD_RIGHTS_READ | TOKEN_QUERY); - public const UInt32 TOKEN_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED | - TOKEN_ASSIGN_PRIMARY | TOKEN_DUPLICATE | TOKEN_IMPERSONATE | - TOKEN_QUERY | TOKEN_QUERY_SOURCE | TOKEN_ADJUST_PRIVILEGES | - TOKEN_ADJUST_GROUPS | TOKEN_ADJUST_DEFAULT | TOKEN_ADJUST_SESSIONID); - - - public const Int32 ERROR_INSUFFICIENT_BUFFER = 122; - - - // Integrity Levels - - public const Int32 SECURITY_MANDATORY_UNTRUSTED_RID = 0x00000000; - public const Int32 SECURITY_MANDATORY_LOW_RID = 0x00001000; - public const Int32 SECURITY_MANDATORY_MEDIUM_RID = 0x00002000; - public const Int32 SECURITY_MANDATORY_HIGH_RID = 0x00003000; - public const Int32 SECURITY_MANDATORY_SYSTEM_RID = 0x00004000; - - - /// - /// The function opens the access token associated with a process. - /// - /// - /// A handle to the process whose access token is opened. - /// - /// - /// Specifies an access mask that specifies the requested types of - /// access to the access token. - /// - /// - /// Outputs a handle that identifies the newly opened access token - /// when the function returns. - /// - /// - [DllImport("advapi32", CharSet = CharSet.Auto, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool OpenProcessToken(IntPtr hProcess, - UInt32 desiredAccess, out SafeTokenHandle hToken); - - - /// - /// The function creates a new access token that duplicates one - /// already in existence. - /// - /// - /// A handle to an access token opened with TOKEN_DUPLICATE access. - /// - /// - /// Specifies a SECURITY_IMPERSONATION_LEVEL enumerated type that - /// supplies the impersonation level of the new token. - /// - /// - /// Outputs a handle to the duplicate token. - /// - /// - [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)] - public extern static bool DuplicateToken( - SafeTokenHandle ExistingTokenHandle, - SECURITY_IMPERSONATION_LEVEL ImpersonationLevel, - out SafeTokenHandle DuplicateTokenHandle); - - - /// - /// The function retrieves a specified type of information about an - /// access token. The calling process must have appropriate access - /// rights to obtain the information. - /// - /// - /// A handle to an access token from which information is retrieved. - /// - /// - /// Specifies a value from the TOKEN_INFORMATION_CLASS enumerated - /// type to identify the type of information the function retrieves. - /// - /// - /// A pointer to a buffer the function fills with the requested - /// information. - /// - /// - /// Specifies the size, in bytes, of the buffer pointed to by the - /// TokenInformation parameter. - /// - /// - /// A pointer to a variable that receives the number of bytes needed - /// for the buffer pointed to by the TokenInformation parameter. - /// - /// - [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool GetTokenInformation( - SafeTokenHandle hToken, - TOKEN_INFORMATION_CLASS tokenInfoClass, - IntPtr pTokenInfo, - Int32 tokenInfoLength, - out Int32 returnLength); - - - /// - /// Sets the elevation required state for a specified button or - /// command link to display an elevated icon. - /// - public const UInt32 BCM_SETSHIELD = 0x160C; - - - /// - /// Sends the specified message to a window or windows. The function - /// calls the window procedure for the specified window and does not - /// return until the window procedure has processed the message. - /// - /// - /// Handle to the window whose window procedure will receive the - /// message. - /// - /// Specifies the message to be sent. - /// - /// Specifies additional message-specific information. - /// - /// - /// Specifies additional message-specific information. - /// - /// - [DllImport("user32", CharSet = CharSet.Auto, SetLastError = true)] - public static extern int SendMessage(IntPtr hWnd, UInt32 Msg, int wParam, IntPtr lParam); - - - /// - /// The function returns a pointer to a specified sub-authority in a - /// security identifier (SID). The sub-authority value is a relative - /// identifier (RID). - /// - /// - /// A pointer to the SID structure from which a pointer to a - /// sub-authority is to be returned. - /// - /// - /// Specifies an index value identifying the sub-authority array - /// element whose address the function will return. - /// - /// - /// If the function succeeds, the return value is a pointer to the - /// specified SID sub-authority. To get extended error information, - /// call GetLastError. If the function fails, the return value is - /// undefined. The function fails if the specified SID structure is - /// not valid or if the index value specified by the nSubAuthority - /// parameter is out of bounds. - /// - [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)] - public static extern IntPtr GetSidSubAuthority(IntPtr pSid, UInt32 nSubAuthority); - } - } -} \ No newline at end of file diff --git a/TaskSchedulerConfig/WizardForm.Designer.cs b/TaskSchedulerConfig/WizardForm.Designer.cs deleted file mode 100644 index 77f37ba..0000000 --- a/TaskSchedulerConfig/WizardForm.Designer.cs +++ /dev/null @@ -1,542 +0,0 @@ -namespace TaskSchedulerConfig -{ - partial class WizardForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WizardForm)); - this.wizardControl1 = new AeroWizard.WizardControl(); - this.introWizPg = new AeroWizard.WizardPage(); - this.runAsAdminPrompt = new System.Windows.Forms.TableLayoutPanel(); - this.label4 = new System.Windows.Forms.Label(); - this.linkLabel1 = new System.Windows.Forms.LinkLabel(); - this.pictureBox2 = new System.Windows.Forms.PictureBox(); - this.autoRepairCheck = new System.Windows.Forms.CheckBox(); - this.label3 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.pictureBox1 = new System.Windows.Forms.PictureBox(); - this.detectWizPg = new AeroWizard.WizardPage(); - this.scanLocalStatusLabel = new System.Windows.Forms.Label(); - this.progressBar1 = new System.Windows.Forms.ProgressBar(); - this.completeNoProbWizPg = new AeroWizard.WizardPage(); - this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); - this.closeBtn = new TaskSchedulerConfig.CommandLink(); - this.connRemoteBtn = new TaskSchedulerConfig.CommandLink(); - this.label5 = new System.Windows.Forms.Label(); - this.explOptionsBtn = new TaskSchedulerConfig.CommandLink(); - this.completeWithProbWizPg = new AeroWizard.WizardPage(); - this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.localResultLabel = new System.Windows.Forms.Label(); - this.localCloseBtn = new TaskSchedulerConfig.CommandLink(); - this.remoteConnBtn = new TaskSchedulerConfig.CommandLink(); - this.issueList = new System.Windows.Forms.Panel(); - this.reportWizPg = new AeroWizard.WizardPage(); - this.localConfigList = new System.Windows.Forms.Panel(); - this.selectRemoteWizPg = new AeroWizard.WizardPage(); - this.computerBrowseBtn = new System.Windows.Forms.Button(); - this.remoteSvrText = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.scanner = new System.ComponentModel.BackgroundWorker(); - this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); - ((System.ComponentModel.ISupportInitialize)(this.wizardControl1)).BeginInit(); - this.introWizPg.SuspendLayout(); - this.runAsAdminPrompt.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); - this.detectWizPg.SuspendLayout(); - this.completeNoProbWizPg.SuspendLayout(); - this.tableLayoutPanel2.SuspendLayout(); - this.completeWithProbWizPg.SuspendLayout(); - this.tableLayoutPanel1.SuspendLayout(); - this.reportWizPg.SuspendLayout(); - this.selectRemoteWizPg.SuspendLayout(); - this.SuspendLayout(); - // - // wizardControl1 - // - this.wizardControl1.BackColor = System.Drawing.Color.White; - this.wizardControl1.Dock = System.Windows.Forms.DockStyle.Fill; - this.wizardControl1.FinishButtonText = "C&lose"; - this.wizardControl1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.wizardControl1.Location = new System.Drawing.Point(0, 0); - this.wizardControl1.Name = "wizardControl1"; - this.wizardControl1.Pages.Add(this.introWizPg); - this.wizardControl1.Pages.Add(this.detectWizPg); - this.wizardControl1.Pages.Add(this.completeNoProbWizPg); - this.wizardControl1.Pages.Add(this.completeWithProbWizPg); - this.wizardControl1.Pages.Add(this.reportWizPg); - this.wizardControl1.Pages.Add(this.selectRemoteWizPg); - this.wizardControl1.Size = new System.Drawing.Size(562, 415); - this.wizardControl1.TabIndex = 0; - this.wizardControl1.Title = "Task Scheduler Diagnostics"; - this.wizardControl1.TitleIcon = ((System.Drawing.Icon)(resources.GetObject("wizardControl1.TitleIcon"))); - this.wizardControl1.Cancelling += new System.ComponentModel.CancelEventHandler(this.wizardControl1_Cancelling); - this.wizardControl1.Finished += new System.EventHandler(this.closeBtn_Click); - // - // introWizPg - // - this.introWizPg.Controls.Add(this.runAsAdminPrompt); - this.introWizPg.Controls.Add(this.autoRepairCheck); - this.introWizPg.Controls.Add(this.label3); - this.introWizPg.Controls.Add(this.label2); - this.introWizPg.Controls.Add(this.pictureBox1); - this.introWizPg.Name = "introWizPg"; - this.introWizPg.Size = new System.Drawing.Size(515, 261); - this.introWizPg.TabIndex = 6; - this.introWizPg.Text = "Troubleshoot and help prevent computer problems"; - this.introWizPg.Commit += new System.EventHandler(this.introWizPg_Commit); - this.introWizPg.Initialize += new System.EventHandler(this.intro_Initialize); - // - // runAsAdminPrompt - // - this.runAsAdminPrompt.AutoSize = true; - this.runAsAdminPrompt.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.runAsAdminPrompt.ColumnCount = 2; - this.runAsAdminPrompt.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.runAsAdminPrompt.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.runAsAdminPrompt.Controls.Add(this.label4, 0, 0); - this.runAsAdminPrompt.Controls.Add(this.linkLabel1, 1, 1); - this.runAsAdminPrompt.Controls.Add(this.pictureBox2, 0, 1); - this.runAsAdminPrompt.Dock = System.Windows.Forms.DockStyle.Bottom; - this.runAsAdminPrompt.Location = new System.Drawing.Point(0, 202); - this.runAsAdminPrompt.Name = "runAsAdminPrompt"; - this.runAsAdminPrompt.RowCount = 2; - this.runAsAdminPrompt.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.runAsAdminPrompt.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.runAsAdminPrompt.Size = new System.Drawing.Size(515, 40); - this.runAsAdminPrompt.TabIndex = 3; - // - // label4 - // - this.label4.AutoSize = true; - this.runAsAdminPrompt.SetColumnSpan(this.label4, 2); - this.label4.Location = new System.Drawing.Point(3, 0); - this.label4.Margin = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(387, 15); - this.label4.TabIndex = 0; - this.label4.Text = "Troubleshooting with administrator permissions might find more issues."; - // - // linkLabel1 - // - this.linkLabel1.AutoSize = true; - this.linkLabel1.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.linkLabel1.Location = new System.Drawing.Point(24, 18); - this.linkLabel1.Margin = new System.Windows.Forms.Padding(3, 0, 3, 3); - this.linkLabel1.Name = "linkLabel1"; - this.linkLabel1.Size = new System.Drawing.Size(116, 15); - this.linkLabel1.TabIndex = 2; - this.linkLabel1.TabStop = true; - this.linkLabel1.Text = "Run as administrator"; - this.linkLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked); - // - // pictureBox2 - // - this.pictureBox2.Image = global::TaskSchedulerConfig.Properties.Resources.shield; - this.pictureBox2.Location = new System.Drawing.Point(5, 18); - this.pictureBox2.Margin = new System.Windows.Forms.Padding(5, 0, 0, 6); - this.pictureBox2.Name = "pictureBox2"; - this.pictureBox2.Size = new System.Drawing.Size(16, 16); - this.pictureBox2.TabIndex = 3; - this.pictureBox2.TabStop = false; - // - // autoRepairCheck - // - this.autoRepairCheck.AutoSize = true; - this.autoRepairCheck.Checked = true; - this.autoRepairCheck.CheckState = System.Windows.Forms.CheckState.Checked; - this.autoRepairCheck.Dock = System.Windows.Forms.DockStyle.Bottom; - this.autoRepairCheck.Location = new System.Drawing.Point(0, 242); - this.autoRepairCheck.Name = "autoRepairCheck"; - this.autoRepairCheck.Padding = new System.Windows.Forms.Padding(5, 0, 0, 0); - this.autoRepairCheck.Size = new System.Drawing.Size(515, 19); - this.autoRepairCheck.TabIndex = 1; - this.autoRepairCheck.Text = "Apply repairs automatically"; - this.autoRepairCheck.UseVisualStyleBackColor = true; - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(39, 22); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(441, 15); - this.label3.TabIndex = 2; - this.label3.Text = "Find and fix problems with Task Scheduler connecting to this and other computers"; - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Font = new System.Drawing.Font("Segoe UI", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.World); - this.label2.Location = new System.Drawing.Point(39, 1); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(186, 20); - this.label2.TabIndex = 1; - this.label2.Text = "Task Scheduler Diagnostics"; - // - // pictureBox1 - // - this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); - this.pictureBox1.Location = new System.Drawing.Point(4, 4); - this.pictureBox1.Name = "pictureBox1"; - this.pictureBox1.Size = new System.Drawing.Size(32, 32); - this.pictureBox1.TabIndex = 0; - this.pictureBox1.TabStop = false; - // - // detectWizPg - // - this.detectWizPg.AllowBack = false; - this.detectWizPg.Controls.Add(this.scanLocalStatusLabel); - this.detectWizPg.Controls.Add(this.progressBar1); - this.detectWizPg.Name = "detectWizPg"; - this.detectWizPg.ShowNext = false; - this.detectWizPg.Size = new System.Drawing.Size(515, 261); - this.detectWizPg.TabIndex = 0; - this.detectWizPg.Text = "Detecting problems"; - this.detectWizPg.Initialize += new System.EventHandler(this.scanLocal_Initialize); - // - // scanLocalStatusLabel - // - this.scanLocalStatusLabel.Dock = System.Windows.Forms.DockStyle.Top; - this.scanLocalStatusLabel.Location = new System.Drawing.Point(0, 0); - this.scanLocalStatusLabel.Name = "scanLocalStatusLabel"; - this.scanLocalStatusLabel.Size = new System.Drawing.Size(515, 37); - this.scanLocalStatusLabel.TabIndex = 2; - this.scanLocalStatusLabel.Text = "Running diagnosis..."; - // - // progressBar1 - // - this.progressBar1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.progressBar1.Location = new System.Drawing.Point(47, 40); - this.progressBar1.Name = "progressBar1"; - this.progressBar1.Size = new System.Drawing.Size(417, 16); - this.progressBar1.Style = System.Windows.Forms.ProgressBarStyle.Marquee; - this.progressBar1.TabIndex = 1; - // - // completeNoProbWizPg - // - this.completeNoProbWizPg.Controls.Add(this.tableLayoutPanel2); - this.completeNoProbWizPg.HelpText = "View detailed information"; - this.completeNoProbWizPg.IsFinishPage = true; - this.completeNoProbWizPg.Name = "completeNoProbWizPg"; - this.completeNoProbWizPg.ShowNext = false; - this.completeNoProbWizPg.Size = new System.Drawing.Size(515, 261); - this.completeNoProbWizPg.TabIndex = 7; - this.completeNoProbWizPg.Text = "Troubleshooting didn\'t identify any problems"; - this.completeNoProbWizPg.HelpClicked += new System.EventHandler(this.showLocalResults_HelpClicked); - // - // tableLayoutPanel2 - // - this.tableLayoutPanel2.AutoSize = true; - this.tableLayoutPanel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel2.ColumnCount = 1; - this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel2.Controls.Add(this.closeBtn, 0, 2); - this.tableLayoutPanel2.Controls.Add(this.connRemoteBtn, 0, 1); - this.tableLayoutPanel2.Controls.Add(this.label5, 0, 0); - this.tableLayoutPanel2.Controls.Add(this.explOptionsBtn, 0, 1); - this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Top; - this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel2.Name = "tableLayoutPanel2"; - this.tableLayoutPanel2.Padding = new System.Windows.Forms.Padding(0, 0, 3, 0); - this.tableLayoutPanel2.RowCount = 3; - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel2.Size = new System.Drawing.Size(515, 186); - this.tableLayoutPanel2.TabIndex = 10; - // - // closeBtn - // - this.closeBtn.Dock = System.Windows.Forms.DockStyle.Top; - this.closeBtn.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.closeBtn.Location = new System.Drawing.Point(3, 137); - this.closeBtn.Name = "closeBtn"; - this.closeBtn.Size = new System.Drawing.Size(509, 46); - this.closeBtn.TabIndex = 10; - this.closeBtn.Text = "Close the troubleshooter"; - this.closeBtn.UseVisualStyleBackColor = true; - this.closeBtn.Click += new System.EventHandler(this.closeBtn_Click); - // - // connRemoteBtn - // - this.connRemoteBtn.Dock = System.Windows.Forms.DockStyle.Top; - this.connRemoteBtn.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.connRemoteBtn.Location = new System.Drawing.Point(3, 85); - this.connRemoteBtn.Name = "connRemoteBtn"; - this.connRemoteBtn.Size = new System.Drawing.Size(509, 46); - this.connRemoteBtn.TabIndex = 9; - this.connRemoteBtn.Text = "Troubleshoot connecting to a remote computer"; - this.connRemoteBtn.UseVisualStyleBackColor = true; - this.connRemoteBtn.Click += new System.EventHandler(this.connRemoteBtn_Click); - // - // label5 - // - this.label5.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.label5.Location = new System.Drawing.Point(3, 0); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(509, 30); - this.label5.TabIndex = 6; - this.label5.Text = "You can try exploring other options that might be helpful."; - // - // explOptionsBtn - // - this.explOptionsBtn.Dock = System.Windows.Forms.DockStyle.Top; - this.explOptionsBtn.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.explOptionsBtn.Location = new System.Drawing.Point(3, 33); - this.explOptionsBtn.Name = "explOptionsBtn"; - this.explOptionsBtn.Size = new System.Drawing.Size(509, 46); - this.explOptionsBtn.TabIndex = 7; - this.explOptionsBtn.Text = "Explore additional options"; - this.explOptionsBtn.UseVisualStyleBackColor = true; - this.explOptionsBtn.Click += new System.EventHandler(this.explOptionsBtn_Click); - // - // completeWithProbWizPg - // - this.completeWithProbWizPg.AllowBack = false; - this.completeWithProbWizPg.AllowCancel = false; - this.completeWithProbWizPg.AllowNext = false; - this.completeWithProbWizPg.Controls.Add(this.tableLayoutPanel1); - this.completeWithProbWizPg.HelpText = "View detailed information"; - this.completeWithProbWizPg.Name = "completeWithProbWizPg"; - this.completeWithProbWizPg.ShowCancel = false; - this.completeWithProbWizPg.ShowNext = false; - this.completeWithProbWizPg.Size = new System.Drawing.Size(515, 261); - this.completeWithProbWizPg.TabIndex = 1; - this.completeWithProbWizPg.Text = "Troubleshooting has completed"; - this.completeWithProbWizPg.HelpClicked += new System.EventHandler(this.showLocalResults_HelpClicked); - this.completeWithProbWizPg.Initialize += new System.EventHandler(this.completeWithProbWizPg_Initialize); - // - // tableLayoutPanel1 - // - this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.tableLayoutPanel1.ColumnCount = 1; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); - this.tableLayoutPanel1.Controls.Add(this.localResultLabel, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.localCloseBtn, 0, 3); - this.tableLayoutPanel1.Controls.Add(this.remoteConnBtn, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.issueList, 0, 1); - this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Top; - this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); - this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 4; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.Size = new System.Drawing.Size(515, 234); - this.tableLayoutPanel1.TabIndex = 9; - // - // localResultLabel - // - this.localResultLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.localResultLabel.Location = new System.Drawing.Point(3, 0); - this.localResultLabel.Name = "localResultLabel"; - this.localResultLabel.Size = new System.Drawing.Size(509, 34); - this.localResultLabel.TabIndex = 6; - this.localResultLabel.Text = "Troubleshooting was able to find the following problems. To fix a problem, check " + - "the resolution below each problem\'s description."; - // - // localCloseBtn - // - this.localCloseBtn.Dock = System.Windows.Forms.DockStyle.Top; - this.localCloseBtn.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.localCloseBtn.Location = new System.Drawing.Point(3, 188); - this.localCloseBtn.Name = "localCloseBtn"; - this.localCloseBtn.Size = new System.Drawing.Size(509, 43); - this.localCloseBtn.TabIndex = 7; - this.localCloseBtn.Text = "Close the troubleshooter"; - this.localCloseBtn.UseVisualStyleBackColor = true; - this.localCloseBtn.Click += new System.EventHandler(this.closeBtn_Click); - // - // remoteConnBtn - // - this.remoteConnBtn.Dock = System.Windows.Forms.DockStyle.Top; - this.remoteConnBtn.FlatStyle = System.Windows.Forms.FlatStyle.System; - this.remoteConnBtn.Location = new System.Drawing.Point(3, 139); - this.remoteConnBtn.Name = "remoteConnBtn"; - this.remoteConnBtn.Size = new System.Drawing.Size(509, 43); - this.remoteConnBtn.TabIndex = 7; - this.remoteConnBtn.Text = "Troubleshoot connecting to a remote computer"; - this.remoteConnBtn.UseVisualStyleBackColor = true; - this.remoteConnBtn.Click += new System.EventHandler(this.connRemoteBtn_Click); - // - // issueList - // - this.issueList.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.issueList.AutoScroll = true; - this.issueList.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.issueList.Location = new System.Drawing.Point(3, 37); - this.issueList.Name = "issueList"; - this.issueList.Size = new System.Drawing.Size(509, 96); - this.issueList.TabIndex = 8; - // - // reportWizPg - // - this.reportWizPg.Controls.Add(this.localConfigList); - this.reportWizPg.IsFinishPage = true; - this.reportWizPg.Name = "reportWizPg"; - this.reportWizPg.NextPage = this.completeWithProbWizPg; - this.reportWizPg.ShowNext = false; - this.reportWizPg.Size = new System.Drawing.Size(515, 261); - this.reportWizPg.TabIndex = 5; - this.reportWizPg.Text = "Troubleshooting report"; - this.reportWizPg.Initialize += new System.EventHandler(this.reportWizPg_Initialize); - // - // localConfigList - // - this.localConfigList.AutoScroll = true; - this.localConfigList.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.localConfigList.Dock = System.Windows.Forms.DockStyle.Fill; - this.localConfigList.Location = new System.Drawing.Point(0, 0); - this.localConfigList.Name = "localConfigList"; - this.localConfigList.Size = new System.Drawing.Size(515, 261); - this.localConfigList.TabIndex = 1; - // - // selectRemoteWizPg - // - this.selectRemoteWizPg.Controls.Add(this.computerBrowseBtn); - this.selectRemoteWizPg.Controls.Add(this.remoteSvrText); - this.selectRemoteWizPg.Controls.Add(this.label1); - this.selectRemoteWizPg.Name = "selectRemoteWizPg"; - this.selectRemoteWizPg.NextPage = this.detectWizPg; - this.selectRemoteWizPg.Size = new System.Drawing.Size(515, 261); - this.selectRemoteWizPg.Suppress = true; - this.selectRemoteWizPg.TabIndex = 2; - this.selectRemoteWizPg.Text = "Select remote computer to troubleshoot"; - this.selectRemoteWizPg.Commit += new System.EventHandler(this.selectRemote_Commit); - // - // computerBrowseBtn - // - this.computerBrowseBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.computerBrowseBtn.Enabled = false; - this.computerBrowseBtn.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.computerBrowseBtn.Location = new System.Drawing.Point(269, 42); - this.computerBrowseBtn.Name = "computerBrowseBtn"; - this.computerBrowseBtn.Size = new System.Drawing.Size(75, 24); - this.computerBrowseBtn.TabIndex = 7; - this.computerBrowseBtn.Text = "Browse..."; - this.computerBrowseBtn.UseVisualStyleBackColor = true; - // - // remoteSvrText - // - this.remoteSvrText.Location = new System.Drawing.Point(4, 43); - this.remoteSvrText.Name = "remoteSvrText"; - this.remoteSvrText.Size = new System.Drawing.Size(259, 23); - this.remoteSvrText.TabIndex = 6; - // - // label1 - // - this.label1.Dock = System.Windows.Forms.DockStyle.Top; - this.label1.Location = new System.Drawing.Point(0, 0); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(515, 39); - this.label1.TabIndex = 5; - this.label1.Text = "Select a remote computer for the troubleshooter to find problems with connecting " + - "to it and accessing the Task Scheduler on that computer."; - // - // scanner - // - this.scanner.WorkerReportsProgress = true; - this.scanner.WorkerSupportsCancellation = true; - this.scanner.DoWork += new System.ComponentModel.DoWorkEventHandler(this.scanner_DoWork); - this.scanner.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(this.scanner_ProgressChanged); - this.scanner.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.scanner_RunWorkerCompleted); - // - // WizardForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(562, 415); - this.Controls.Add(this.wizardControl1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.Name = "WizardForm"; - this.Load += new System.EventHandler(this.WizardForm_Load); - ((System.ComponentModel.ISupportInitialize)(this.wizardControl1)).EndInit(); - this.introWizPg.ResumeLayout(false); - this.introWizPg.PerformLayout(); - this.runAsAdminPrompt.ResumeLayout(false); - this.runAsAdminPrompt.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); - this.detectWizPg.ResumeLayout(false); - this.completeNoProbWizPg.ResumeLayout(false); - this.completeNoProbWizPg.PerformLayout(); - this.tableLayoutPanel2.ResumeLayout(false); - this.completeWithProbWizPg.ResumeLayout(false); - this.completeWithProbWizPg.PerformLayout(); - this.tableLayoutPanel1.ResumeLayout(false); - this.reportWizPg.ResumeLayout(false); - this.selectRemoteWizPg.ResumeLayout(false); - this.selectRemoteWizPg.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private AeroWizard.WizardControl wizardControl1; - private AeroWizard.WizardPage detectWizPg; - private AeroWizard.WizardPage completeWithProbWizPg; - private AeroWizard.WizardPage selectRemoteWizPg; - private System.Windows.Forms.Label scanLocalStatusLabel; - private System.Windows.Forms.ProgressBar progressBar1; - private System.Windows.Forms.TextBox remoteSvrText; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.Button computerBrowseBtn; - private TaskSchedulerConfig.CommandLink remoteConnBtn; - private TaskSchedulerConfig.CommandLink localCloseBtn; - private System.Windows.Forms.Label localResultLabel; - private AeroWizard.WizardPage reportWizPg; - private System.Windows.Forms.Panel localConfigList; - private System.ComponentModel.BackgroundWorker scanner; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; - private AeroWizard.WizardPage introWizPg; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.PictureBox pictureBox1; - private System.Windows.Forms.TableLayoutPanel runAsAdminPrompt; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.LinkLabel linkLabel1; - private System.Windows.Forms.CheckBox autoRepairCheck; - private AeroWizard.WizardPage completeNoProbWizPg; - private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; - private CommandLink closeBtn; - private CommandLink connRemoteBtn; - private CommandLink explOptionsBtn; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.Panel issueList; - private System.Windows.Forms.PictureBox pictureBox2; - private System.Windows.Forms.ToolTip toolTip1; - } -} \ No newline at end of file diff --git a/TaskSchedulerConfig/WizardForm.cs b/TaskSchedulerConfig/WizardForm.cs deleted file mode 100644 index 3194cac..0000000 --- a/TaskSchedulerConfig/WizardForm.cs +++ /dev/null @@ -1,577 +0,0 @@ -using CSUACSelfElevation; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Windows.Forms; - -namespace TaskSchedulerConfig -{ - public partial class WizardForm : Form - { - private bool autofix; - private bool canElevate; - private bool isElevated; - private Diagnostics diags; - - public WizardForm() - { - InitializeComponent(); - canElevate = UACHandler.IsUserInAdminGroup() && UACHandler.IsUacEnabled(); - isElevated = canElevate && UACHandler.IsRunAsAdmin(); - } - - private enum ScanState { Privileges, Firewall, Services, Complete }; - - private void WizardForm_Load(object sender, EventArgs e) - { - } - - private void wizardControl1_Cancelling(object sender, System.ComponentModel.CancelEventArgs e) - { - if (scanner.IsBusy) scanner.CancelAsync(); - } - - // ********* INTRO Page ************* - private void intro_Initialize(object sender, AeroWizard.WizardPageInitEventArgs e) - { - runAsAdminPrompt.Visible = canElevate && !isElevated; - } - - private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - UACHandler.RestartElevated(); - } - - private void introWizPg_Commit(object sender, AeroWizard.WizardPageConfirmEventArgs e) - { - autofix = autoRepairCheck.Checked; - diags = new Diagnostics(null); - } - - // ********* DETECT Page ************* - private void scanLocal_Initialize(object sender, AeroWizard.WizardPageInitEventArgs e) - { - scanner.RunWorkerAsync(); - } - - // ********* NO ERROR Page ************* - private void connRemoteBtn_Click(object sender, EventArgs e) - { - wizardControl1.NextPage(selectRemoteWizPg); - } - - private void explOptionsBtn_Click(object sender, EventArgs e) - { - System.Diagnostics.Process.Start("http://taskscheduler.codeplex.com/wikipage?title=TaskSecurity"); - } - - private void closeBtn_Click(object sender, EventArgs e) - { - Close(); - } - - private void showLocalResults_HelpClicked(object sender, EventArgs e) - { - wizardControl1.NextPage(reportWizPg); - } - - // ********* ERROR Page ************* - private void completeWithProbWizPg_Initialize(object sender, AeroWizard.WizardPageInitEventArgs e) - { - // Fill out list box based on diagnostics - var items = new List(); - foreach (var diag in diags.Issues) - items.Add(MakeStatusItem(diag)); - if (autofix && items.Count > 0) - items.Insert(0, MakeTitleItem("Issues found")); - issueList.Controls.Clear(); - items.Reverse(); - if (items.Count > 0) - issueList.Controls.AddRange(items.ToArray()); - else - wizardControl1.NextPage(completeNoProbWizPg); - } - - private Control MakeStatusItem(Diagnostics.Diagnostic diag, bool indented = true) - { - var status = ItemStatus.Detected; - if (diag.HasIssue.HasValue && !diag.HasIssue.Value) - status = ItemStatus.Checked; - else - { - if (diag.Resolved.HasValue) - { - if (diag.Resolved.Value) - status = ItemStatus.Fixed; - } - else - { - if (diag.Resolution.RequiresConsent || diag.Resolution.RequiresElevation) - status = ItemStatus.NotFixed; - else - status = ItemStatus.None; - } - } - return MakeStatusItem(diag.Name, diag.Description, status, indented); - } - - // ********* REPORT Page ************* - private void reportWizPg_Initialize(object sender, AeroWizard.WizardPageInitEventArgs e) - { - var items = new List(); - foreach (var diag in diags.Issues) - items.Add(MakeReportItem(diag)); - if (items.Count > 0) - items.Insert(0, MakeTitleItem("Issues found")); - int iPos = items.Count; - foreach (var diag in diags.NonIsseus) - items.Add(MakeStatusItem(diag, false)); - if (items.Count > iPos) - items.Insert(iPos, MakeTitleItem("\r\nIssues checked")); - localConfigList.Controls.Clear(); - items.Reverse(); - if (items.Count > 0) - localConfigList.Controls.AddRange(items.ToArray()); - } - - private Control MakeReportItem(Diagnostics.Diagnostic diag) - { - var c = MakeStatusItem(diag, false) as TableLayoutPanel; - c.RowCount = 2; - c.RowStyles.Add(new RowStyle(SizeType.AutoSize)); - c.Controls.Add(MakeLabel(diag.Resolution.Name, diag.Resolution.Description, true), 0, 1); - string resText; - bool canRun = false; - if (diag.Resolved.HasValue) - resText = diag.Resolved.Value ? "Completed" : "Issue not present"; - else - { - resText = diag.Resolution.RequiresConsent ? "Requires consent" : "Not run"; - if (diag.Resolution.RequiresConsent && (!diag.Resolution.RequiresElevation || isElevated)) - canRun = true; - } - c.Controls.Add(MakeLabel(resText, null, false, false, true), 1, 1); - if (canRun) - c.Controls.Add(MakeIcon(Properties.Resources.Run, "Click here to run the repair", diag), 2, 1); - return c; - } - - // ********* REMOTE SERVER Page ************* - private void selectRemote_Commit(object sender, AeroWizard.WizardPageConfirmEventArgs e) - { - diags = new Diagnostics(remoteSvrText.Text); - } - - // ********* SCANNER METHODS ************* - private void scanner_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) - { - object defParam = null; - e.Result = diags; - var rp = new EventHandler((o, m) => scanner.ReportProgress(0, m.Message)); - diags.ShowMessage += rp; - foreach (var d in diags) - { - if (d.Condition(defParam) && (!d.RequiresElevation || isElevated)) - { - scanner.ReportProgress(0, $"Checking {d.Name}..."); - try { d.HasIssue = d.Troubleshooter(defParam); } - catch (Exception ex) { e.Result = ex; System.Diagnostics.Debug.WriteLine($"Error troubleshooting {d.Name}: {ex}"); } - if (d.HasIssue.GetValueOrDefault(true) && autofix && !d.Resolution.RequiresConsent && (!d.Resolution.RequiresElevation || isElevated)) - try { d.Resolution.Resolver(defParam); d.Resolved = !d.Troubleshooter(defParam); } - catch (Exception ex2) { System.Diagnostics.Debug.WriteLine($"Error resolving {d.Name}: {ex2}"); } - } - } - diags.ShowMessage -= rp; - } - - private void scanner_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e) - { - scanLocalStatusLabel.Text = e.UserState?.ToString(); - if (e.ProgressPercentage == 100) - wizardControl1.NextPage(); - } - - private void scanner_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e) - { - if (!e.Cancelled) - { - if (e.Error != null) - { - localResultLabel.Text = "An error occurred while troubleshooting. Error: " + e.Error.ToString(); - wizardControl1.NextPage(completeWithProbWizPg); - } - else - { - int i = 0; foreach (var d in diags.Issues) i++; - wizardControl1.NextPage(i == 0 ? completeNoProbWizPg : completeWithProbWizPg); - } - } - } - - /*private void listBox1_DrawItem(object sender, DrawItemEventArgs e) - { - ((sender as ListBox)?.Items[e.Index] as LBItem)?.DrawItem(e); - } - - private void listBox1_MeasureItem(object sender, MeasureItemEventArgs e) - { - var lb = sender as ListBox; - (lb?.Items[e.Index] as LBItem)?.MeasureItem(e, lb?.Font); - }*/ - - private Control MakeTitleItem(string text, string tooltip = null) - { - var c = MakeTableItem(1, 1); - c.Controls.Add(MakeLabel(text, tooltip, false, true, false), 0, 0); - return c; - } - - private enum ItemStatus { None, Fixed, Detected, NotFixed, Checked } - - private Control MakeStatusItem(string text, string tooltip, ItemStatus status, bool indented = false) - { - var c = MakeTableItem(1, 3); - c.ColumnStyles[1] = new ColumnStyle(SizeType.Absolute, 100); - c.ColumnStyles[2] = new ColumnStyle(SizeType.AutoSize); - c.Controls.Add(MakeLabel(text, tooltip, indented), 0, 0); - c.Controls.Add(MakeStatusLabel(status), 1, 0); - c.Controls.Add(MakeStatusIcon(status), 2, 0); - return c; - } - - private Control MakeStatusIcon(ItemStatus status) - { - Image img = Properties.Resources.NotFixed; - if (status == ItemStatus.Checked || status == ItemStatus.Fixed) - img = Properties.Resources.Fixed; - if (status == ItemStatus.Detected) - img = Properties.Resources.Detected; - return MakeIcon(img); - } - - private Control MakeStatusLabel(ItemStatus status) - { - string text; - switch (status) - { - case ItemStatus.Fixed: - text = "Fixed"; break; - case ItemStatus.Detected: - text = "Detected"; break; - case ItemStatus.NotFixed: - text = "Not fixed"; break; - case ItemStatus.Checked: - text = "Checked"; break; - default: - text = "Unknown"; break; - } - return MakeLabel(text); - } - - private Label MakeLabel(string text, string tooltip = null, bool indented = false, bool bold = false, bool ital = false) - { - var fs = FontStyle.Regular; - if (bold) fs |= FontStyle.Bold; - if (ital) fs |= FontStyle.Italic; - var l = new Label - { - Anchor = AnchorStyles.Left | AnchorStyles.Right, - AutoSize = true, - Font = new Font(wizardControl1.Font, fs), - Margin = new Padding(0), - Padding = new Padding(indented ? 12 : 0, 2, 0, 2), - Text = text, - }; - if (tooltip != null) - toolTip1.SetToolTip(l, tooltip); - return l; - } - - private TableLayoutPanel MakeTableItem(int rows = 1, int cols = 1) - { - var c = new TableLayoutPanel - { - AutoSize = true, - AutoSizeMode = AutoSizeMode.GrowAndShrink, - ColumnCount = cols, - Dock = DockStyle.Top, - Margin = new Padding(0), - RowCount = rows, - }; - for (int i = 0; i < cols; i++) - c.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F)); - for (int i = 0; i < rows; i++) - c.RowStyles.Add(new RowStyle(SizeType.AutoSize)); - return c; - } - - private PictureBox MakeIcon(Image image, string tooltip = null, Diagnostics.Diagnostic diag = null) - { - var p = new PictureBox - { - Anchor = AnchorStyles.Right, - Image = image, - Margin = new Padding(4, 2, 10, 2), - Size = new Size(16, 16), - TabStop = false, - }; - if (tooltip != null) - toolTip1.SetToolTip(p, tooltip); - if (diag?.Resolution.Resolver != null) - p.Click += (s, e) => PromptAndRun(s, diag); - return p; - } - - private void PromptAndRun(object sender, Diagnostics.Diagnostic diag) - { - var p = sender as PictureBox; - if (p?.Tag == null && diag.Resolution.Resolver != null && MessageBox.Show(this, $"Execute the following patch?\n\n{diag.Resolution.Name}", "Apply Fix", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes) - { - diag.Resolution.Resolver?.Invoke(null); - if (!diag.Troubleshooter(null)) - { - if (p != null) - { - p.Image = Properties.Resources.Fixed; - p.Tag = 0; - var t = p.Parent as TableLayoutPanel; - if (t != null) - { - var l = t.GetControlFromPosition(1, 1) as Label; - if (l != null) - l.Text = "Fixed"; - } - } - } - } - } - - /*private abstract class LBItem - { - public const int lrPad = 10; - public const int tbPad = 2; - protected const int stW = 80; - - protected string Text; - public string Tooltip; - public abstract void DrawItem(DrawItemEventArgs e); - public abstract void MeasureItem(MeasureItemEventArgs e, Font font); - } - - private class LBTitleItem : LBItem - { - public LBTitleItem(string text) { Text = text; } - public override void MeasureItem(MeasureItemEventArgs e, Font font) - { - Size sz = new Size(e.ItemWidth, e.ItemHeight); - using (var f = new Font(font, FontStyle.Bold)) - e.ItemHeight = TextRenderer.MeasureText(e.Graphics, Text, f, sz, TextFormatFlags.SingleLine).Height + (tbPad * 2); - } - - public override void DrawItem(DrawItemEventArgs e) - { - e.Graphics.FillRectangle(SystemBrushes.Window, e.Bounds); - using (var f = new Font(e.Font, FontStyle.Bold)) - TextRenderer.DrawText(e.Graphics, Text, f, e.Bounds, SystemColors.WindowText, TextFormatFlags.SingleLine | TextFormatFlags.VerticalCenter); - } - } - - private class LBStatusItem : LBItem - { - private enum LBItemStatus { None, Fixed, Detected, NotFixed, Checked } - - private LBItemStatus Status; - private bool indentLeft; - - public LBStatusItem(Diagnostics.Diagnostic diag, bool leftIndent = true) - { - Text = diag.Name; - Status = LBItemStatus.Detected; - if (diag.HasIssue.HasValue && !diag.HasIssue.Value) - Status = LBItemStatus.Checked; - else - { - if (diag.Resolved.HasValue) - { - if (diag.Resolved.Value) - Status = LBItemStatus.Fixed; - } - else - { - if (diag.Resolution.RequiresConsent || diag.Resolution.RequiresElevation) - Status = LBItemStatus.NotFixed; - else - Status = LBItemStatus.None; - } - } - indentLeft = leftIndent; - } - - public override void MeasureItem(MeasureItemEventArgs e, Font font) - { - Size sz = new Size(e.ItemWidth, e.ItemHeight); - e.ItemHeight = Math.Max(TextRenderer.MeasureText(e.Graphics, Text, font, sz, TextFormatFlags.SingleLine).Height, this.Image.Height) + (tbPad * 2); - } - - public override void DrawItem(DrawItemEventArgs e) - { - int imgW = this.Image.Width; - int imgX = e.Bounds.Right - lrPad - imgW; - e.Graphics.FillRectangle(SystemBrushes.Window, e.Bounds); - e.Graphics.DrawImage(this.Image, new Rectangle(imgX, e.Bounds.Y + (e.Bounds.Height - this.Image.Height) / 2, imgW, imgW)); - Rectangle stBounds = new Rectangle(e.Bounds.Right - (lrPad * 2) - imgW - stW, e.Bounds.Y, stW, e.Bounds.Height); - TextRenderer.DrawText(e.Graphics, StatusText, e.Font, stBounds, SystemColors.WindowText, TextFormatFlags.SingleLine | TextFormatFlags.VerticalCenter); - Rectangle tBounds = indentLeft ? Rectangle.Inflate(e.Bounds, -lrPad, 0) : new Rectangle(e.Bounds.Location, new Size(e.Bounds.Width - lrPad, e.Bounds.Height)); - tBounds.Width -= (lrPad * 2 + imgW + stW); - TextRenderer.DrawText(e.Graphics, Text, e.Font, tBounds, SystemColors.WindowText, TextFormatFlags.SingleLine | TextFormatFlags.VerticalCenter); - } - - private string StatusText - { - get - { - switch (Status) - { - case LBItemStatus.Fixed: - return "Fixed"; - case LBItemStatus.Detected: - return "Detected"; - case LBItemStatus.NotFixed: - return "Not fixed"; - case LBItemStatus.Checked: - return "Checked"; - default: - return "Unknown"; - } - } - } - - private Image Image - { - get - { - if (Status == LBItemStatus.Checked || Status == LBItemStatus.Fixed) - return Properties.Resources.Fixed; - if (Status == LBItemStatus.Detected) - return Properties.Resources.Detected; - return Properties.Resources.NotFixed; - } - } - } - - private class LBResolutionItem : LBItem - { - public enum LBResStatus { NotRun, Completed, NotPresent, ReqConsent } - - private LBResStatus Status; - - public LBResolutionItem(Diagnostics.Diagnostic diag) - { - Text = diag.Resolution.Name; - if (diag.Resolved.HasValue) - Status = diag.Resolved.Value ? LBResStatus.Completed : LBResStatus.NotPresent; - else - Status = diag.Resolution.RequiresConsent ? LBResStatus.ReqConsent : LBResStatus.NotRun; - } - - public override void MeasureItem(MeasureItemEventArgs e, Font font) - { - Size sz = new Size(e.ItemWidth, e.ItemHeight); - e.ItemHeight = TextRenderer.MeasureText(e.Graphics, Text, font, sz, TextFormatFlags.SingleLine).Height + tbPad; - } - - public override void DrawItem(DrawItemEventArgs e) - { - int imgW = 16; - int imgX = e.Bounds.Right - lrPad - imgW; - e.Graphics.FillRectangle(SystemBrushes.Window, e.Bounds); - Rectangle stBounds = new Rectangle(e.Bounds.Right - (lrPad * 2) - imgW - stW, e.Bounds.Y, stW + lrPad + imgW, e.Bounds.Height); - using (Font f2 = new Font(e.Font, FontStyle.Italic)) - TextRenderer.DrawText(e.Graphics, StatusText, f2, stBounds, SystemColors.WindowText, TextFormatFlags.SingleLine); - Rectangle tBounds = new Rectangle(e.Bounds.X + lrPad * 2, e.Bounds.Y, e.Bounds.Width - (lrPad * 2) - stBounds.Width, e.Bounds.Height); - TextRenderer.DrawText(e.Graphics, Text, e.Font, tBounds, SystemColors.WindowText, TextFormatFlags.SingleLine | TextFormatFlags.Top); - } - - private string StatusText - { - get - { - switch (Status) - { - case LBResStatus.Completed: - return "Completed"; - case LBResStatus.NotPresent: - return "Issue not present"; - case LBResStatus.ReqConsent: - return "Requires consent"; - default: - return "Not run"; - } - } - } - } - - private class LBRepairConfirmItem : LBItem - { - protected string TroubleText; - protected string RepairText; - public bool RepairChecked = true; - public bool Collapsed = false; - - public LBRepairConfirmItem(Diagnostics.Diagnostic diag) - { - Text = diag.Name; - TroubleText = diag.Description; - RepairText = diag.Resolution.Name; - } - - public override void MeasureItem(MeasureItemEventArgs e, Font font) - { - var m1 = new MeasureItemEventArgs(e.Graphics, e.Index, e.ItemHeight); - //TroubleLine.MeasureItem(m1, font); - var m2 = new MeasureItemEventArgs(e.Graphics, e.Index, e.ItemHeight); - //RepairLine.MeasureItem(m2, font); - e.ItemHeight = m1.ItemHeight + m2.ItemHeight; - } - - public override void DrawItem(DrawItemEventArgs e) - { - var m1 = new MeasureItemEventArgs(e.Graphics, e.Index, e.Bounds.Height); - //TroubleLine.MeasureItem(m1, e.Font); - var r = e.Bounds; r.Height = m1.ItemHeight; - //TroubleLine.DrawItem(new DrawItemEventArgs(e.Graphics, e.Font, r, e.Index, e.State, e.ForeColor, e.BackColor)); - r.Y += m1.ItemHeight; r.Height = e.Bounds.Height - m1.ItemHeight; - //RepairLine.DrawItem(new DrawItemEventArgs(e.Graphics, e.Font, r, e.Index, e.State, e.ForeColor, e.BackColor)); - } - } - - private class LBReportItem : LBItem - { - protected LBStatusItem TroubleLine; - protected LBResolutionItem RepairLine; - - public LBReportItem(Diagnostics.Diagnostic diag) - { - TroubleLine = new LBStatusItem(diag, false); - RepairLine = new LBResolutionItem(diag); - } - public override void MeasureItem(MeasureItemEventArgs e, Font font) - { - var m1 = new MeasureItemEventArgs(e.Graphics, e.Index, e.ItemHeight); - TroubleLine.MeasureItem(m1, font); - var m2 = new MeasureItemEventArgs(e.Graphics, e.Index, e.ItemHeight); - RepairLine.MeasureItem(m2, font); - e.ItemHeight = m1.ItemHeight + m2.ItemHeight; - } - public override void DrawItem(DrawItemEventArgs e) - { - var m1 = new MeasureItemEventArgs(e.Graphics, e.Index, e.Bounds.Height); - TroubleLine.MeasureItem(m1, e.Font); - var r = e.Bounds; r.Height = m1.ItemHeight; - TroubleLine.DrawItem(new DrawItemEventArgs(e.Graphics, e.Font, r, e.Index, e.State, e.ForeColor, e.BackColor)); - r.Y += m1.ItemHeight; r.Height = e.Bounds.Height - m1.ItemHeight; - RepairLine.DrawItem(new DrawItemEventArgs(e.Graphics, e.Font, r, e.Index, e.State, e.ForeColor, e.BackColor)); - } - }*/ - } -} diff --git a/TaskSchedulerConfig/WizardForm.resx b/TaskSchedulerConfig/WizardForm.resx deleted file mode 100644 index aba5415..0000000 --- a/TaskSchedulerConfig/WizardForm.resx +++ /dev/null @@ -1,687 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - AAABAAcAEBAAAAEACABoBQAAdgAAABAQAAABACAAaAQAAN4FAAAgIAAAAQAIAKgIAABGCgAAICAAAAEA - IACoEAAA7hIAADAwAAABAAgAqA4AAJYjAAAwMAAAAQAgAKglAAA+MgAAAAAAAAEAIAA7JgAA5lcAACgA - AAAQAAAAIAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZmZmAI6OjgC2trYAqKioAH5+ - fgCurq4A5ubmAMPDwwDe3t4AxsbGAG5ubgDAwMAAnp6eAKampgDOzs4Ae3t7AHh4eAC0tLQAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAAAAAAA - AAEBAgMNDQMCAQEAAAAAAAEFAgYHDg4HBgIFAQAAAAEFCQoLBw8PBwsKCQUBAAABAgoHBwcHBwcHBwoC - AQAAAgYLBwcHBwcHBwcLBgIAAQMHBwcHBwcHBwcHBwcDAQENDg8HBwcFEAwMDAwSDQEBDQ4PBwcHEBEM - DAwMEg0BAQMHBwcHBwwMBwcHBwcDAQACBgsHBwcMDAcHBwsGAgAAAQIKBwcHDAwHBwcKAgEAAAEFCQoL - BwwMBwsKCQUBAAAAAQUCBgcICAcGAgUBAAAAAAABAQIDBAQDAgEBAAAAAAAAAAAAAQEBAQAAAAAAAPw/ - AADgBwAAwAMAAIABAACAAQAAgAEAAAAAAAAAAAAAAAAAAAAAAACAAQAAgAEAAIABAADAAwAA4AcAAPw/ - AAAoAAAAEAAAACAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZm - ZhJmZmZuZmZmr2ZmZtFmZmbRZmZmr2ZmZm5mZmYSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZm - Zm5oaGjxkpKS/7q6uv+dnZ3/nZ2d/7q6uv+SkpL/aGho8WZmZm4AAAAAAAAAAAAAAAAAAAAAAAAAAGZm - ZpZ7e3v/hoaG/7Gxsf/m5ub/pqam/6ampv/m5ub/srKy/4WFhf97e3v/ZmZmlgAAAAAAAAAAAAAAAGZm - Zm57e3v/3d3d/83Nzf9xcXH/5ubm/8vLy//Ly8v/5ubm/3Fxcf/Nzc3/3d3d/3t7e/9mZmZuAAAAAGZm - ZhJoaGjxiIiI/8/Pz//m5ub/2tra/+bm5v/m5ub/5ubm/+bm5v/a2tr/5ubm/83Nzf+FhYX/aGho8WZm - ZhJmZmZukpKS/7CwsP9xcXH/2tra/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/9ra2v9xcXH/srKy/5KS - kv9mZmZuZmZmr7q6uv/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v+6urr/ZmZmr2ZmZtGenp7/pqam/8vLy//m5ub/5ubm/+bm5v+ZmZn/kpKS/8TExP/ExMT/xMTE/8bG - xv+srKz/nZ2d/2ZmZtFmZmbRnp6e/6ampv/Ly8v/5ubm/+bm5v/m5ub/kpKS/4qKiv/ExMT/xMTE/8TE - xP/Gxsb/rKys/52dnf9mZmbRZmZmr7q6uv/m5ub/5ubm/+bm5v/m5ub/5ubm/8TExP/ExMT/5ubm/+bm - 5v/m5ub/5ubm/+bm5v+6urr/ZmZmr2ZmZm6SkpL/srKy/3Fxcf/a2tr/5ubm/+bm5v/ExMT/xMTE/+bm - 5v/m5ub/2tra/3Jycv+ysrL/kpKS/2ZmZm5mZmYTaGho8YWFhf/Nzc3/5ubm/9ra2v/m5ub/xMTE/8TE - xP/m5ub/2tra/+bm5v/Ly8v/hYWF/2hoaPFmZmYSAAAAAGZmZm57e3v/3d3d/83Nzf9xcXH/5ubm/8TE - xP/ExMT/5ubm/3Fxcf/Nzc3/3d3d/3t7e/9mZmZuAAAAAAAAAAAAAAAAZmZmlnt7e/+FhYX/srKy/+bm - 5v/FxcX/xcXF/+bm5v+ysrL/hYWF/3t7e/9mZmaWAAAAAAAAAAAAAAAAAAAAAAAAAABmZmZuaGho8ZKS - kv+6urr/o6Oj/6Ojo/+6urr/kpKS/2hoaPFmZmZuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZm - ZhNmZmZuZmZmr2ZmZtFmZmbRZmZmr2ZmZm5mZmYTAAAAAAAAAAAAAAAAAAAAAPAPAADgBwAAwAMAAIAB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIABAADAAwAA4AcAAPAPAAAoAAAAIAAAAEAA - AAABAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZmZgB+fn4Anp6eAKampgCGhoYAbm5uANbW - 1gDm5uYA4+PjAK6urgC2trYAzs7OAM3NzQCzs7MAjo6OAL6+vgCxsbEA2dnZAIODgwCWlpYAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAEBAQECAwQFBQQDAgEB - AQEAAAAAAAAAAAAAAAAAAAEBAQYEBwgICAEBCAgIBwMGAQEBAAAAAAAAAAAAAAABAQECAQMICAgIAQEI - CAgIAwECAQEBAAAAAAAAAAAAAQEBCwwBAQwICAgBAQgICAcBAQwLAQEBAAAAAAAAAAEBAQsICA8BBQgI - CAICCAgIBQEPCAgLAQEBAAAAAAAAAQELCAgIBwEBCAgICAgICAgBAQcICAgLAQEAAAAAAAEBAgwICAgI - DAwICAgICAgICAwMCAgICAwCAQEAAAAAAQYBARQHCAgICAgICAgICAgICAgICAcPAQEGAQAAAAEBBAMB - AQYHCAgICAgICAgICAgICAgMAQEBAwMBAQAAAQEHCAwFAQwICAgICAgICAgICAgICAwBBQcIBwEBAAAB - AggICAgICAgICAgICAgICAgICAgICAgICAgIAgEAAQEDCAgICAgICAgICAgICAgICAgICAgICAgICAgD - AQEBAQQICAgICAgICAgICAwPDxANDQ0NDQ0NEggICAQBAQEBBQEBAQIICAgICAgIDwEBAg4ODg4ODg4O - EwEBBQEBAQEFAQEBAggICAgICAgPAQECDg4ODg4ODg4TAQEFAQEBAQQICAgICAgICAgICBACAhENDQ0N - DQ0NEggICAQBAQEBAwgICAgICAgICAgIDQ4ODQgICAgICAgICAgIAwEBAAECCAgICAgICAgICAgNDg4N - CAgICAgICAgICAgCAQAAAQEHCAcFAQwICAgICA0ODg0ICAgICAwBBQcIBwEBAAABAQQDAQEBDAgICAgI - DQ4ODQgICAgIDAEBAQMDAQEAAAABBgEBDwcICAgICAgNDg4NCAgICAgIBwUBAQYBAAAAAAEBAgwICAgI - DAwICA0ODg0ICAwMCAgICAwCAQEAAAAAAAEBCwgICAcBAQgIDQ4ODQgIAQEHCAgICwEBAAAAAAAAAQEB - CwgIDwEFCAgNDg4NCAgFAQ8ICAsBAQEAAAAAAAAAAQEBCwwBAQcICA0ODg0ICAcBAQwLAQEBAAAAAAAA - AAAAAQEBAgEDCAgICQoKCQgICAMBAgEBAQAAAAAAAAAAAAAAAQEBBgQHCAgIAgIICAgHBAYBAQEAAAAA - AAAAAAAAAAAAAAEBAQECAwQFBQQDAgEBAQEAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQAAAAAAAAAAAAAAAAD/+B///8AD//8AAP/8AAA/+AAAH/AA - AA/gAAAH4AAAB8AAAAPAAAADgAAAAYAAAAGAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAA - AAGAAAABwAAAA8AAAAPgAAAH4AAAB/AAAA/4AAAf/AAAP/8AAP//wAP///gf/ygAAAAgAAAAQAAAAAEA - IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAZmZmCWZmZixmZmZRZmZmdWZmZpxmZmaqZmZmqmZmZpxmZmZ1ZmZmUWZmZixmZmYJAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAZmZmB2ZmZkBmZmasZmZm1mZmZvhmZmb/ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb4ZmZm1mZm - ZqxmZmZAZmZmBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAZmZmCWZmZkVmZmbHZmZm/2dnZ/9ycnL/iIiI/5ubm/+np6f/gICA/4CAgP+np6f/m5ub/4iI - iP9ycnL/Z2dn/2ZmZv9mZmbHZmZmRWZmZgkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABmZmaBZmZm6GZmZv9tbW3/p6en/8fHx//d3d3/5ubm/9LS0v98fHz/fHx8/9LS - 0v/m5ub/3d3d/8fHx/+np6f/bW1t/2ZmZv9mZmboZmZmgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABmZmYeZmZmoWZmZv9ra2v/hISE/2hoaP+ioqL/4uLi/+bm5v/m5ub/0dHR/3t7 - e/97e3v/0dHR/+bm5v/m5ub/4uLi/6ampv9mZmb/goKC/2tra/9mZmb/ZmZmoWZmZh4AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZmZqFmZmb6cXFx/6urq/+/v7//bW1t/3R0dP/Kysr/5ubm/+bm - 5v/R0dH/e3t7/3t7e//R0dH/5ubm/+bm5v/Kysr/dHR0/21tbf+/v7//q6ur/3Fxcf9mZmb6ZmZmoQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZmZglmZmaBZmZm/3Fxcf/CwsL/5ubm/+Li4v+ampr/ZmZm/4iI - iP/m5ub/5ubm/9ra2v+UlJT/lJSU/9ra2v/m5ub/5ubm/4iIiP9mZmb/mpqa/+Li4v/m5ub/wsLC/3Fx - cf9mZmb/ZmZmgWZmZgkAAAAAAAAAAAAAAAAAAAAAZmZmRWZmZuhra2v/q6ur/+bm5v/m5ub/5ubm/9LS - 0v9qamr/a2tr/+bm5v/m5ub/5ubm/9ra2v/a2tr/5ubm/+bm5v/m5ub/a2tr/2pqav/S0tL/5ubm/+bm - 5v/m5ub/q6ur/2tra/9mZmboZmZmRQAAAAAAAAAAAAAAAGZmZgdmZmbHZmZm/4SEhP/CwsL/4uLi/+bm - 5v/m5ub/5ubm/83Nzf/Nzc3/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/Nzc3/zc3N/+bm - 5v/m5ub/5ubm/+Li4v+/v7//goKC/2ZmZv9mZmbHZmZmBwAAAAAAAAAAZmZmQGZmZv9tbW3/aGho/3Fx - cf+fn5//1NTU/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/S0tL/mpqa/21tbf9mZmb/bW1t/2ZmZv9mZmZAAAAAAGZmZglmZmasZ2dn/6en - p/+ioqL/c3Nz/2ZmZv9tbW3/0dHR/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/zc3N/2pqav9mZmb/dHR0/6ampv+np6f/Z2dn/2ZmZqxmZmYJZmZmLGZm - ZtZycnL/x8fH/+Li4v/Jycn/hISE/2tra//Nzc3/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/Nzc3/a2tr/4iIiP/Kysr/4uLi/8fHx/9ycnL/ZmZm1mZm - ZixmZmZRZmZm+IiIiP/d3d3/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/3d3d/4iI - iP9mZmb4ZmZmUWZmZnVmZmb/m5ub/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/m5ub/2ZmZv9mZmZ1ZmZmnGZmZv+qqqr/0tLS/9HR0f/R0dH/2tra/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/Ly8v/mpqa/5qamv/ExMT/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9jY - 2P/R0dH/0dHR/9LS0v+np6f/ZmZm/2ZmZpxmZmaqZmZm/4CAgP98fHz/e3t7/3t7e/+UlJT/2tra/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/5iYmP9mZmb/ZmZm/4WFhf+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Oz - s/+zs7P/tra2/5SUlP98fHz/fHx8/4CAgP9mZmb/ZmZmqmZmZqpmZmb/gICA/3x8fP97e3v/e3t7/5SU - lP/a2tr/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/mpqa/2ZmZv9mZmb/goKC/7Ozs/+zs7P/s7Oz/7Oz - s/+zs7P/s7Oz/7Ozs/+2trb/lJSU/3x8fP98fHz/gICA/2ZmZv9mZmaqZmZmnGZmZv+qqqr/0tLS/9HR - 0f/R0dH/2tra/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/Dw8P/hISE/4WFhf+6urr/1dXV/9XV - 1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9jY2P/R0dH/0dHR/9LS0v+np6f/ZmZm/2ZmZpxmZmZ1ZmZm/5ub - m//m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/9XV1f+zs7P/s7Oz/9XV - 1f/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/5ubm/9mZmb/ZmZmdWZm - ZlFmZmb4iIiI/93d3f/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/1dXV/7Oz - s/+zs7P/1dXV/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/d3d3/iIiI/2Zm - ZvhmZmZRZmZmLGZmZtZycnL/x8fH/+Li4v/Ly8v/iIiI/2tra//Nzc3/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/V1dX/s7Oz/7Ozs//V1dX/5ubm/+bm5v/m5ub/5ubm/+bm5v/Nzc3/a2tr/4uLi//Ly8v/4uLi/8fH - x/9ycnL/ZmZm1mZmZixmZmYJZmZmrGdnZ/+np6f/pqam/3Z2dv9mZmb/ampq/83Nzf/m5ub/5ubm/+bm - 5v/m5ub/5ubm/9XV1f+zs7P/s7Oz/9XV1f/m5ub/5ubm/+bm5v/m5ub/5ubm/83Nzf9qamr/ZmZm/3Z2 - dv+mpqb/p6en/2dnZ/9mZmasZmZmCQAAAABmZmZHZmZm/21tbf9mZmb/bW1t/5qamv/S0tL/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/1dXV/7Ozs/+zs7P/1dXV/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/9HR - 0f+Wlpb/bW1t/2ZmZv9tbW3/ZmZm/2ZmZkAAAAAAAAAAAGZmZgdmZmbHZmZm/4KCgv+/v7//4uLi/+bm - 5v/m5ub/5ubm/83Nzf/Nzc3/5ubm/+bm5v/V1dX/s7Oz/7Ozs//V1dX/5ubm/+bm5v/Nzc3/zc3N/+bm - 5v/m5ub/5ubm/+Hh4f+/v7//goKC/2ZmZv9mZmbHZmZmBwAAAAAAAAAAAAAAAGZmZkVmZmboa2tr/6ur - q//m5ub/5ubm/+bm5v/S0tL/ampq/2tra//m5ub/5ubm/9XV1f+zs7P/s7Oz/9XV1f/m5ub/5ubm/2tr - a/9qamr/0tLS/+bm5v/m5ub/5ubm/6urq/9ra2v/ZmZm6GZmZkUAAAAAAAAAAAAAAAAAAAAAZmZmCWZm - ZoFmZmb/cXFx/8LCwv/m5ub/4uLi/5qamv9mZmb/iIiI/+bm5v/m5ub/1dXV/7Ozs/+zs7P/1dXV/+bm - 5v/m5ub/iIiI/2ZmZv+ampr/4uLi/+bm5v/CwsL/cXFx/2ZmZv9mZmaBZmZmCQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAGZmZqFmZmb6cXFx/6urq/+/v7//bW1t/3R0dP/Kysr/5ubm/+bm5v/V1dX/s7Oz/7Oz - s//V1dX/5ubm/+bm5v/Kysr/dHR0/21tbf+/v7//q6ur/3Fxcf9mZmb6ZmZmoQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAZmZmHmZmZqFmZmb/a2tr/4KCgv9mZmb/pqam/+Li4v/m5ub/5ubm/9fX - 1/+1tbX/tbW1/9fX1//m5ub/5ubm/+Li4v+mpqb/ZmZm/4KCgv9ra2v/ZmZm/2ZmZqFmZmYeAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZmZoFmZmboZmZm/21tbf+np6f/x8fH/93d - 3f/m5ub/0tLS/4+Pj/+Pj4//0tLS/+bm5v/d3d3/x8fH/6enp/9tbW3/ZmZm/2ZmZuhmZmaBAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZmZmCWZmZkVmZmbHZmZm/2dn - Z/9ycnL/iIiI/5ubm/+qqqr/gICA/4CAgP+qqqr/m5ub/4iIiP9ycnL/Z2dn/2ZmZv9mZmbHZmZmRWZm - ZgkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZm - ZgdmZmZHZmZmrGZmZtZmZmb4ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm+GZmZtZmZmasZmZmR2Zm - ZgcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABmZmYJZmZmLGZmZlFmZmZ1ZmZmnGZmZqpmZmaqZmZmnGZmZnVmZmZRZmZmLGZm - ZgkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8AD//8AAP/8AAA//AAAP/AA - AA/wAAAPwAAAA8AAAAOAAAABgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAIAAAAGAAAABwAAAA8AAAAPwAAAP8AAAD/wAAD/8AAA//wAA///AA/8oAAAAMAAAAGAA - AAABAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZmZgB+fn4Ajo6OAKampgBubm4AlpaWAL6+ - vgDm5uYArq6uAHZ2dgC2trYAkZGRAJ6engC5ubkAs7OzANbW1gDGxsYA3t7eAIaGhgDOzs4AoKCgAI2N - jQClpaUAwcHBAIiIiACbm5sAa2trAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEB - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAEBAQEBAQEBAhMEBQUEEwIBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEB - AQEFBgcICAgJAQEJCAgIBwYFAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBCgsICAgICAgEAQEE - CAgICAgICwoBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAQEBAQUFAQYICAgICAgEAQEECAgICAgIDQEBBQEB - AQEAAAAAAAAAAAAAAAAAAAABAQEBAhABAQERCAgICAgEAQEECAgICAgRAQEBEAIBAQEBAAAAAAAAAAAA - AAAAAAEBAQEGEggTAQEKCAgICAgEAQEECAgICAgKAQETCBIGAQEBAQAAAAAAAAAAAAAAAQEBAQYICAgQ - AQEBCQgICAgJAQEJCAgICAkBAQEQCAgIBgEBAQEAAAAAAAAAAAAAAQEBBggICAgIDQEBBQgICAgICQkI - CAgICAUBAQ0ICAgICAYBAQEAAAAAAAAAAAABAQECEggICAgIEgUBBQgICAgICAgICAgICAUBBRIICAgI - CBICAQEBAAAAAAAAAAEBAQUQCAgICAgICBQEFAgICAgICAgICAgICBQEFAgICAgICAgQBQEBAQAAAAAA - AAEBAQUBBhAICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBMBAQEBAQAAAAAAAQEBCgEBAQUEEggI - CAgICAgICAgICAgICAgICAgICAgICBINAQEBAQoBAQEAAAAAAQEBCwYBAQEBChAICAgICAgICAgICAgI - CAgICAgICAgIFAUBAQEBDQsBAQEAAAAAAQEFCAgHCgEBAQQICAgICAgICAgICAgICAgICAgICAgIBAEB - AQoRCAgFAQEAAAABAQEGCAgICAQFBRQICAgICAgICAgICAgICAgICAgICAgIFAUFCQgICAgGAQEBAAAB - AQEHCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgHAQEBAAABAQEICAgICAgICAgI - CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAQEBAAABAQIICAgICAgICAgICAgICAgICAgICAgI - CAgICAgICAgICAgICAgICAgIAgEBAAABAQMICAgICAgICAgICAgICAgICAgUBAQUCAgICAgICAgICAgI - CAgICAgIEwEBAAEBAQQJBAQEBAkICAgICAgICAgICBEBAQEBFw8PDw8PDw8PDw8PGAQEBAQJBAEBAQEB - AQUBAQEBAQEJCAgICAgICAgICAQBAQEBFg8PDw8PDw8PDw8PDxobAQEBBQEBAQEBAQUBAQEBAQEJCAgI - CAgICAgICAQBAQEBGQ8PDw8PDw8PDw8PDxobAQEBBQEBAQEBAQQJBAQEBAkICAgICAgICAgICBQBAQEB - FQ8PDw8PDw8PDw8PGAQEBAQJBAEBAQABAQMICAgICAgICAgICAgICAgICAgVFhYXCAgICAgICAgICAgI - CAgICAgIEwEBAAABAQIICAgICAgICAgICAgICAgICAgPDw8PCAgICAgICAgICAgICAgICAgIAgEBAAAB - AQEICAgICAgICAgICAgICAgICAgPDw8PCAgICAgICAgICAgICAgICAgIAQEBAAABAQEHCAgICAgICAgI - CAgICAgICAgPDw8PCAgICAgICAgICAgICAgICAgHAQEBAAABAQEGCAgICAkFBRQICAgICAgICAgPDw8P - CAgICAgICAgIFAUFCwgICAgGAQEBAAAAAQEFCAgRAgEBAQQICAgICAgICAgPDw8PCAgICAgICAgIBAEB - AQIRCAgFAQEAAAAAAQEBCw0BAQEBBRQICAgICAgICAgPDw8PCAgICAgICAgIFAUBAQEBDQsBAQEAAAAA - AQEBCgEBAQENEggICAgICAgICAgPDw8PCAgICAgICAgICBIGAQEBAQoBAQEAAAAAAAEBAQEBExAICAgI - CAgICAgICAgPDw8PCAgICAgICAgICAgIFBMBAQEBAQAAAAAAAAEBAQUQCAgICAgICBQEFAgICAgPDw8P - CAgICBQEFAgICAgICAgQBQEBAQAAAAAAAAABAQECEggICAgIEgUBBQgICAgPDw8PCAgICAUBBRIICAgI - CBICAQEBAAAAAAAAAAAAAQEBBggICAgIDQEBBQgICAgPDw8PCAgICAUBAQ0ICAgICAYBAQEAAAAAAAAA - AAAAAQEBAQYICAgQAQEBCQgICAgPDw8PCAgICAkBAQEQCAgIBgEBAQEAAAAAAAAAAAAAAAEBAQEGEggT - AQEKCAgICAgPDw8PCAgICAgKAQETCBIGAQEBAQAAAAAAAAAAAAAAAAABAQEBAhABAQERCAgICAgLDw8L - CAgICAgRAQEBEAIBAQEBAAAAAAAAAAAAAAAAAAAAAQEBAQUBAQ0ICAgICAgODw8OCAgICAgIDQEBBQEB - AQEAAAAAAAAAAAAAAAAAAAAAAAEBAQEBCgsICAgICAgEDAwECAgICAgICwoBAQEBAQAAAAAAAAAAAAAA - AAAAAAAAAAAAAQEBAQEFBgcICAgJAQEJCAgIBwYFAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEB - AQEBAQEBAgMEBQUEAwIBAQEBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEB - AQEBAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// - /D///wAA//+AAf//AAD//AAAP/8AAP/wAAAP/wAA/+AAAAf/AAD/gAAAAf8AAP8AAAAA/wAA/gAAAAB/ - AAD8AAAAAD8AAPgAAAAAHwAA+AAAAAAfAADwAAAAAA8AAOAAAAAABwAA4AAAAAAHAADAAAAAAAMAAMAA - AAAAAwAAwAAAAAADAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAA - AAAAAQAAwAAAAAADAADAAAAAAAMAAMAAAAAAAwAA4AAAAAAHAADgAAAAAAcAAPAAAAAADwAA+AAAAAAf - AAD4AAAAAB8AAPwAAAAAPwAA/gAAAAB/AAD/AAAAAP8AAP+AAAAB/wAA/+AAAAf/AAD/8AAAD/8AAP/8 - AAA//wAA//+AAf//AAD///w///8AACgAAAAwAAAAYAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAZmZmEGZmZkBmZmZgZmZmgGZmZoBmZmaAZmZmgGZmZmBmZmZAZmZmEAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAZmZmUGZmZp9mZmbfZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/2Zm - Zv9mZmb/ZmZm/2ZmZt9mZmafZmZmUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAZmZmIGZmZoBmZmbvZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/2Zm - Zv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/2ZmZu9mZmaAZmZmIAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZmZhBmZmaAZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/35+ - fv+Ghob/pqam/25ubv9ubm7/pqam/4aGhv9+fn7/ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/2Zm - ZoBmZmYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZmZmUGZmZu9mZmb/ZmZm/2ZmZv9mZmb/bm5u/5aW - lv++vr7/5ubm/+bm5v/m5ub/rq6u/2ZmZv9mZmb/rq6u/+bm5v/m5ub/5ubm/76+vv+Wlpb/bm5u/2Zm - Zv9mZmb/ZmZm/2ZmZv9mZmbvZmZmUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmZmaPZmZm/2ZmZv9mZmb/ZmZm/3Z2 - dv+2trb/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/pqam/2ZmZv9mZmb/pqam/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/7a2tv92dnb/ZmZm/2ZmZv9mZmb/ZmZm/2ZmZo8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZmZmEGZmZq9mZmb/ZmZm/2Zm - Zv9ubm7/bm5u/2ZmZv+Wlpb/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/pqam/2ZmZv9mZmb/pqam/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/56env9mZmb/ZmZm/25ubv9mZmb/ZmZm/2ZmZv9mZmavZmZmEAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmZmYQZmZmz2Zm - Zv9mZmb/ZmZm/35+fv/W1tb/ZmZm/2ZmZv9mZmb/xsbG/+bm5v/m5ub/5ubm/+bm5v/m5ub/pqam/2Zm - Zv9mZmb/pqam/+bm5v/m5ub/5ubm/+bm5v/m5ub/xsbG/2ZmZv9mZmb/ZmZm/9bW1v9+fn7/ZmZm/2Zm - Zv9mZmb/ZmZmz2ZmZhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABmZmavZmZm/2ZmZv9mZmb/lpaW/97e3v/m5ub/hoaG/2ZmZv9mZmb/dnZ2/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/pqam/2ZmZv9mZmb/pqam/+bm5v/m5ub/5ubm/+bm5v/m5ub/dnZ2/2ZmZv9mZmb/hoaG/+bm - 5v/e3t7/lpaW/2ZmZv9mZmb/ZmZm/2ZmZq8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAGZmZo9mZmb/ZmZm/2ZmZv+Wlpb/5ubm/+bm5v/m5ub/1tbW/2ZmZv9mZmb/ZmZm/66u - rv/m5ub/5ubm/+bm5v/m5ub/rq6u/2ZmZv9mZmb/rq6u/+bm5v/m5ub/5ubm/+bm5v+urq7/ZmZm/2Zm - Zv9mZmb/1tbW/+bm5v/m5ub/5ubm/5aWlv9mZmb/ZmZm/2ZmZv9mZmaPAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAZmZmUGZmZv9mZmb/ZmZm/5aWlv/m5ub/5ubm/+bm5v/m5ub/5ubm/56e - nv9mZmb/ZmZm/25ubv/m5ub/5ubm/+bm5v/m5ub/5ubm/66urv+urq7/5ubm/+bm5v/m5ub/5ubm/+bm - 5v9ubm7/ZmZm/2ZmZv+enp7/5ubm/+bm5v/m5ub/5ubm/+bm5v+Wlpb/ZmZm/2ZmZv9mZmb/ZmZmUAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmZmYQZmZm72ZmZv9mZmb/fn5+/97e3v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/97e3v9ubm7/ZmZm/25ubv/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v9ubm7/ZmZm/25ubv/e3t7/5ubm/+bm5v/m5ub/5ubm/+bm5v/e3t7/fn5+/2Zm - Zv9mZmb/ZmZm72ZmZhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmZmaAZmZm/2ZmZv9ubm7/1tbW/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/Ozs7/pqam/87Ozv/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/Ozs7/pqam/87Ozv/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/1tbW/25ubv9mZmb/ZmZm/2ZmZoAAAAAAAAAAAAAAAAAAAAAAAAAAAGZmZiBmZmb/ZmZm/2Zm - Zv9ubm7/ZmZm/5aWlv/W1tb/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/9bW1v+Ghob/ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmYgAAAAAAAAAAAAAAAAAAAAAGZm - ZoBmZmb/ZmZm/3Z2dv9mZmb/ZmZm/2ZmZv9ubm7/pqam/97e3v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/e3t7/np6e/2ZmZv9mZmb/ZmZm/2ZmZv92dnb/ZmZm/2ZmZv9mZmaAAAAAAAAA - AAAAAAAAAAAAAGZmZu9mZmb/ZmZm/7a2tv+Wlpb/ZmZm/2ZmZv9mZmb/ZmZm/3Z2dv/W1tb/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/87Ozv9ubm7/ZmZm/2ZmZv9mZmb/ZmZm/56env+2trb/ZmZm/2Zm - Zv9mZmbvAAAAAAAAAAAAAAAAZmZmUGZmZv9mZmb/bm5u/+bm5v/m5ub/vr6+/3Z2dv9mZmb/ZmZm/2Zm - Zv+mpqb/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/6ampv9mZmb/ZmZm/2ZmZv92dnb/xsbG/+bm - 5v/m5ub/bm5u/2ZmZv9mZmb/ZmZmUAAAAAAAAAAAZmZmn2ZmZv9mZmb/lpaW/+bm5v/m5ub/5ubm/+bm - 5v+mpqb/bm5u/25ubv/Ozs7/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/87Ozv9ubm7/bm5u/66u - rv/m5ub/5ubm/+bm5v/m5ub/lpaW/2ZmZv9mZmb/ZmZmnwAAAAAAAAAAZmZm32ZmZv9mZmb/vr6+/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/vr6+/2ZmZv9mZmb/ZmZm3wAAAABmZmYQZmZm/2Zm - Zv9mZmb/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/2ZmZv9mZmb/ZmZm/2Zm - ZhBmZmZAZmZm/2ZmZv9+fn7/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/35+ - fv9mZmb/ZmZm/2ZmZkBmZmZgZmZm/2ZmZv+Ojo7/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/zs7O/6ampv+mpqb/zs7O/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/4aGhv9mZmb/ZmZm/2ZmZmBmZmaAZmZm/2ZmZv+mpqb/rq6u/6ampv+mpqb/pqam/6am - pv+urq7/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/Gxsb/ZmZm/2Zm - Zv9mZmb/ZmZm/6Wlpf+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/8HB - wf+mpqb/pqam/6ampv+mpqb/rq6u/6ampv9mZmb/ZmZm/2ZmZoBmZmaAZmZm/2ZmZv9ubm7/ZmZm/2Zm - Zv9mZmb/ZmZm/2ZmZv9mZmb/rq6u/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v+mpqb/ZmZm/2ZmZv9mZmb/ZmZm/42Njf+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Oz - s/+zs7P/s7Oz/7Ozs/+bm5v/a2tr/2ZmZv9mZmb/ZmZm/25ubv9mZmb/ZmZm/2ZmZoBmZmaAZmZm/2Zm - Zv9ubm7/ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/rq6u/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v+mpqb/ZmZm/2ZmZv9mZmb/ZmZm/4iIiP+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Oz - s/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+bm5v/a2tr/2ZmZv9mZmb/ZmZm/25ubv9mZmb/ZmZm/2Zm - ZoBmZmaAZmZm/2ZmZv+mpqb/rq6u/6ampv+mpqb/pqam/6ampv+urq7/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/Ozs7/ZmZm/2ZmZv9mZmb/ZmZm/6CgoP+zs7P/s7Oz/7Oz - s/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/8HBwf+mpqb/pqam/6ampv+mpqb/rq6u/6am - pv9mZmb/ZmZm/2ZmZoBmZmZgZmZm/2ZmZv+Ojo7/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/oKCg/42Njf+NjY3/paWl/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/4aGhv9mZmb/ZmZm/2ZmZmBmZmZAZmZm/2ZmZv9+fn7/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/s7Oz/7Oz - s/+zs7P/s7Oz/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/35+fv9mZmb/ZmZm/2ZmZkBmZmYQZmZm/2ZmZv9mZmb/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/s7Oz/7Ozs/+zs7P/s7Oz/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/2ZmZv9mZmb/ZmZm/2ZmZhAAAAAAZmZm32Zm - Zv9mZmb/vr6+/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/s7Oz/7Ozs/+zs7P/s7Oz/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/vr6+/2ZmZv9mZmb/ZmZm3wAA - AAAAAAAAZmZmn2ZmZv9mZmb/lpaW/+bm5v/m5ub/5ubm/+bm5v+urq7/bm5u/25ubv/Ozs7/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/s7Oz/7Ozs/+zs7P/s7Oz/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/87Ozv9ubm7/bm5u/7a2tv/m5ub/5ubm/+bm5v/m5ub/lpaW/2Zm - Zv9mZmb/ZmZmnwAAAAAAAAAAZmZmUGZmZv9mZmb/bm5u/+bm5v/m5ub/xsbG/35+fv9mZmb/ZmZm/2Zm - Zv+mpqb/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/s7Oz/7Ozs/+zs7P/s7Oz/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/6ampv9mZmb/ZmZm/2ZmZv9+fn7/xsbG/+bm - 5v/m5ub/bm5u/2ZmZv9mZmb/ZmZmUAAAAAAAAAAAAAAAAGZmZu9mZmb/ZmZm/7a2tv+enp7/ZmZm/2Zm - Zv9mZmb/ZmZm/25ubv/Ozs7/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/s7Oz/7Oz - s/+zs7P/s7Oz/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/87Ozv9ubm7/ZmZm/2Zm - Zv9mZmb/ZmZm/56env+2trb/ZmZm/2ZmZv9mZmbvAAAAAAAAAAAAAAAAAAAAAGZmZo9mZmb/ZmZm/3Z2 - dv9mZmb/ZmZm/2ZmZv9mZmb/np6e/97e3v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/s7Oz/7Ozs/+zs7P/s7Oz/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/e3t7/lpaW/2ZmZv9mZmb/ZmZm/2ZmZv92dnb/ZmZm/2ZmZv9mZmaAAAAAAAAAAAAAAAAAAAAAAGZm - ZiBmZmb/ZmZm/2ZmZv9mZmb/ZmZm/4aGhv/W1tb/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/s7Oz/7Ozs/+zs7P/s7Oz/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/87Ozv+Ghob/ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmYgAAAAAAAA - AAAAAAAAAAAAAAAAAABmZmaAZmZm/2ZmZv9ubm7/1tbW/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm - 5v/Ozs7/pqam/87Ozv/m5ub/5ubm/+bm5v/m5ub/s7Oz/7Ozs/+zs7P/s7Oz/+bm5v/m5ub/5ubm/+bm - 5v/Ozs7/pqam/87Ozv/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/1tbW/25ubv9mZmb/ZmZm/2Zm - ZoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmZmYQZmZm72ZmZv9mZmb/fn5+/97e3v/m5ub/5ubm/+bm - 5v/m5ub/5ubm/97e3v9ubm7/ZmZm/25ubv/m5ub/5ubm/+bm5v/m5ub/s7Oz/7Ozs/+zs7P/s7Oz/+bm - 5v/m5ub/5ubm/+bm5v9ubm7/ZmZm/25ubv/e3t7/5ubm/+bm5v/m5ub/5ubm/+bm5v/e3t7/fn5+/2Zm - Zv9mZmb/ZmZm72ZmZhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZmZmUGZmZv9mZmb/ZmZm/5aW - lv/m5ub/5ubm/+bm5v/m5ub/5ubm/56env9mZmb/ZmZm/25ubv/m5ub/5ubm/+bm5v/m5ub/s7Oz/7Oz - s/+zs7P/s7Oz/+bm5v/m5ub/5ubm/+bm5v9ubm7/ZmZm/2ZmZv+enp7/5ubm/+bm5v/m5ub/5ubm/+bm - 5v+Wlpb/ZmZm/2ZmZv9mZmb/ZmZmUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZm - Zo9mZmb/ZmZm/2ZmZv+Wlpb/5ubm/+bm5v/m5ub/1tbW/2ZmZv9mZmb/ZmZm/66urv/m5ub/5ubm/+bm - 5v/m5ub/s7Oz/7Ozs/+zs7P/s7Oz/+bm5v/m5ub/5ubm/+bm5v+urq7/ZmZm/2ZmZv9mZmb/1tbW/+bm - 5v/m5ub/5ubm/5aWlv9mZmb/ZmZm/2ZmZv9mZmaPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAABmZmavZmZm/2ZmZv9mZmb/lpaW/97e3v/m5ub/hoaG/2ZmZv9mZmb/dnZ2/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/s7Oz/7Ozs/+zs7P/s7Oz/+bm5v/m5ub/5ubm/+bm5v/m5ub/dnZ2/2Zm - Zv9mZmb/hoaG/+bm5v/e3t7/lpaW/2ZmZv9mZmb/ZmZm/2ZmZq8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmZmYQZmZmz2ZmZv9mZmb/ZmZm/35+fv/W1tb/ZmZm/2Zm - Zv9mZmb/xsbG/+bm5v/m5ub/5ubm/+bm5v/m5ub/tra2/7Ozs/+zs7P/tra2/+bm5v/m5ub/5ubm/+bm - 5v/m5ub/xsbG/2ZmZv9mZmb/ZmZm/9bW1v9+fn7/ZmZm/2ZmZv9mZmb/ZmZmz2ZmZhAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZmZmEGZmZq9mZmb/ZmZm/2Zm - Zv9ubm7/ZmZm/2ZmZv+enp7/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/ubm5/7Ozs/+zs7P/ubm5/+bm - 5v/m5ub/5ubm/+bm5v/m5ub/5ubm/56env9mZmb/ZmZm/25ubv9mZmb/ZmZm/2ZmZv9mZmavZmZmEAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AABmZmaPZmZm/2ZmZv9mZmb/ZmZm/3Z2dv+2trb/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/pqam/5GR - kf+RkZH/pqam/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/7a2tv92dnb/ZmZm/2ZmZv9mZmb/ZmZm/2Zm - Zo8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAZmZmUGZmZu9mZmb/ZmZm/2ZmZv9mZmb/bm5u/5aWlv++vr7/5ubm/+bm - 5v/m5ub/rq6u/2ZmZv9mZmb/rq6u/+bm5v/m5ub/5ubm/76+vv+Wlpb/bm5u/2ZmZv9mZmb/ZmZm/2Zm - Zv9mZmbvZmZmUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGZmZhBmZmaAZmZm/2ZmZv9mZmb/ZmZm/2Zm - Zv9mZmb/ZmZm/35+fv+Ojo7/pqam/25ubv9ubm7/pqam/46Ojv9+fn7/ZmZm/2ZmZv9mZmb/ZmZm/2Zm - Zv9mZmb/ZmZm/2ZmZoBmZmYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZmZmIGZm - Zo9mZmbvZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/2Zm - Zv9mZmb/ZmZm/2ZmZu9mZmaPZmZmIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAZmZmUGZmZp9mZmbfZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/2Zm - Zv9mZmb/ZmZm/2ZmZt9mZmafZmZmUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZmZmEGZmZkBmZmZgZmZmgGZm - ZoBmZmaAZmZmgGZmZmBmZmZAZmZmEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//+AH//8AAP//AAD//wAA//gAAB// - AAD/4AAAB/8AAP/AAAAD/wAA/4AAAAH/AAD+AAAAAH8AAPwAAAAAPwAA/AAAAAA/AAD4AAAAAB8AAPAA - AAAADwAA4AAAAAAHAADgAAAAAAcAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAIAAAAAAAQAAgAAAAAAB - AACAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAwAAAAAAD - AADAAAAAAAMAAMAAAAAAAwAA4AAAAAAHAADgAAAAAAcAAPAAAAAADwAA+AAAAAAfAAD8AAAAAD8AAPwA - AAAAPwAA/gAAAAB/AAD/gAAAAf8AAP/AAAAD/wAA/+AAAAf/AAD/+AAAH/8AAP//AAD//wAA///gB/// - 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 - AElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m - dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ4SURBVFhHzZdLbsJADIY5AkfqETgFS46AkJBY0h1L - umNJhZBYwgmgOyTWSFwj9eeOUzNkyCRBai39UuL4NbbHmek1oeFw2BcMBBPBu+AQwDM8vvWD+OsoGP4U - FJlAdhDU25MYeRN8BaOK8XhcLJfLYrVaFbPZTMEzPL55WQG6b8FcMxJFUqqGRqOROjmfz8XtdiuBQ+B5 - yCCLjuljK5jNI1H4MGVbFSv0jq7Xa7FerxU8+2/Iet2Aj2D+OSFoSrvdrjidTqURn4Hj8Vhst1sFz8ZH - xuTRxYa9C54HIQJl2lE0o/P5XHnU23ipAJBBFh3jRUFUl0M+0HAq5J0DvyrjpQIwubhfoiAeG1OY2u3U - jdR5ZQDP81MBxHKe73riENz+kDDY53edSwrjVXikAoiBDStL5ON3TsiLDhnbz0FAUbUakBMAut4Wtp39 - T3POeFWmrdhH/YoAsOVtmz9Bv0x/PFDqkBNACq4XBgSgWy8eNHXoEoArw4QA+JNp/auEU9jv97oSsNls - NIgULpfLnS6+QgDvBMDv9K5TQV1JbDiZrGUjhel0Wso7X4d/EUCrEtDhBAEoR1XqDXUlaNWEXRA3Yatt - 2AX4CgHoNnwYRKTX6pQaRDnIGkRhGlaOYua2KbaBBWDAtrP/M4oheXn4GS0Wi07ODdjwO6byZwQJQ7cj - 9alKO7yccqTk4Lna3/+OIWE2OpCkYHJx9moPJJB8yD6SAVYU7x5rXnSMFzl/fkIWgeShNE6t8T3PZwv5 - yHnzk7HVrWpQmUzMt053NQd5zo1EofZiYt89DxkC8DtK0OxiYiSKXa9m7Kx2VzNPYuRvLqcxidEXX897 - vW+M44HJ5sfB9gAAAABJRU5ErkJggg== - - - - 17, 17 - - - 137, 17 - - \ No newline at end of file diff --git a/TaskSchedulerConfig/app.manifest b/TaskSchedulerConfig/app.manifest deleted file mode 100644 index 5646a00..0000000 --- a/TaskSchedulerConfig/app.manifest +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/TaskSchedulerConfig/packages.config b/TaskSchedulerConfig/packages.config deleted file mode 100644 index 7cfc264..0000000 --- a/TaskSchedulerConfig/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file