ä¸å½ç§»å¨é£ä¿¡çç ç©¶ ç¬è®°äº
ç»è¿ ä¸ä¸ç¯ çæ¥çé£ä¿¡ éé¢ å°è£ äºä¸å°ã è¿éé¢ä¸ä» æ¯ä¸å±å ä¸å±ï¼è䏿¯è¿ä¸å±è¿è°ç¨å¦å¤çç¨åºéãç±»ä¸ç±»ä¹é´çç»åãç»§æ¿å¯è°æ¯ å¾å¤æãå°åºä»åªé䏿å¢ã ææ¬æ¬¡ç ç©¶ ä¹ä¸æ¯ä¸ºäºå½»åºçç ç©¶å®ï¼ä¹å°±æ¯ä»çä¸äºåºæ¬åè½çç ç©¶ã顺便ï¼å°ä¸äºç±»å¼æ¸ æ¥ãæåè¿æ¯æç §ç¨åºç è¿è¡é¡ºåºä¸æ¥ä¸æ¥çæ¥ç ç©¶å§ãæç §åè½åæã
Â
声æï¼ä¸ªäººå¹¶éä¾µç¯ ç§»å¨å ¬å¸çæçãæ¤ç¬è®°çº¯å±ä¸ªäººå¦ä¹ çè®°å½ãè¥ç§»å¨ä¸åæï¼æç«é©¬å°è¿äºææ¡£å é¤ï¼å¸æåä½è§è° ï¼
Â
ä¸é¢å°±å°ç¨åºçå å«ä¸»å½æ°çProgram ååºæ¥ï¼
Â
namespace Imps.Client.Pc
{
using System;
using System.Net;
using System.Runtime.InteropServices;
using System.Threading;
using System.Windows.Forms;
internal static class Program
{
private const int BUFSIZE = 0x3e8;
private const int TOKEN_ADJUST_PRIVILEGES = 0x20;
private const int TOKEN_QUERY = 8;
[DllImport("kernel32.dll", ExactSpelling=true)]
internal static extern IntPtr GetCurrentProcess();
[DllImport("advapi32", CharSet=CharSet.Auto)]
private static extern bool GetTokenInformation(IntPtr hToken, TOKEN_INFORMATION_CLASS tokenInfoClass, IntPtr TokenInformation, int tokeInfoLength, ref int reqLength);
[STAThread]
private static void Main(string[] args)
{
Thread.CurrentThread.Name = "Imps.Client.Pc MainThread";
Application.EnableVisualStyles();
ServicePointManager.MaxServicePointIdleTime = 0x7530;
try
{
IntPtr currentProcess = GetCurrentProcess();
IntPtr zero = IntPtr.Zero;
if (!OpenProcessToken(currentProcess, 40, ref zero))
{
goto Label_008C;
}
IntPtr tokenInformation = Marshal.AllocHGlobal(0x3e8);
int tokeInfoLength = 0x3e8;
GetTokenInformation(zero, TOKEN_INFORMATION_CLASS.TokenPrivileges, tokenInformation, tokeInfoLength, ref tokeInfoLength);
TokPriv1Luid luid = (TokPriv1Luid) Marshal.PtrToStructure(tokenInformation, typeof(TokPriv1Luid));
if (luid.Count > 1)
{
goto Label_008C;
}
MessageBox.Show("è¿è¡æ¤ç¨åºçæéä¸å¤ï¼");
}
catch
{
}
return;
Label_008C:
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm(args));
}
[DllImport("advapi32.dll", SetLastError=true, ExactSpelling=true)]
internal static extern bool OpenProcessToken(IntPtr h, int acc, ref IntPtr phtok);
private enum TOKEN_INFORMATION_CLASS
{
TokenDefaultDacl = 6,
TokenGroups = 2,
TokenImpersonationLevel = 9,
TokenOwner = 4,
TokenPrimaryGroup = 5,
TokenPrivileges = 3,
TokenRestrictedSids = 11,
TokenSessionId = 12,
TokenSource = 7,
TokenStatistics = 10,
TokenType = 8,
TokenUser = 1
}
[StructLayout(LayoutKind.Sequential, Pack=1)]
internal struct TokPriv1Luid
{
public int Count;
public long Luid;
public int Attr;
}
}
}
 Â
