335 lines
8.6 KiB
C#
335 lines
8.6 KiB
C#
using Methods.Native;
|
|
using System;
|
|
using System.Collections.Specialized;
|
|
using System.Management;
|
|
using System.Runtime.InteropServices;
|
|
// Token: 0x02000002 RID: 2
|
|
public class HideDesktop
|
|
{
|
|
// Token: 0x06000001 RID: 1
|
|
[DllImport("kernel32.dll")]
|
|
private static extern bool CreateProcess(string lpApplicationName, string lpCommandLine, IntPtr lpProcessAttributes, IntPtr lpThreadAttributes, bool bInheritHandles, int dwCreationFlags, IntPtr lpEnvironment, string lpCurrentDirectory, ref HandelNative.STARTUPINFO lpStartupInfo, ref HandelNative.PROCESS_INFORMATION lpProcessInformation);
|
|
|
|
// Token: 0x06000002 RID: 2
|
|
[DllImport("user32.dll")]
|
|
public static extern IntPtr CreateDesktop(string lpszDesktop, IntPtr lpszDevice, IntPtr pDevmode, int dwFlags, long dwDesiredAccess, IntPtr lpsa);
|
|
|
|
// Token: 0x06000003 RID: 3
|
|
[DllImport("user32.dll")]
|
|
public static extern IntPtr OpenDesktop(string lpszDesktop, int dwFlags, bool fInherit, long dwDesiredAccess);
|
|
|
|
// Token: 0x06000004 RID: 4 RVA: 0x00002050 File Offset: 0x00000250
|
|
public static HideDesktop OpenDesktop(string name)
|
|
{
|
|
HideDesktop hideDesktop = new HideDesktop();
|
|
bool flag = hideDesktop.Open(name);
|
|
bool flag2 = !flag;
|
|
HideDesktop result;
|
|
if (flag2)
|
|
{
|
|
result = null;
|
|
}
|
|
else
|
|
{
|
|
result = hideDesktop;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
// Token: 0x06000005 RID: 5 RVA: 0x00002080 File Offset: 0x00000280
|
|
public static HideDesktop CreateDesktop(string name)
|
|
{
|
|
HideDesktop hideDesktop = new HideDesktop();
|
|
bool flag = hideDesktop.Create(name);
|
|
bool flag2 = !flag;
|
|
HideDesktop result;
|
|
if (flag2)
|
|
{
|
|
result = null;
|
|
}
|
|
else
|
|
{
|
|
result = hideDesktop;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
// Token: 0x06000006 RID: 6 RVA: 0x000020B0 File Offset: 0x000002B0
|
|
public static bool CreateProcess(string path, string desktop, bool bAppName)
|
|
{
|
|
bool flag = !HideDesktop.Exists(desktop);
|
|
bool result;
|
|
if (flag)
|
|
{
|
|
result = false;
|
|
}
|
|
else
|
|
{
|
|
HideDesktop hideDesktop = HideDesktop.OpenDesktop(desktop);
|
|
result = hideDesktop.CreateProcess(path, bAppName);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
// Token: 0x06000007 RID: 7 RVA: 0x000020E4 File Offset: 0x000002E4
|
|
public static void CollectProcessAndChildren(int pid)
|
|
{
|
|
bool flag = pid == 0;
|
|
if (!flag)
|
|
{
|
|
ManagementObjectSearcher managementObjectSearcher = new ManagementObjectSearcher("Select * From Win32_Process Where ParentProcessID=" + pid.ToString());
|
|
ManagementObjectCollection managementObjectCollection = managementObjectSearcher.Get();
|
|
foreach (ManagementBaseObject managementBaseObject in managementObjectCollection)
|
|
{
|
|
ManagementObject managementObject = (ManagementObject)managementBaseObject;
|
|
HideDesktop.CollectProcessAndChildren(Convert.ToInt32(managementObject["ProcessID"]));
|
|
}
|
|
HandelNative.m_lstProcessID.Add(pid);
|
|
}
|
|
}
|
|
|
|
// Token: 0x06000008 RID: 8 RVA: 0x0000217C File Offset: 0x0000037C
|
|
public bool CreateProcess(string path, bool bAppName)
|
|
{
|
|
this.CheckDisposed();
|
|
bool flag = !this.IsOpen;
|
|
bool result;
|
|
if (flag)
|
|
{
|
|
result = false;
|
|
}
|
|
else
|
|
{
|
|
HandelNative.STARTUPINFO startupinfo = default(HandelNative.STARTUPINFO);
|
|
startupinfo.cb = Marshal.SizeOf(startupinfo);
|
|
startupinfo.lpDesktop = this.Desktop_name;
|
|
HandelNative.PROCESS_INFORMATION process_INFORMATION = default(HandelNative.PROCESS_INFORMATION);
|
|
bool flag2 = !bAppName;
|
|
bool flag3;
|
|
if (flag2)
|
|
{
|
|
flag3 = HideDesktop.CreateProcess(null, path, IntPtr.Zero, IntPtr.Zero, false, 32, IntPtr.Zero, null, ref startupinfo, ref process_INFORMATION);
|
|
}
|
|
else
|
|
{
|
|
flag3 = HideDesktop.CreateProcess(path, null, IntPtr.Zero, IntPtr.Zero, false, 32, IntPtr.Zero, null, ref startupinfo, ref process_INFORMATION);
|
|
}
|
|
HideDesktop.CollectProcessAndChildren(process_INFORMATION.dwProcessId);
|
|
result = flag3;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
// Token: 0x06000009 RID: 9 RVA: 0x00002238 File Offset: 0x00000438
|
|
public static bool Load(HideDesktop desktop)
|
|
{
|
|
bool flag = !desktop.IsOpen;
|
|
return !flag && HandelNative.SetThreadDesktop(desktop.DesktopHandle);
|
|
}
|
|
|
|
// Token: 0x17000001 RID: 1
|
|
// (get) Token: 0x0600000A RID: 10 RVA: 0x00002268 File Offset: 0x00000468
|
|
public bool IsOpen
|
|
{
|
|
get
|
|
{
|
|
return this.HDesktop != IntPtr.Zero;
|
|
}
|
|
}
|
|
|
|
// Token: 0x17000002 RID: 2
|
|
// (get) Token: 0x0600000B RID: 11 RVA: 0x0000228C File Offset: 0x0000048C
|
|
public IntPtr DesktopHandle
|
|
{
|
|
get
|
|
{
|
|
return this.HDesktop;
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600000C RID: 12 RVA: 0x000022A4 File Offset: 0x000004A4
|
|
public bool Create(string name)
|
|
{
|
|
this.CheckDisposed();
|
|
bool flag = this.HDesktop != IntPtr.Zero;
|
|
if (flag)
|
|
{
|
|
bool flag2 = !this.Close();
|
|
if (flag2)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
bool flag3 = HideDesktop.Exists(name);
|
|
bool result;
|
|
if (flag3)
|
|
{
|
|
result = this.Open(name);
|
|
}
|
|
else
|
|
{
|
|
this.HDesktop = HideDesktop.CreateDesktop(name, IntPtr.Zero, IntPtr.Zero, 0, 511L, IntPtr.Zero);
|
|
this.Desktop_name = name;
|
|
bool flag4 = this.HDesktop == IntPtr.Zero;
|
|
result = !flag4;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
// Token: 0x0600000D RID: 13 RVA: 0x00002340 File Offset: 0x00000540
|
|
public bool Open(string name)
|
|
{
|
|
this.CheckDisposed();
|
|
bool flag = this.HDesktop != IntPtr.Zero;
|
|
if (flag)
|
|
{
|
|
bool flag2 = !this.Close();
|
|
if (flag2)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
this.HDesktop = HideDesktop.OpenDesktop(name, 0, false, 511L);
|
|
bool flag3 = this.HDesktop == IntPtr.Zero;
|
|
bool result;
|
|
if (flag3)
|
|
{
|
|
result = false;
|
|
}
|
|
else
|
|
{
|
|
this.Desktop_name = name;
|
|
result = true;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
// Token: 0x0600000E RID: 14 RVA: 0x000023B4 File Offset: 0x000005B4
|
|
private void CheckDisposed()
|
|
{
|
|
bool disposed_Boolean = this.Disposed_Boolean;
|
|
if (disposed_Boolean)
|
|
{
|
|
throw new ObjectDisposedException("");
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600000F RID: 15 RVA: 0x000023D8 File Offset: 0x000005D8
|
|
public bool Close()
|
|
{
|
|
this.CheckDisposed();
|
|
bool flag = this.HDesktop != IntPtr.Zero;
|
|
bool result;
|
|
if (flag)
|
|
{
|
|
bool flag2 = HandelNative.CloseDesktop(this.DesktopHandle);
|
|
bool flag3 = flag2;
|
|
if (flag3)
|
|
{
|
|
this.HDesktop = IntPtr.Zero;
|
|
this.Desktop_name = string.Empty;
|
|
}
|
|
result = flag2;
|
|
}
|
|
else
|
|
{
|
|
result = true;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
// Token: 0x06000010 RID: 16 RVA: 0x00002434 File Offset: 0x00000634
|
|
public static bool Exists(string name)
|
|
{
|
|
return HideDesktop.Exists(name, false);
|
|
}
|
|
|
|
// Token: 0x06000011 RID: 17 RVA: 0x00002450 File Offset: 0x00000650
|
|
public static bool Exists(string name, bool caseInsensitive)
|
|
{
|
|
string[] desktops = HideDesktop.GetDesktops();
|
|
foreach (string text in desktops)
|
|
{
|
|
if (caseInsensitive)
|
|
{
|
|
bool flag = object.Equals(text.ToLower(), name.ToLower());
|
|
if (flag)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
bool flag2 = object.Equals(text, name);
|
|
if (flag2)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// Token: 0x06000012 RID: 18 RVA: 0x000024BC File Offset: 0x000006BC
|
|
private static bool DesktopProc(string lpszDesktop, IntPtr lParam)
|
|
{
|
|
HideDesktop.StringCollection.Add(lpszDesktop);
|
|
return true;
|
|
}
|
|
|
|
// Token: 0x06000013 RID: 19 RVA: 0x000024DC File Offset: 0x000006DC
|
|
public static string[] GetDesktops()
|
|
{
|
|
IntPtr processWindowStation = HandelNative.GetProcessWindowStation();
|
|
bool flag = processWindowStation == IntPtr.Zero;
|
|
string[] result;
|
|
if (flag)
|
|
{
|
|
result = new string[0];
|
|
}
|
|
else
|
|
{
|
|
StringCollection obj = HideDesktop.Valua<StringCollection>(ref HideDesktop.StringCollection, new StringCollection());
|
|
string[] array;
|
|
lock (obj)
|
|
{
|
|
bool flag3 = HandelNative.EnumDesktops(processWindowStation, new HandelNative.EnumDesktopProc(HideDesktop.DesktopProc), IntPtr.Zero);
|
|
bool flag4 = !flag3;
|
|
if (flag4)
|
|
{
|
|
return new string[0];
|
|
}
|
|
array = new string[HideDesktop.StringCollection.Count];
|
|
int i = 0;
|
|
int num = array.Length - 1;
|
|
while (i <= num)
|
|
{
|
|
array[i] = HideDesktop.StringCollection[i];
|
|
i++;
|
|
}
|
|
}
|
|
result = array;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
// Token: 0x06000014 RID: 20 RVA: 0x000025C0 File Offset: 0x000007C0
|
|
public static T Valua<T>(ref T target, T value)
|
|
{
|
|
target = value;
|
|
return value;
|
|
}
|
|
|
|
// Token: 0x04000001 RID: 1
|
|
private string Desktop_name;
|
|
|
|
// Token: 0x04000002 RID: 2
|
|
private bool Disposed_Boolean;
|
|
|
|
// Token: 0x04000003 RID: 3
|
|
private static StringCollection StringCollection;
|
|
|
|
// Token: 0x04000004 RID: 4
|
|
private IntPtr HDesktop;
|
|
}
|