mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-23 20:05:26 +00:00
209 lines
6.9 KiB
C#
209 lines
6.9 KiB
C#
|
// Decompiled with JetBrains decompiler
|
|||
|
// Type: TaskScheduler.Trigger
|
|||
|
// Assembly: AutoKMS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
|
|||
|
// MVID: D1CED9E3-1FC7-49B8-B3AC-44976AB7F6E4
|
|||
|
// Assembly location: C:\Users\Administrateur\Downloads\Virusshare-00000-msil\HackTool.Win32.KMSAuto.i-f317ba4d4051fad64a0aa45b587fa3dcea795bac30acec2872779abe31a07cbe.exe
|
|||
|
|
|||
|
using System;
|
|||
|
using System.Runtime.InteropServices;
|
|||
|
using TaskSchedulerInterop;
|
|||
|
|
|||
|
namespace TaskScheduler
|
|||
|
{
|
|||
|
public abstract class Trigger : ICloneable
|
|||
|
{
|
|||
|
private ITaskTrigger iTaskTrigger;
|
|||
|
internal TaskTrigger taskTrigger;
|
|||
|
|
|||
|
internal Trigger()
|
|||
|
{
|
|||
|
this.iTaskTrigger = (ITaskTrigger) null;
|
|||
|
this.taskTrigger = new TaskTrigger();
|
|||
|
this.taskTrigger.TriggerSize = (ushort) Marshal.SizeOf((object) this.taskTrigger);
|
|||
|
this.taskTrigger.BeginYear = (ushort) DateTime.Today.Year;
|
|||
|
this.taskTrigger.BeginMonth = (ushort) DateTime.Today.Month;
|
|||
|
this.taskTrigger.BeginDay = (ushort) DateTime.Today.Day;
|
|||
|
}
|
|||
|
|
|||
|
internal Trigger(ITaskTrigger iTrigger)
|
|||
|
{
|
|||
|
if (iTrigger == null)
|
|||
|
throw new ArgumentNullException(nameof (iTrigger), "ITaskTrigger instance cannot be null");
|
|||
|
this.taskTrigger = new TaskTrigger();
|
|||
|
this.taskTrigger.TriggerSize = (ushort) Marshal.SizeOf((object) this.taskTrigger);
|
|||
|
iTrigger.GetTrigger(ref this.taskTrigger);
|
|||
|
this.iTaskTrigger = iTrigger;
|
|||
|
}
|
|||
|
|
|||
|
public object Clone()
|
|||
|
{
|
|||
|
Trigger trigger = (Trigger) this.MemberwiseClone();
|
|||
|
trigger.iTaskTrigger = (ITaskTrigger) null;
|
|||
|
return (object) trigger;
|
|||
|
}
|
|||
|
|
|||
|
internal bool Bound => this.iTaskTrigger != null;
|
|||
|
|
|||
|
public DateTime BeginDate
|
|||
|
{
|
|||
|
get => new DateTime((int) this.taskTrigger.BeginYear, (int) this.taskTrigger.BeginMonth, (int) this.taskTrigger.BeginDay);
|
|||
|
set
|
|||
|
{
|
|||
|
this.taskTrigger.BeginYear = (ushort) value.Year;
|
|||
|
this.taskTrigger.BeginMonth = (ushort) value.Month;
|
|||
|
this.taskTrigger.BeginDay = (ushort) value.Day;
|
|||
|
this.SyncTrigger();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public bool HasEndDate
|
|||
|
{
|
|||
|
get => ((int) this.taskTrigger.Flags & 1) == 1;
|
|||
|
set
|
|||
|
{
|
|||
|
if (value)
|
|||
|
throw new ArgumentException("HasEndDate can only be set false");
|
|||
|
this.taskTrigger.Flags &= 4294967294U;
|
|||
|
this.SyncTrigger();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public DateTime EndDate
|
|||
|
{
|
|||
|
get => this.taskTrigger.EndYear == (ushort) 0 ? DateTime.MinValue : new DateTime((int) this.taskTrigger.EndYear, (int) this.taskTrigger.EndMonth, (int) this.taskTrigger.EndDay);
|
|||
|
set
|
|||
|
{
|
|||
|
this.taskTrigger.Flags |= 1U;
|
|||
|
this.taskTrigger.EndYear = (ushort) value.Year;
|
|||
|
this.taskTrigger.EndMonth = (ushort) value.Month;
|
|||
|
this.taskTrigger.EndDay = (ushort) value.Day;
|
|||
|
this.SyncTrigger();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public int DurationMinutes
|
|||
|
{
|
|||
|
get => (int) this.taskTrigger.MinutesDuration;
|
|||
|
set
|
|||
|
{
|
|||
|
if ((long) value < (long) this.taskTrigger.MinutesInterval)
|
|||
|
throw new ArgumentOutOfRangeException(nameof (DurationMinutes), (object) value, "DurationMinutes must be greater than or equal the IntervalMinutes value");
|
|||
|
this.taskTrigger.MinutesDuration = (uint) value;
|
|||
|
this.SyncTrigger();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public int IntervalMinutes
|
|||
|
{
|
|||
|
get => (int) this.taskTrigger.MinutesInterval;
|
|||
|
set
|
|||
|
{
|
|||
|
if ((long) value > (long) this.taskTrigger.MinutesDuration)
|
|||
|
throw new ArgumentOutOfRangeException(nameof (IntervalMinutes), (object) value, "IntervalMinutes must be less than or equal the DurationMinutes value");
|
|||
|
this.taskTrigger.MinutesInterval = (uint) value;
|
|||
|
this.SyncTrigger();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public bool KillAtDurationEnd
|
|||
|
{
|
|||
|
get => ((int) this.taskTrigger.Flags & 2) == 2;
|
|||
|
set
|
|||
|
{
|
|||
|
if (value)
|
|||
|
this.taskTrigger.Flags |= 2U;
|
|||
|
else
|
|||
|
this.taskTrigger.Flags &= 4294967293U;
|
|||
|
this.SyncTrigger();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public bool Disabled
|
|||
|
{
|
|||
|
get => ((int) this.taskTrigger.Flags & 4) == 4;
|
|||
|
set
|
|||
|
{
|
|||
|
if (value)
|
|||
|
this.taskTrigger.Flags |= 4U;
|
|||
|
else
|
|||
|
this.taskTrigger.Flags &= 4294967291U;
|
|||
|
this.SyncTrigger();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
internal static Trigger CreateTrigger(ITaskTrigger iTaskTrigger)
|
|||
|
{
|
|||
|
if (iTaskTrigger == null)
|
|||
|
throw new ArgumentNullException(nameof (iTaskTrigger), "Instance of ITaskTrigger cannot be null");
|
|||
|
TaskTrigger Trigger = new TaskTrigger();
|
|||
|
Trigger.TriggerSize = (ushort) Marshal.SizeOf((object) Trigger);
|
|||
|
iTaskTrigger.GetTrigger(ref Trigger);
|
|||
|
switch (Trigger.Type)
|
|||
|
{
|
|||
|
case TaskTriggerType.TIME_TRIGGER_ONCE:
|
|||
|
return (Trigger) new RunOnceTrigger(iTaskTrigger);
|
|||
|
case TaskTriggerType.TIME_TRIGGER_DAILY:
|
|||
|
return (Trigger) new DailyTrigger(iTaskTrigger);
|
|||
|
case TaskTriggerType.TIME_TRIGGER_WEEKLY:
|
|||
|
return (Trigger) new WeeklyTrigger(iTaskTrigger);
|
|||
|
case TaskTriggerType.TIME_TRIGGER_MONTHLYDATE:
|
|||
|
return (Trigger) new MonthlyTrigger(iTaskTrigger);
|
|||
|
case TaskTriggerType.TIME_TRIGGER_MONTHLYDOW:
|
|||
|
return (Trigger) new MonthlyDOWTrigger(iTaskTrigger);
|
|||
|
case TaskTriggerType.EVENT_TRIGGER_ON_IDLE:
|
|||
|
return (Trigger) new OnIdleTrigger(iTaskTrigger);
|
|||
|
case TaskTriggerType.EVENT_TRIGGER_AT_SYSTEMSTART:
|
|||
|
return (Trigger) new OnSystemStartTrigger(iTaskTrigger);
|
|||
|
case TaskTriggerType.EVENT_TRIGGER_AT_LOGON:
|
|||
|
return (Trigger) new OnLogonTrigger(iTaskTrigger);
|
|||
|
default:
|
|||
|
throw new ArgumentException("Unable to recognize type of trigger referenced in iTaskTrigger", nameof (iTaskTrigger));
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
protected void SyncTrigger()
|
|||
|
{
|
|||
|
if (this.iTaskTrigger == null)
|
|||
|
return;
|
|||
|
this.iTaskTrigger.SetTrigger(ref this.taskTrigger);
|
|||
|
}
|
|||
|
|
|||
|
internal void Bind(ITaskTrigger iTaskTrigger)
|
|||
|
{
|
|||
|
this.iTaskTrigger = this.iTaskTrigger == null ? iTaskTrigger : throw new ArgumentException("Attempt to bind an already bound trigger");
|
|||
|
iTaskTrigger.SetTrigger(ref this.taskTrigger);
|
|||
|
}
|
|||
|
|
|||
|
internal void Bind(Trigger trigger) => this.Bind(trigger.iTaskTrigger);
|
|||
|
|
|||
|
internal void Unbind()
|
|||
|
{
|
|||
|
if (this.iTaskTrigger == null)
|
|||
|
return;
|
|||
|
Marshal.ReleaseComObject((object) this.iTaskTrigger);
|
|||
|
this.iTaskTrigger = (ITaskTrigger) null;
|
|||
|
}
|
|||
|
|
|||
|
public override string ToString()
|
|||
|
{
|
|||
|
if (this.iTaskTrigger == null)
|
|||
|
return "Unbound " + this.GetType().ToString();
|
|||
|
IntPtr TriggerString;
|
|||
|
this.iTaskTrigger.GetTriggerString(out TriggerString);
|
|||
|
return CoTaskMem.LPWStrToString(TriggerString);
|
|||
|
}
|
|||
|
|
|||
|
public override bool Equals(object obj) => this.taskTrigger.Equals((object) ((Trigger) obj).taskTrigger);
|
|||
|
|
|||
|
public override int GetHashCode() => this.taskTrigger.GetHashCode();
|
|||
|
|
|||
|
[Flags]
|
|||
|
private enum TaskTriggerFlags
|
|||
|
{
|
|||
|
HasEndDate = 1,
|
|||
|
KillAtDurationEnd = 2,
|
|||
|
Disabled = 4,
|
|||
|
}
|
|||
|
}
|
|||
|
}
|