æ¤ç¨åºéå¼ç¨äº WindowsçAPIã
å¼ç¨è¿äºAPI æ®æ æ¥çåºè¯¥æ¯ ä¿è¯ç¨åºæè¶³å¤ç æéæ¥è¿è¡ï¼
ç± Application.Run(new MainForm(args)); å¯ä»¥çåºï¼é¦å æ¯è°ç¨äºä¸»çé¢ MainFormã
å ¶ä¸ï¼args ä¸ºä¼ éè¿æ¥çåæ°ã
ä¸é¢æ¯ MainFormçæºä»£ç : ç±äºç¨åºæºä»£ç å¤å¤§ 3200å¤è¡ï¼IEæå¼ä¼å¾æ ¢ï¼æä»¥åªååºéè¦ä»£ç !
namespace Imps.Client.Pc
{
using Imps.Client;
using Imps.Client.Base;
using Imps.Client.CommLayer;
using Imps.Client.Core;
using Imps.Client.Logger;
using Imps.Client.Pc.BizControls;
using Imps.Client.Pc.MessageHistory2;
using Imps.Client.Pc.Options;
using Imps.Client.Pc.Sensor;
using Imps.Client.Pc.Theme;
using Imps.Client.Pc.UIContactList;
using Imps.Client.Pc.UserAccount;
using Imps.Client.Resource;
using Imps.Client.Utils;
using Imps.Client.Utils.sensmon;
using Imps.Client.Utils.Win32;
using Imps.Common;
using Imps.Utils;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using System.Xml;
public class MainForm : EForm, IFrameworkWindow
{
...
...
public event EventHandler BeginSuspend;
public event PositionEventHandler HideAdvChanel;
public event EventHandler MainWindowLoaded;
public event EventHandler SuspendRestored;
static MainForm()
{
int[] numArray = new int[3];
numArray[1] = 0x579;
numArray[2] = 0x57c;
UserError = numArray;
}
public MainForm() : this(new string[0])
{
}
public MainForm(string[] args)
{
this._syncObjSensor = new object();
this.WM_FETIONSTARTED = (int) Imps.Client.Utils.Win32.NativeMethods.RegisterWindowMessage("FetionStarted");
CallMe.InitCallMe(this);
CallMeHelper.WM_FETION_CALLME = (int) Imps.Client.Utils.Win32.NativeMethods.RegisterWindowMessage("FetionCallMeMessage");
if (this.TryCheckSingleton())
{
CallMeHelper.TrySendCallMeMessage(args, base.Handle);
Environment.Exit(0);
}
else
{
if (this.ExistFetionInstance())
{
if (CallMeHelper.TrySendCallMeMessage(args, base.Handle))
{
Environment.Exit(0);
return;
}
}
else if (args.Length >= 1)
{
foreach (string str in args)
{
if (CallMe.ParseCallMeParams(str) == 0)
{
break;
}
}
}
try
{
this.HandleExceptions();
this.InitLogger();
this.ParseArgs(args);
this.InitializeComponent();
this.trayIcon.Icon = ImpsTrayIcons.OffLine;
base.Icon = ImpsIcons.Logo;
FuncDispatcher.SetMainWindow(this);
this.BuildMainMenu();
this.InitUiComponents();
this.InitMainUIForm(this);
this.trayIcon.Visible = true;
this.DoLocalization();
this.RearrangeUiElements();
this.TryLoadWindowsSetting(this);
if (!this.CurrentUser.Configuration.UserSetting.MainWindowSetting.AutoPopup)
{
base.WindowState = FormWindowState.Minimized;
if (UserAccounts.LatestAccountAutoLogin)
{
base.ShowInTaskbar = false;
}
}
ImpsHelp.HelpPage = Imps.Client.Core.FixedClientSetting.Instance.HelpPage;
this.CurHandleRef = new HandleRef(this, base.Handle);
this.RegWndMsg();
}
catch (Exception exception)
{
MessageBox.Show(exception.Message);
ShellHelper.ApplicationExit();
}
}
}
...
...
}
}
Â
           if (this.TryCheckSingleton())
           {
               CallMeHelper.TrySendCallMeMessage(args, base.Handle);
               Environment.Exit(0);
           }
           else
           {
               if (this.ExistFetionInstance())
               {
                   if (CallMeHelper.TrySendCallMeMessage(args, base.Handle))
                   {
                       Environment.Exit(0);
                       return;
                   }
               }
è¿éå¯ä»¥çåº é£ä¿¡ç¨åºä¸å°æºå¨åªè½ç»éä¸ä¸ªãä¿è¯äºç¨åºçå¯ä¸æ§ã
Â
ç±äºä¸»çé¢éåè½å¾å¤æï¼ç¯å¹ 太é¿è¿éå°±ä¸è§£éäºã
Â