mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-22 19:36:11 +00:00
f2ac1ece55
add
459 lines
13 KiB
C#
459 lines
13 KiB
C#
// Decompiled with JetBrains decompiler
|
|
// Type: TaskScheduler.Task
|
|
// 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.Diagnostics;
|
|
using System.IO;
|
|
using System.Runtime.InteropServices;
|
|
using System.Runtime.InteropServices.ComTypes;
|
|
using System.Runtime.Serialization.Formatters.Binary;
|
|
using System.Security;
|
|
using TaskSchedulerInterop;
|
|
|
|
namespace TaskScheduler
|
|
{
|
|
public class Task : IDisposable
|
|
{
|
|
private ITask iTask;
|
|
private string name;
|
|
private TriggerList triggers;
|
|
|
|
internal Task(ITask iTask, string taskName)
|
|
{
|
|
this.iTask = iTask;
|
|
this.name = !taskName.EndsWith(".job") ? taskName : taskName.Substring(0, taskName.Length - 4);
|
|
this.triggers = (TriggerList) null;
|
|
this.Hidden = this.GetHiddenFileAttr();
|
|
}
|
|
|
|
public string Name => this.name;
|
|
|
|
public TriggerList Triggers
|
|
{
|
|
get
|
|
{
|
|
if (this.triggers == null)
|
|
this.triggers = new TriggerList(this.iTask);
|
|
return this.triggers;
|
|
}
|
|
}
|
|
|
|
public string ApplicationName
|
|
{
|
|
get
|
|
{
|
|
IntPtr ApplicationName;
|
|
this.iTask.GetApplicationName(out ApplicationName);
|
|
return CoTaskMem.LPWStrToString(ApplicationName);
|
|
}
|
|
set => this.iTask.SetApplicationName(value);
|
|
}
|
|
|
|
public string AccountName
|
|
{
|
|
get
|
|
{
|
|
IntPtr AccountName = IntPtr.Zero;
|
|
this.iTask.GetAccountInformation(out AccountName);
|
|
return CoTaskMem.LPWStrToString(AccountName);
|
|
}
|
|
}
|
|
|
|
public string Comment
|
|
{
|
|
get
|
|
{
|
|
IntPtr Comment;
|
|
this.iTask.GetComment(out Comment);
|
|
return CoTaskMem.LPWStrToString(Comment);
|
|
}
|
|
set => this.iTask.SetComment(value);
|
|
}
|
|
|
|
public string Creator
|
|
{
|
|
get
|
|
{
|
|
IntPtr Creator;
|
|
this.iTask.GetCreator(out Creator);
|
|
return CoTaskMem.LPWStrToString(Creator);
|
|
}
|
|
set => this.iTask.SetCreator(value);
|
|
}
|
|
|
|
private short ErrorRetryCount
|
|
{
|
|
get
|
|
{
|
|
ushort RetryCount;
|
|
this.iTask.GetErrorRetryCount(out RetryCount);
|
|
return (short) RetryCount;
|
|
}
|
|
set => this.iTask.SetErrorRetryCount((ushort) value);
|
|
}
|
|
|
|
private short ErrorRetryInterval
|
|
{
|
|
get
|
|
{
|
|
ushort RetryInterval;
|
|
this.iTask.GetErrorRetryInterval(out RetryInterval);
|
|
return (short) RetryInterval;
|
|
}
|
|
set => this.iTask.SetErrorRetryInterval((ushort) value);
|
|
}
|
|
|
|
public int ExitCode
|
|
{
|
|
get
|
|
{
|
|
uint ExitCode = 0;
|
|
this.iTask.GetExitCode(out ExitCode);
|
|
return (int) ExitCode;
|
|
}
|
|
}
|
|
|
|
public TaskFlags Flags
|
|
{
|
|
get
|
|
{
|
|
uint Flags;
|
|
this.iTask.GetFlags(out Flags);
|
|
return (TaskFlags) Flags;
|
|
}
|
|
set => this.iTask.SetFlags((uint) value);
|
|
}
|
|
|
|
public short IdleWaitMinutes
|
|
{
|
|
get
|
|
{
|
|
ushort IdleMinutes;
|
|
this.iTask.GetIdleWait(out IdleMinutes, out ushort _);
|
|
return (short) IdleMinutes;
|
|
}
|
|
set
|
|
{
|
|
ushort waitDeadlineMinutes = (ushort) this.IdleWaitDeadlineMinutes;
|
|
this.iTask.SetIdleWait((ushort) value, waitDeadlineMinutes);
|
|
}
|
|
}
|
|
|
|
public short IdleWaitDeadlineMinutes
|
|
{
|
|
get
|
|
{
|
|
ushort DeadlineMinutes;
|
|
this.iTask.GetIdleWait(out ushort _, out DeadlineMinutes);
|
|
return (short) DeadlineMinutes;
|
|
}
|
|
set => this.iTask.SetIdleWait((ushort) this.IdleWaitMinutes, (ushort) value);
|
|
}
|
|
|
|
public TimeSpan MaxRunTime
|
|
{
|
|
get
|
|
{
|
|
uint MaxRunTimeMS;
|
|
this.iTask.GetMaxRunTime(out MaxRunTimeMS);
|
|
return new TimeSpan((long) MaxRunTimeMS * 10000L);
|
|
}
|
|
set
|
|
{
|
|
double totalMilliseconds = value.TotalMilliseconds;
|
|
if (totalMilliseconds >= (double) uint.MaxValue)
|
|
this.iTask.SetMaxRunTime(uint.MaxValue);
|
|
else
|
|
this.iTask.SetMaxRunTime((uint) totalMilliseconds);
|
|
}
|
|
}
|
|
|
|
public bool MaxRunTimeLimited
|
|
{
|
|
get
|
|
{
|
|
uint MaxRunTimeMS;
|
|
this.iTask.GetMaxRunTime(out MaxRunTimeMS);
|
|
return MaxRunTimeMS == uint.MaxValue;
|
|
}
|
|
set
|
|
{
|
|
if (value)
|
|
{
|
|
uint MaxRunTimeMS;
|
|
this.iTask.GetMaxRunTime(out MaxRunTimeMS);
|
|
if (MaxRunTimeMS != uint.MaxValue)
|
|
return;
|
|
this.iTask.SetMaxRunTime(25920000U);
|
|
}
|
|
else
|
|
this.iTask.SetMaxRunTime(uint.MaxValue);
|
|
}
|
|
}
|
|
|
|
public DateTime MostRecentRunTime
|
|
{
|
|
get
|
|
{
|
|
SystemTime LastRun = new SystemTime();
|
|
this.iTask.GetMostRecentRunTime(ref LastRun);
|
|
return LastRun.Year == (ushort) 0 ? DateTime.MinValue : new DateTime((int) LastRun.Year, (int) LastRun.Month, (int) LastRun.Day, (int) LastRun.Hour, (int) LastRun.Minute, (int) LastRun.Second, (int) LastRun.Milliseconds);
|
|
}
|
|
}
|
|
|
|
public DateTime NextRunTime
|
|
{
|
|
get
|
|
{
|
|
SystemTime NextRun = new SystemTime();
|
|
this.iTask.GetNextRunTime(ref NextRun);
|
|
return NextRun.Year == (ushort) 0 ? DateTime.MinValue : new DateTime((int) NextRun.Year, (int) NextRun.Month, (int) NextRun.Day, (int) NextRun.Hour, (int) NextRun.Minute, (int) NextRun.Second, (int) NextRun.Milliseconds);
|
|
}
|
|
}
|
|
|
|
public string Parameters
|
|
{
|
|
get
|
|
{
|
|
IntPtr Parameters;
|
|
this.iTask.GetParameters(out Parameters);
|
|
return CoTaskMem.LPWStrToString(Parameters);
|
|
}
|
|
set => this.iTask.SetParameters(value);
|
|
}
|
|
|
|
public ProcessPriorityClass Priority
|
|
{
|
|
get
|
|
{
|
|
uint Priority;
|
|
this.iTask.GetPriority(out Priority);
|
|
return (ProcessPriorityClass) Priority;
|
|
}
|
|
set
|
|
{
|
|
if (value == ProcessPriorityClass.AboveNormal || value == ProcessPriorityClass.BelowNormal)
|
|
throw new ArgumentException("Unsupported Priority Level");
|
|
this.iTask.SetPriority((uint) value);
|
|
}
|
|
}
|
|
|
|
public TaskStatus Status
|
|
{
|
|
get
|
|
{
|
|
int Status;
|
|
this.iTask.GetStatus(out Status);
|
|
return (TaskStatus) Status;
|
|
}
|
|
}
|
|
|
|
private int FlagsEx
|
|
{
|
|
get
|
|
{
|
|
uint Flags;
|
|
this.iTask.GetTaskFlags(out Flags);
|
|
return (int) Flags;
|
|
}
|
|
set => this.iTask.SetTaskFlags((uint) value);
|
|
}
|
|
|
|
public string WorkingDirectory
|
|
{
|
|
get
|
|
{
|
|
IntPtr WorkingDirectory;
|
|
this.iTask.GetWorkingDirectory(out WorkingDirectory);
|
|
return CoTaskMem.LPWStrToString(WorkingDirectory);
|
|
}
|
|
set => this.iTask.SetWorkingDirectory(value);
|
|
}
|
|
|
|
public bool Hidden
|
|
{
|
|
get => (this.Flags & TaskFlags.Hidden) != (TaskFlags) 0;
|
|
set
|
|
{
|
|
if (value)
|
|
this.Flags |= TaskFlags.Hidden;
|
|
else
|
|
this.Flags &= ~TaskFlags.Hidden;
|
|
}
|
|
}
|
|
|
|
public object Tag
|
|
{
|
|
get
|
|
{
|
|
ushort DataLen;
|
|
IntPtr Data;
|
|
this.iTask.GetWorkItemData(out DataLen, out Data);
|
|
byte[] numArray = new byte[(int) DataLen];
|
|
Marshal.Copy(Data, numArray, 0, (int) DataLen);
|
|
return new BinaryFormatter().Deserialize((Stream) new MemoryStream(numArray, false));
|
|
}
|
|
set
|
|
{
|
|
if (!value.GetType().IsSerializable)
|
|
throw new ArgumentException("Objects set as Data for Tasks must be serializable", nameof (value));
|
|
BinaryFormatter binaryFormatter = new BinaryFormatter();
|
|
MemoryStream serializationStream = new MemoryStream();
|
|
binaryFormatter.Serialize((Stream) serializationStream, value);
|
|
this.iTask.SetWorkItemData((ushort) serializationStream.Length, serializationStream.GetBuffer());
|
|
}
|
|
}
|
|
|
|
private void SetHiddenFileAttr(bool set)
|
|
{
|
|
string ppszFileName;
|
|
((IPersistFile) this.iTask).GetCurFile(out ppszFileName);
|
|
FileAttributes attributes = File.GetAttributes(ppszFileName);
|
|
FileAttributes fileAttributes = !set ? attributes & ~FileAttributes.Hidden : attributes | FileAttributes.Hidden;
|
|
File.SetAttributes(ppszFileName, fileAttributes);
|
|
}
|
|
|
|
private bool GetHiddenFileAttr()
|
|
{
|
|
string ppszFileName;
|
|
((IPersistFile) this.iTask).GetCurFile(out ppszFileName);
|
|
try
|
|
{
|
|
return (File.GetAttributes(ppszFileName) & FileAttributes.Hidden) != (FileAttributes) 0;
|
|
}
|
|
catch
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public DateTime NextRunTimeAfter(DateTime after)
|
|
{
|
|
after = after.AddSeconds(1.0);
|
|
SystemTime Begin = new SystemTime();
|
|
Begin.Year = (ushort) after.Year;
|
|
Begin.Month = (ushort) after.Month;
|
|
Begin.Day = (ushort) after.Day;
|
|
Begin.DayOfWeek = (ushort) after.DayOfWeek;
|
|
Begin.Hour = (ushort) after.Hour;
|
|
Begin.Minute = (ushort) after.Minute;
|
|
Begin.Second = (ushort) after.Second;
|
|
SystemTime systemTime1 = new SystemTime();
|
|
SystemTime End = Begin with
|
|
{
|
|
Year = (ushort) DateTime.MaxValue.Year,
|
|
Month = 1
|
|
};
|
|
ushort Count = 1;
|
|
IntPtr TaskTimes;
|
|
this.iTask.GetRunTimes(ref Begin, ref End, ref Count, out TaskTimes);
|
|
if (Count != (ushort) 1)
|
|
return DateTime.MinValue;
|
|
SystemTime systemTime2 = new SystemTime();
|
|
SystemTime structure = (SystemTime) Marshal.PtrToStructure(TaskTimes, typeof (SystemTime));
|
|
Marshal.FreeCoTaskMem(TaskTimes);
|
|
return new DateTime((int) structure.Year, (int) structure.Month, (int) structure.Day, (int) structure.Hour, (int) structure.Minute, (int) structure.Second);
|
|
}
|
|
|
|
public void Run() => this.iTask.Run();
|
|
|
|
public void Save()
|
|
{
|
|
((IPersistFile) this.iTask).Save((string) null, false);
|
|
this.SetHiddenFileAttr(this.Hidden);
|
|
}
|
|
|
|
public void Save(string name)
|
|
{
|
|
IPersistFile iTask = (IPersistFile) this.iTask;
|
|
string ppszFileName;
|
|
iTask.GetCurFile(out ppszFileName);
|
|
string pszFileName = Path.GetDirectoryName(ppszFileName) + (object) Path.DirectorySeparatorChar + name + Path.GetExtension(ppszFileName);
|
|
iTask.Save(pszFileName, true);
|
|
iTask.SaveCompleted(pszFileName);
|
|
this.name = name;
|
|
this.SetHiddenFileAttr(this.Hidden);
|
|
}
|
|
|
|
public void Close()
|
|
{
|
|
if (this.triggers != null)
|
|
this.triggers.Dispose();
|
|
Marshal.ReleaseComObject((object) this.iTask);
|
|
this.iTask = (ITask) null;
|
|
}
|
|
|
|
public void DisplayForEdit() => this.iTask.EditWorkItem(0U, 0U);
|
|
|
|
public bool DisplayPropertySheet() => this.DisplayPropertySheet(Task.PropPages.Task | Task.PropPages.Schedule | Task.PropPages.Settings);
|
|
|
|
public bool DisplayPropertySheet(Task.PropPages pages)
|
|
{
|
|
PropSheetHeader psh = new PropSheetHeader();
|
|
IProvideTaskPage iTask = (IProvideTaskPage) this.iTask;
|
|
IntPtr[] numArray = new IntPtr[3];
|
|
int num1 = 0;
|
|
IntPtr phPage;
|
|
if ((pages & Task.PropPages.Task) != (Task.PropPages) 0)
|
|
{
|
|
iTask.GetPage(0, false, out phPage);
|
|
numArray[num1++] = phPage;
|
|
}
|
|
if ((pages & Task.PropPages.Schedule) != (Task.PropPages) 0)
|
|
{
|
|
iTask.GetPage(1, false, out phPage);
|
|
numArray[num1++] = phPage;
|
|
}
|
|
if ((pages & Task.PropPages.Settings) != (Task.PropPages) 0)
|
|
{
|
|
iTask.GetPage(2, false, out phPage);
|
|
numArray[num1++] = phPage;
|
|
}
|
|
if (num1 == 0)
|
|
throw new ArgumentException("No Property Pages to display");
|
|
psh.dwSize = (uint) Marshal.SizeOf((object) psh);
|
|
psh.dwFlags = 128U;
|
|
psh.pszCaption = this.Name;
|
|
psh.nPages = (uint) num1;
|
|
GCHandle gcHandle = GCHandle.Alloc((object) numArray, GCHandleType.Pinned);
|
|
psh.phpage = gcHandle.AddrOfPinnedObject();
|
|
int num2 = PropertySheetDisplay.PropertySheet(ref psh);
|
|
gcHandle.Free();
|
|
if (num2 < 0)
|
|
throw new Exception("Property Sheet failed to display");
|
|
return num2 > 0;
|
|
}
|
|
|
|
public void SetAccountInformation(string accountName, string password)
|
|
{
|
|
IntPtr coTaskMemUni = Marshal.StringToCoTaskMemUni(password);
|
|
this.iTask.SetAccountInformation(accountName, coTaskMemUni);
|
|
Marshal.FreeCoTaskMem(coTaskMemUni);
|
|
}
|
|
|
|
public void SetAccountInformation(string accountName, SecureString password)
|
|
{
|
|
IntPtr coTaskMemUnicode = Marshal.SecureStringToCoTaskMemUnicode(password);
|
|
this.iTask.SetAccountInformation(accountName, coTaskMemUnicode);
|
|
Marshal.ZeroFreeCoTaskMemUnicode(coTaskMemUnicode);
|
|
}
|
|
|
|
public void Terminate() => this.iTask.Terminate();
|
|
|
|
public override string ToString() => string.Format("{0} (\"{1}\" {2})", (object) this.name, (object) this.ApplicationName, (object) this.Parameters);
|
|
|
|
public void Dispose() => this.Close();
|
|
|
|
[System.Flags]
|
|
public enum PropPages
|
|
{
|
|
Task = 1,
|
|
Schedule = 2,
|
|
Settings = 4,
|
|
}
|
|
}
|
|
}
|