├── src
├── Jlion.Process.Client
│ ├── packages.config
│ ├── Properties
│ │ ├── Settings.settings
│ │ ├── Settings.Designer.cs
│ │ ├── AssemblyInfo.cs
│ │ ├── Resources.Designer.cs
│ │ └── Resources.resx
│ ├── App.xaml.cs
│ ├── App.xaml
│ ├── MainWindow.xaml.cs
│ ├── MainWindow.xaml
│ ├── Jlion.Process.Client.sln
│ ├── InjectService.cs
│ ├── Jlion.Process.Client.csproj
│ └── FastWin32.xml
├── Jlion.Process.Target.Client
│ ├── Properties
│ │ ├── Settings.settings
│ │ ├── Settings.Designer.cs
│ │ ├── AssemblyInfo.cs
│ │ ├── Resources.Designer.cs
│ │ └── Resources.resx
│ ├── App.xaml.cs
│ ├── Model
│ │ ├── ProcessRequest.cs
│ │ └── ProcessResponse.cs
│ ├── App.xaml
│ ├── Service
│ │ └── ProcessService.cs
│ ├── MainWindow.xaml
│ ├── MainWindow.xaml.cs
│ └── Jlion.Process.Target.Client.csproj
└── Jlion.Process.HookCore
│ ├── packages.config
│ ├── Model
│ ├── ProcessRequest.cs
│ └── ProcessResponse.cs
│ ├── HookService.cs
│ ├── Properties
│ └── AssemblyInfo.cs
│ ├── HookService
│ └── ProcessHookService.cs
│ ├── Jlion.Process.HookCore.csproj
│ ├── DotNetDetour.xml
│ └── TextHelper.cs
├── README.md
├── Jlion.Process.Client.sln
├── .gitattributes
└── .gitignore
/src/Jlion.Process.Client/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/Jlion.Process.Client/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/Jlion.Process.Target.Client/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/Jlion.Process.HookCore/packages.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/Jlion.Process.Client/App.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Configuration;
4 | using System.Data;
5 | using System.Linq;
6 | using System.Windows;
7 |
8 | namespace Jlion.Process.Client
9 | {
10 | ///
11 | /// App.xaml 的交互逻辑
12 | ///
13 | public partial class App : Application
14 | {
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/Jlion.Process.HookCore/Model/ProcessRequest.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace Jlion.Process.HookCore.Model
7 | {
8 | public class ProcessRequest
9 | {
10 | ///
11 | /// 版本信息
12 | ///
13 | public string Version { set; get; }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/Jlion.Process.Target.Client/App.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Configuration;
4 | using System.Data;
5 | using System.Linq;
6 | using System.Windows;
7 |
8 | namespace Jlion.Process.Target.Client
9 | {
10 | ///
11 | /// App.xaml 的交互逻辑
12 | ///
13 | public partial class App : Application
14 | {
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/Jlion.Process.Target.Client/Model/ProcessRequest.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace Jlion.Process.Target.Client.Model
7 | {
8 | public class ProcessRequest
9 | {
10 | ///
11 | /// 版本信息
12 | ///
13 | public string Version { set; get; }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # processClientDemo
2 | 跨进程改写目标方法(注入dll 到第三方运行的程序进行第三方程序方法拦截改写)
3 |
4 | ### Hook
5 | 通过开源框架DotNetDotour 进行第三方方法Hook 重新第三方方法,前提是需要知道第三方程序中有那些方法(有些没加壳的比较好办,加壳的就得想办法反编译脱壳了)
6 | DotNetDotour 开源框架我fork 的地址:https://github.com/a312586670/DotNetDetour 我针对开源框架做了降级处理,支持.net framework 4 版本,开源作者里面的支持4.5+
7 | 故我fork 了一份(项目环境需要)
8 |
9 | ### FastWin32
10 | 通过 FastWin32 把重新的Hook dll 模块动态注入到第三方运行的程序中,并且执行Hook初始化操作,这样即可覆盖掉原有的第三方程序指定的方法,做自己的业务
11 |
--------------------------------------------------------------------------------
/src/Jlion.Process.Client/App.xaml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/Jlion.Process.Target.Client/App.xaml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/Jlion.Process.HookCore/Model/ProcessResponse.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace Jlion.Process.HookCore.Model
7 | {
8 | public class ProcessResponse
9 | {
10 | ///
11 | /// 客户端名称
12 | ///
13 | public string Name { set; get; }
14 |
15 | ///
16 | /// 版本信息
17 | ///
18 | public string Version { set; get; }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/Jlion.Process.Target.Client/Model/ProcessResponse.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 |
6 | namespace Jlion.Process.Target.Client.Model
7 | {
8 | public class ProcessResponse
9 | {
10 | ///
11 | /// 客户端名称
12 | ///
13 | public string Name { set; get; }
14 |
15 | ///
16 | /// 版本信息
17 | ///
18 | public string Version { set; get; }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/Jlion.Process.Target.Client/Service/ProcessService.cs:
--------------------------------------------------------------------------------
1 | using Jlion.Process.Target.Client.Model;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Text;
6 |
7 | namespace Jlion.Process.Target.Client
8 | {
9 | public class ProcessService
10 | {
11 | public string GetProcessInfo()
12 | {
13 | return "这是TargetClient 客户端(第三方程序)";
14 | }
15 |
16 |
17 | public ProcessResponse GetProcessInfo(ProcessRequest request)
18 | {
19 | return new ProcessResponse()
20 | {
21 | Name = "这是TargetClient 客户端(第三方程序)",
22 | Version = request.Version
23 | };
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/Jlion.Process.HookCore/HookService.cs:
--------------------------------------------------------------------------------
1 | using DotNetDetour;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Text;
6 |
7 | namespace Jlion.Process.HookCore
8 | {
9 | public class HookService
10 | {
11 | ///
12 | /// Hook 初始化
13 | ///
14 | ///
15 | ///
16 | public static int Start(string msg)
17 | {
18 | try
19 | {
20 | TextHelper.LogInfo("开始"+msg);
21 | MethodHook.Install();
22 | }
23 | catch
24 | {
25 | return -1;
26 | }
27 | return 1;
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/Jlion.Process.Client/MainWindow.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Windows;
6 | using System.Windows.Controls;
7 | using System.Windows.Data;
8 | using System.Windows.Documents;
9 | using System.Windows.Input;
10 | using System.Windows.Media;
11 | using System.Windows.Media.Imaging;
12 | using System.Windows.Navigation;
13 | using System.Windows.Shapes;
14 |
15 | namespace Jlion.Process.Client
16 | {
17 | ///
18 | /// MainWindow.xaml 的交互逻辑
19 | ///
20 | public partial class MainWindow : Window
21 | {
22 | public MainWindow()
23 | {
24 | InitializeComponent();
25 | }
26 |
27 | private void btnInject_Click(object sender, RoutedEventArgs e)
28 | {
29 | InjectService.pid = Convert.ToUInt32(txbPid.Text.Trim());
30 | InjectService.Start();
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/Jlion.Process.Client/MainWindow.xaml:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/Jlion.Process.Target.Client/MainWindow.xaml:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/Jlion.Process.HookCore/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // 有关程序集的一般信息由以下
6 | // 控制。更改这些特性值可修改
7 | // 与程序集关联的信息。
8 | [assembly: AssemblyTitle("Jlion.Process.HookCore")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("Jlion.Process.HookCore")]
13 | [assembly: AssemblyCopyright("Copyright © 2020")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // 将 ComVisible 设置为 false 会使此程序集中的类型
18 | //对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
19 | //请将此类型的 ComVisible 特性设置为 true。
20 | [assembly: ComVisible(false)]
21 |
22 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
23 | [assembly: Guid("38164b4c-3d06-4c11-b928-cef0beb41785")]
24 |
25 | // 程序集的版本信息由下列四个值组成:
26 | //
27 | // 主版本
28 | // 次版本
29 | // 生成号
30 | // 修订号
31 | //
32 | //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
33 | //通过使用 "*",如下所示:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/src/Jlion.Process.Client/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace Jlion.Process.Client.Properties
12 | {
13 |
14 |
15 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
16 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
17 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
18 | {
19 |
20 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
21 |
22 | public static Settings Default
23 | {
24 | get
25 | {
26 | return defaultInstance;
27 | }
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/Jlion.Process.Client/Jlion.Process.Client.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 16
4 | VisualStudioVersion = 16.0.29613.14
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jlion.Process.Client", "Jlion.Process.Client.csproj", "{A8013479-21B3-48EB-9CEF-E4BA9BD81CEA}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Release|Any CPU = Release|Any CPU
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {A8013479-21B3-48EB-9CEF-E4BA9BD81CEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15 | {A8013479-21B3-48EB-9CEF-E4BA9BD81CEA}.Debug|Any CPU.Build.0 = Debug|Any CPU
16 | {A8013479-21B3-48EB-9CEF-E4BA9BD81CEA}.Release|Any CPU.ActiveCfg = Release|Any CPU
17 | {A8013479-21B3-48EB-9CEF-E4BA9BD81CEA}.Release|Any CPU.Build.0 = Release|Any CPU
18 | EndGlobalSection
19 | GlobalSection(SolutionProperties) = preSolution
20 | HideSolutionNode = FALSE
21 | EndGlobalSection
22 | GlobalSection(ExtensibilityGlobals) = postSolution
23 | SolutionGuid = {4DC8EB33-6C9D-4BDD-A2C2-7902762ED0D9}
24 | EndGlobalSection
25 | EndGlobal
26 |
--------------------------------------------------------------------------------
/src/Jlion.Process.Target.Client/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace Jlion.Process.Target.Client.Properties
12 | {
13 |
14 |
15 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
16 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
17 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
18 | {
19 |
20 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
21 |
22 | public static Settings Default
23 | {
24 | get
25 | {
26 | return defaultInstance;
27 | }
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/Jlion.Process.Client/InjectService.cs:
--------------------------------------------------------------------------------
1 | using FastWin32.Diagnostics;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Diagnostics;
5 | using System.Linq;
6 | using System.Text;
7 | using System.Timers;
8 |
9 | namespace Jlion.Process.Client
10 | {
11 | public class InjectService
12 | {
13 | public static string path = AppDomain.CurrentDomain.BaseDirectory + "Jlion.Process.HookCore.dll";
14 | public static string path2 = AppDomain.CurrentDomain.BaseDirectory + "DotNetDetour.dll";
15 |
16 | ///
17 | /// 进程id
18 | ///
19 | public static uint pid = 0;
20 |
21 | ///
22 | /// 启动
23 | ///
24 | public static void Start()
25 | {
26 | Inject();
27 | }
28 |
29 |
30 | #region 私有方法
31 | private static void Inject()
32 | {
33 | try
34 | {
35 | //Injector.InjectManaged(pid, path2, "Jlion.Process.HookCore", "Start", "ss", out int returnValue);
36 | Injector.InjectManaged(pid, path, "Jlion.Process.HookCore.HookService", "Start", "", out int returnValue2);
37 | }
38 | catch (Exception ex)
39 | {
40 | }
41 | }
42 |
43 | #endregion
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/src/Jlion.Process.Target.Client/MainWindow.xaml.cs:
--------------------------------------------------------------------------------
1 | //using Jlion.Process.Target.ClientCore;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Windows;
7 | using System.Windows.Controls;
8 | using System.Windows.Data;
9 | using System.Windows.Documents;
10 | using System.Windows.Input;
11 | using System.Windows.Media;
12 | using System.Windows.Media.Imaging;
13 | using System.Windows.Navigation;
14 | using System.Windows.Shapes;
15 |
16 | namespace Jlion.Process.Target.Client
17 | {
18 | ///
19 | /// MainWindow.xaml 的交互逻辑
20 | ///
21 | public partial class MainWindow : Window
22 | {
23 | public MainWindow()
24 | {
25 | InitializeComponent();
26 | //HookService.Start("");
27 | }
28 |
29 | private void btnInfo_Click(object sender, RoutedEventArgs e)
30 | {
31 | var service = new ProcessService();
32 | this.txtInfo.Text = service.GetProcessInfo();
33 | }
34 |
35 | private void btnComplateInfo_Click(object sender, RoutedEventArgs e)
36 | {
37 | var service = new ProcessService();
38 | var response = service.GetProcessInfo(new Jlion.Process.Target.Client.Model.ProcessRequest() { Version = "v-Demo 1.0 版本" });
39 | this.txtInfo.Text = response.Name + response.Version;
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/Jlion.Process.HookCore/HookService/ProcessHookService.cs:
--------------------------------------------------------------------------------
1 | using DotNetDetour;
2 | using Jlion.Process.HookCore.Model;
3 | using Newtonsoft.Json;
4 | using System;
5 | using System.Collections.Generic;
6 | using System.Linq;
7 | using System.Text;
8 |
9 | namespace Jlion.Process.HookCore
10 | {
11 | public class ProcessHookService : IMethodHook
12 | {
13 | [HookMethod("Jlion.Process.Target.Client.ProcessService", null, null)]
14 | public string GetProcessInfo()
15 | {
16 | TextHelper.LogInfo($"这是Jlion.Process.HookCore.HookService dll. 改写TargetClient 客户端 的GetProcessInfo 方法后得到的结果");
17 | return "这是Jlion.Process.HookCore.HookService dll. 改写TargetClient 客户端 的GetProcessInfo 方法后得到的结果";
18 | }
19 |
20 | [OriginalMethod]
21 | public string GetProcessInfo_Original()
22 | {
23 | return null;
24 | }
25 |
26 | [HookMethod("Jlion.Process.Target.Client.ProcessService", null, null)]
27 | public object GetProcessInfo([RememberType("Jlion.Process.Target.Client.Model.ProcessRequest", false)] object request)
28 | {
29 | var json = JsonConvert.SerializeObject(request);
30 | TextHelper.LogInfo($"json:{json}");
31 |
32 | var name = "这是Jlion.Process.HookCore.HookService dll. 改写TargetClient 客户端的GetProcessInfo(obj)后得到的结果";
33 | return new ProcessResponse()
34 | {
35 | Name = name,
36 | Version = "改写的dll 版本"
37 | };
38 | }
39 |
40 | [OriginalMethod]
41 | public object GetProcessInfo_Original([RememberType("Jlion.Process.Target.Client.Model.ProcessRequest", false)] object request)
42 | {
43 | return null;
44 | }
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/src/Jlion.Process.Client/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Resources;
3 | using System.Runtime.CompilerServices;
4 | using System.Runtime.InteropServices;
5 | using System.Windows;
6 |
7 | // 有关程序集的一般信息由以下
8 | // 控制。更改这些特性值可修改
9 | // 与程序集关联的信息。
10 | [assembly: AssemblyTitle("Jlion.Process.Client")]
11 | [assembly: AssemblyDescription("")]
12 | [assembly: AssemblyConfiguration("")]
13 | [assembly: AssemblyCompany("")]
14 | [assembly: AssemblyProduct("Jlion.Process.Client")]
15 | [assembly: AssemblyCopyright("Copyright © 2020")]
16 | [assembly: AssemblyTrademark("")]
17 | [assembly: AssemblyCulture("")]
18 |
19 | // 将 ComVisible 设置为 false 会使此程序集中的类型
20 | //对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
21 | //请将此类型的 ComVisible 特性设置为 true。
22 | [assembly: ComVisible(false)]
23 |
24 | //若要开始生成可本地化的应用程序,请设置
25 | //.csproj 文件中的 CultureYouAreCodingWith
26 | //例如,如果您在源文件中使用的是美国英语,
27 | //使用的是美国英语,请将 设置为 en-US。 然后取消
28 | //对以下 NeutralResourceLanguage 特性的注释。 更新
29 | //以下行中的“en-US”以匹配项目文件中的 UICulture 设置。
30 |
31 | //[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
32 |
33 |
34 | [assembly: ThemeInfo(
35 | ResourceDictionaryLocation.None, //主题特定资源词典所处位置
36 | //(未在页面中找到资源时使用,
37 | //或应用程序资源字典中找到时使用)
38 | ResourceDictionaryLocation.SourceAssembly //常规资源词典所处位置
39 | //(未在页面中找到资源时使用,
40 | //、应用程序或任何主题专用资源字典中找到时使用)
41 | )]
42 |
43 |
44 | // 程序集的版本信息由下列四个值组成:
45 | //
46 | // 主版本
47 | // 次版本
48 | // 生成号
49 | // 修订号
50 | //
51 | //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
52 | //通过使用 "*",如下所示:
53 | // [assembly: AssemblyVersion("1.0.*")]
54 | [assembly: AssemblyVersion("1.0.0.0")]
55 | [assembly: AssemblyFileVersion("1.0.0.0")]
56 |
--------------------------------------------------------------------------------
/src/Jlion.Process.Target.Client/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Resources;
3 | using System.Runtime.CompilerServices;
4 | using System.Runtime.InteropServices;
5 | using System.Windows;
6 |
7 | // 有关程序集的一般信息由以下
8 | // 控制。更改这些特性值可修改
9 | // 与程序集关联的信息。
10 | [assembly: AssemblyTitle("Jlion.Process.Target.Client")]
11 | [assembly: AssemblyDescription("")]
12 | [assembly: AssemblyConfiguration("")]
13 | [assembly: AssemblyCompany("")]
14 | [assembly: AssemblyProduct("Jlion.Process.Target.Client")]
15 | [assembly: AssemblyCopyright("Copyright © 2020")]
16 | [assembly: AssemblyTrademark("")]
17 | [assembly: AssemblyCulture("")]
18 |
19 | // 将 ComVisible 设置为 false 会使此程序集中的类型
20 | //对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
21 | //请将此类型的 ComVisible 特性设置为 true。
22 | [assembly: ComVisible(false)]
23 |
24 | //若要开始生成可本地化的应用程序,请设置
25 | //.csproj 文件中的 CultureYouAreCodingWith
26 | //例如,如果您在源文件中使用的是美国英语,
27 | //使用的是美国英语,请将 设置为 en-US。 然后取消
28 | //对以下 NeutralResourceLanguage 特性的注释。 更新
29 | //以下行中的“en-US”以匹配项目文件中的 UICulture 设置。
30 |
31 | //[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
32 |
33 |
34 | [assembly: ThemeInfo(
35 | ResourceDictionaryLocation.None, //主题特定资源词典所处位置
36 | //(未在页面中找到资源时使用,
37 | //或应用程序资源字典中找到时使用)
38 | ResourceDictionaryLocation.SourceAssembly //常规资源词典所处位置
39 | //(未在页面中找到资源时使用,
40 | //、应用程序或任何主题专用资源字典中找到时使用)
41 | )]
42 |
43 |
44 | // 程序集的版本信息由下列四个值组成:
45 | //
46 | // 主版本
47 | // 次版本
48 | // 生成号
49 | // 修订号
50 | //
51 | //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
52 | //通过使用 "*",如下所示:
53 | // [assembly: AssemblyVersion("1.0.*")]
54 | [assembly: AssemblyVersion("1.0.0.0")]
55 | [assembly: AssemblyFileVersion("1.0.0.0")]
56 |
--------------------------------------------------------------------------------
/Jlion.Process.Client.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 16
4 | VisualStudioVersion = 16.0.29613.14
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jlion.Process.Client", "src\Jlion.Process.Client\Jlion.Process.Client.csproj", "{A8013479-21B3-48EB-9CEF-E4BA9BD81CEA}"
7 | EndProject
8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jlion.Process.HookCore", "src\Jlion.Process.HookCore\Jlion.Process.HookCore.csproj", "{38164B4C-3D06-4C11-B928-CEF0BEB41785}"
9 | EndProject
10 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jlion.Process.Target.Client", "src\Jlion.Process.Target.Client\Jlion.Process.Target.Client.csproj", "{2C15B074-E849-4EE8-9C30-29E4AB17776B}"
11 | EndProject
12 | Global
13 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
14 | Debug|Any CPU = Debug|Any CPU
15 | Release|Any CPU = Release|Any CPU
16 | EndGlobalSection
17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
18 | {A8013479-21B3-48EB-9CEF-E4BA9BD81CEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
19 | {A8013479-21B3-48EB-9CEF-E4BA9BD81CEA}.Debug|Any CPU.Build.0 = Debug|Any CPU
20 | {A8013479-21B3-48EB-9CEF-E4BA9BD81CEA}.Release|Any CPU.ActiveCfg = Release|Any CPU
21 | {A8013479-21B3-48EB-9CEF-E4BA9BD81CEA}.Release|Any CPU.Build.0 = Release|Any CPU
22 | {38164B4C-3D06-4C11-B928-CEF0BEB41785}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
23 | {38164B4C-3D06-4C11-B928-CEF0BEB41785}.Debug|Any CPU.Build.0 = Debug|Any CPU
24 | {38164B4C-3D06-4C11-B928-CEF0BEB41785}.Release|Any CPU.ActiveCfg = Release|Any CPU
25 | {38164B4C-3D06-4C11-B928-CEF0BEB41785}.Release|Any CPU.Build.0 = Release|Any CPU
26 | {2C15B074-E849-4EE8-9C30-29E4AB17776B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
27 | {2C15B074-E849-4EE8-9C30-29E4AB17776B}.Debug|Any CPU.Build.0 = Debug|Any CPU
28 | {2C15B074-E849-4EE8-9C30-29E4AB17776B}.Release|Any CPU.ActiveCfg = Release|Any CPU
29 | {2C15B074-E849-4EE8-9C30-29E4AB17776B}.Release|Any CPU.Build.0 = Release|Any CPU
30 | EndGlobalSection
31 | GlobalSection(SolutionProperties) = preSolution
32 | HideSolutionNode = FALSE
33 | EndGlobalSection
34 | GlobalSection(ExtensibilityGlobals) = postSolution
35 | SolutionGuid = {4DC8EB33-6C9D-4BDD-A2C2-7902762ED0D9}
36 | EndGlobalSection
37 | EndGlobal
38 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Set default behavior to automatically normalize line endings.
3 | ###############################################################################
4 | * text=auto
5 |
6 | ###############################################################################
7 | # Set default behavior for command prompt diff.
8 | #
9 | # This is need for earlier builds of msysgit that does not have it on by
10 | # default for csharp files.
11 | # Note: This is only used by command line
12 | ###############################################################################
13 | #*.cs diff=csharp
14 |
15 | ###############################################################################
16 | # Set the merge driver for project and solution files
17 | #
18 | # Merging from the command prompt will add diff markers to the files if there
19 | # are conflicts (Merging from VS is not affected by the settings below, in VS
20 | # the diff markers are never inserted). Diff markers may cause the following
21 | # file extensions to fail to load in VS. An alternative would be to treat
22 | # these files as binary and thus will always conflict and require user
23 | # intervention with every merge. To do so, just uncomment the entries below
24 | ###############################################################################
25 | #*.sln merge=binary
26 | #*.csproj merge=binary
27 | #*.vbproj merge=binary
28 | #*.vcxproj merge=binary
29 | #*.vcproj merge=binary
30 | #*.dbproj merge=binary
31 | #*.fsproj merge=binary
32 | #*.lsproj merge=binary
33 | #*.wixproj merge=binary
34 | #*.modelproj merge=binary
35 | #*.sqlproj merge=binary
36 | #*.wwaproj merge=binary
37 |
38 | ###############################################################################
39 | # behavior for image files
40 | #
41 | # image files are treated as binary by default.
42 | ###############################################################################
43 | #*.jpg binary
44 | #*.png binary
45 | #*.gif binary
46 |
47 | ###############################################################################
48 | # diff behavior for common document formats
49 | #
50 | # Convert binary document formats to text before diffing them. This feature
51 | # is only available from the command line. Turn it on by uncommenting the
52 | # entries below.
53 | ###############################################################################
54 | #*.doc diff=astextplain
55 | #*.DOC diff=astextplain
56 | #*.docx diff=astextplain
57 | #*.DOCX diff=astextplain
58 | #*.dot diff=astextplain
59 | #*.DOT diff=astextplain
60 | #*.pdf diff=astextplain
61 | #*.PDF diff=astextplain
62 | #*.rtf diff=astextplain
63 | #*.RTF diff=astextplain
64 |
--------------------------------------------------------------------------------
/src/Jlion.Process.Client/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // 此代码由工具生成。
4 | // 运行时版本: 4.0.30319.42000
5 | //
6 | // 对此文件的更改可能导致不正确的行为,如果
7 | // 重新生成代码,则所做更改将丢失。
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace Jlion.Process.Client.Properties
12 | {
13 |
14 |
15 | ///
16 | /// 强类型资源类,用于查找本地化字符串等。
17 | ///
18 | // 此类是由 StronglyTypedResourceBuilder
19 | // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
20 | // 若要添加或删除成员,请编辑 .ResX 文件,然后重新运行 ResGen
21 | // (以 /str 作为命令选项),或重新生成 VS 项目。
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources
26 | {
27 |
28 | private static global::System.Resources.ResourceManager resourceMan;
29 |
30 | private static global::System.Globalization.CultureInfo resourceCulture;
31 |
32 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
33 | internal Resources()
34 | {
35 | }
36 |
37 | ///
38 | /// 返回此类使用的缓存 ResourceManager 实例。
39 | ///
40 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
41 | internal static global::System.Resources.ResourceManager ResourceManager
42 | {
43 | get
44 | {
45 | if ((resourceMan == null))
46 | {
47 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Jlion.Process.Client.Properties.Resources", typeof(Resources).Assembly);
48 | resourceMan = temp;
49 | }
50 | return resourceMan;
51 | }
52 | }
53 |
54 | ///
55 | /// 覆盖当前线程的 CurrentUICulture 属性
56 | /// 使用此强类型的资源类的资源查找。
57 | ///
58 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
59 | internal static global::System.Globalization.CultureInfo Culture
60 | {
61 | get
62 | {
63 | return resourceCulture;
64 | }
65 | set
66 | {
67 | resourceCulture = value;
68 | }
69 | }
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/src/Jlion.Process.Target.Client/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // 此代码由工具生成。
4 | // 运行时版本: 4.0.30319.42000
5 | //
6 | // 对此文件的更改可能导致不正确的行为,如果
7 | // 重新生成代码,则所做更改将丢失。
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace Jlion.Process.Target.Client.Properties
12 | {
13 |
14 |
15 | ///
16 | /// 强类型资源类,用于查找本地化字符串等。
17 | ///
18 | // 此类是由 StronglyTypedResourceBuilder
19 | // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
20 | // 若要添加或删除成员,请编辑 .ResX 文件,然后重新运行 ResGen
21 | // (以 /str 作为命令选项),或重新生成 VS 项目。
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources
26 | {
27 |
28 | private static global::System.Resources.ResourceManager resourceMan;
29 |
30 | private static global::System.Globalization.CultureInfo resourceCulture;
31 |
32 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
33 | internal Resources()
34 | {
35 | }
36 |
37 | ///
38 | /// 返回此类使用的缓存 ResourceManager 实例。
39 | ///
40 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
41 | internal static global::System.Resources.ResourceManager ResourceManager
42 | {
43 | get
44 | {
45 | if ((resourceMan == null))
46 | {
47 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Jlion.Process.Target.Client.Properties.Resources", typeof(Resources).Assembly);
48 | resourceMan = temp;
49 | }
50 | return resourceMan;
51 | }
52 | }
53 |
54 | ///
55 | /// 覆盖当前线程的 CurrentUICulture 属性
56 | /// 使用此强类型的资源类的资源查找。
57 | ///
58 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
59 | internal static global::System.Globalization.CultureInfo Culture
60 | {
61 | get
62 | {
63 | return resourceCulture;
64 | }
65 | set
66 | {
67 | resourceCulture = value;
68 | }
69 | }
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/src/Jlion.Process.HookCore/Jlion.Process.HookCore.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {38164B4C-3D06-4C11-B928-CEF0BEB41785}
8 | Library
9 | Properties
10 | Jlion.Process.HookCore
11 | Jlion.Process.HookCore
12 | v4.0
13 | 512
14 | true
15 |
16 |
17 | true
18 | full
19 | false
20 | bin\Debug\
21 | DEBUG;TRACE
22 | prompt
23 | 4
24 | true
25 |
26 |
27 | pdbonly
28 | true
29 | bin\Release\
30 | TRACE
31 | prompt
32 | 4
33 | true
34 |
35 |
36 |
37 | ..\..\packages\Jlion.DotNetDetour.1.0.4\lib\DotNetDetour.dll
38 |
39 |
40 | ..\..\packages\Newtonsoft.Json.12.0.3\lib\net40\Newtonsoft.Json.dll
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
--------------------------------------------------------------------------------
/src/Jlion.Process.Target.Client/Jlion.Process.Target.Client.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {2C15B074-E849-4EE8-9C30-29E4AB17776B}
8 | WinExe
9 | Jlion.Process.Target.Client
10 | Jlion.Process.Target.Client
11 | v4.0
12 | 512
13 | {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
14 | 4
15 | true
16 |
17 |
18 | AnyCPU
19 | true
20 | full
21 | false
22 | bin\Debug\
23 | DEBUG;TRACE
24 | prompt
25 | 4
26 |
27 |
28 | AnyCPU
29 | pdbonly
30 | true
31 | bin\Release\
32 | TRACE
33 | prompt
34 | 4
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 | 4.0
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 | MSBuild:Compile
54 |
55 |
56 |
57 |
58 |
59 | MSBuild:Compile
60 | Designer
61 |
62 |
63 | App.xaml
64 | Code
65 |
66 |
67 | MainWindow.xaml
68 | Code
69 |
70 |
71 |
72 |
73 | Code
74 |
75 |
76 | True
77 | True
78 | Resources.resx
79 |
80 |
81 | True
82 | Settings.settings
83 | True
84 |
85 |
86 | ResXFileCodeGenerator
87 | Resources.Designer.cs
88 |
89 |
90 | SettingsSingleFileGenerator
91 | Settings.Designer.cs
92 |
93 |
94 |
95 |
96 |
97 |
98 |
--------------------------------------------------------------------------------
/src/Jlion.Process.Client/Jlion.Process.Client.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {A8013479-21B3-48EB-9CEF-E4BA9BD81CEA}
8 | WinExe
9 | Jlion.Process.Client
10 | Jlion.Process.Client
11 | v4.0
12 | 512
13 | {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
14 | 4
15 | true
16 |
17 |
18 | AnyCPU
19 | true
20 | full
21 | false
22 | bin\Debug\
23 | DEBUG;TRACE
24 | prompt
25 | 4
26 |
27 |
28 | AnyCPU
29 | pdbonly
30 | true
31 | bin\Release\
32 | TRACE
33 | prompt
34 | 4
35 |
36 |
37 |
38 | ..\..\packages\FastWin32.1.0.0\lib\FastWin32.dll
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | 4.0
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 | MSBuild:Compile
57 | Designer
58 |
59 |
60 | MSBuild:Compile
61 | Designer
62 |
63 |
64 | App.xaml
65 | Code
66 |
67 |
68 |
69 | MainWindow.xaml
70 | Code
71 |
72 |
73 |
74 |
75 | Code
76 |
77 |
78 | True
79 | True
80 | Resources.resx
81 |
82 |
83 | True
84 | Settings.settings
85 | True
86 |
87 |
88 | ResXFileCodeGenerator
89 | Resources.Designer.cs
90 |
91 |
92 |
93 | SettingsSingleFileGenerator
94 | Settings.Designer.cs
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 | {38164b4c-3d06-4c11-b928-cef0beb41785}
103 | Jlion.Process.HookCore
104 |
105 |
106 |
107 |
--------------------------------------------------------------------------------
/src/Jlion.Process.HookCore/DotNetDetour.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | DotNetDetour
5 |
6 |
7 |
8 |
9 | 在当前的程序集中反射创建实例
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 | 在给定的程序集中反射创建实例
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | 在给定的程序集中反射创建实例,并且传入构造函数的参数
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | inline hook,通过修改函数的前5字节指令为jmp target_addr实现
39 |
40 |
41 |
42 |
43 | 将对originalMethod的调用指向原函数
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 | 要hook的目标函数
52 | 用户定义的函数,可以调用原始占位函数来实现对原函数的调用
53 | 原始占位函数
54 |
55 |
56 |
57 | 此接口用于支持Hook初始化时进行回调
58 |
59 |
60 |
61 |
62 | 当前类每成功进行一个Hook的初始化,就会传入被Hook的原始方法(判断方法名称来确定是初始化的哪个方法),这个方法可用于获取方法所在的类(如:非公开类)。
63 | 注意:此方法应当当做静态方法来进行编码。
64 |
65 |
66 |
67 |
68 | 用于计算汇编指令长度,使用的是BlackBone的LDasm.c中的算法,我把他翻译成C#了
69 |
70 |
71 |
72 |
73 | 计算大于等于5字节的最少指令的长度
74 |
75 |
76 |
77 |
78 |
79 |
80 | Hook代理方法
81 |
82 |
83 |
84 |
85 | 目标方法的原始方法
86 |
87 |
88 |
89 |
90 | 安装监视器
91 |
92 |
93 |
94 |
95 | 标记一个方法,使其作为目标方法的替代,这将使.NET框架执行到原始方法时转而执行被此特性标记的方法。
96 |
97 | 如果提供OriginalMethod,OriginalMethod名称应当为“原始目标方法名_Original”,如果使用其他名称,应当设置相应的OriginalMethodName。
98 |
99 |
100 |
101 |
102 | 标记要hook的目标类型中的指定方法。
103 | 类型名称为完全限定名,如果是泛型可以提供type`1[[System.Int32]]这种完整形式。
104 | 方法名称targetMethodName可以不提供,默认取当前方法名称。
105 | 如果提供OriginalMethod时,OriginalMethod名称应当为“原始目标方法名_Original”,如果使用其他名称,应当设置OriginalMethodName。
106 |
107 |
108 |
109 |
110 | 标记要hook的目标类型中的指定方法。
111 | 方法名称targetMethodName可以不提供,默认取当前方法名称。
112 | 如果提供OriginalMethod时,OriginalMethod名称应当为“原始目标方法名_Original”,如果使用其他名称,应当设置OriginalMethod。
113 |
114 |
115 |
116 |
117 | 标记一个方法,使得该方法代表原始方法,从而可以被用户代码调用。
118 | 此方法命名为 原始目标方法名_Original;如果使用其他名称,在HookMethodAttribute中应当指明。
119 |
120 |
121 |
122 |
123 | 标记函数的泛型参数或私有类型参数。
124 | 私有类型要指明其完全限定名,如:System.Int32、type`1[[System.Int32]]这种完整形式。
125 |
126 |
127 |
128 |
129 |
--------------------------------------------------------------------------------
/src/Jlion.Process.Client/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | text/microsoft-resx
107 |
108 |
109 | 2.0
110 |
111 |
112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
113 |
114 |
115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
--------------------------------------------------------------------------------
/src/Jlion.Process.Target.Client/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | text/microsoft-resx
107 |
108 |
109 | 2.0
110 |
111 |
112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
113 |
114 |
115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 | ##
4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
5 |
6 | # User-specific files
7 | *.rsuser
8 | *.suo
9 | *.user
10 | *.userosscache
11 | *.sln.docstates
12 |
13 | # User-specific files (MonoDevelop/Xamarin Studio)
14 | *.userprefs
15 |
16 | # Build results
17 | [Dd]ebug/
18 | [Dd]ebugPublic/
19 | [Rr]elease/
20 | [Rr]eleases/
21 | x64/
22 | x86/
23 | [Aa][Rr][Mm]/
24 | [Aa][Rr][Mm]64/
25 | bld/
26 | [Bb]in/
27 | [Oo]bj/
28 | [Ll]og/
29 |
30 | # Visual Studio 2015/2017 cache/options directory
31 | .vs/
32 | # Uncomment if you have tasks that create the project's static files in wwwroot
33 | #wwwroot/
34 |
35 | # Visual Studio 2017 auto generated files
36 | Generated\ Files/
37 |
38 | # MSTest test Results
39 | [Tt]est[Rr]esult*/
40 | [Bb]uild[Ll]og.*
41 |
42 | # NUNIT
43 | *.VisualState.xml
44 | TestResult.xml
45 |
46 | # Build Results of an ATL Project
47 | [Dd]ebugPS/
48 | [Rr]eleasePS/
49 | dlldata.c
50 |
51 | # Benchmark Results
52 | BenchmarkDotNet.Artifacts/
53 |
54 | # .NET Core
55 | project.lock.json
56 | project.fragment.lock.json
57 | artifacts/
58 |
59 | # StyleCop
60 | StyleCopReport.xml
61 |
62 | # Files built by Visual Studio
63 | *_i.c
64 | *_p.c
65 | *_h.h
66 | *.ilk
67 | *.meta
68 | *.obj
69 | *.iobj
70 | *.pch
71 | *.pdb
72 | *.ipdb
73 | *.pgc
74 | *.pgd
75 | *.rsp
76 | *.sbr
77 | *.tlb
78 | *.tli
79 | *.tlh
80 | *.tmp
81 | *.tmp_proj
82 | *_wpftmp.csproj
83 | *.log
84 | *.vspscc
85 | *.vssscc
86 | .builds
87 | *.pidb
88 | *.svclog
89 | *.scc
90 |
91 | # Chutzpah Test files
92 | _Chutzpah*
93 |
94 | # Visual C++ cache files
95 | ipch/
96 | *.aps
97 | *.ncb
98 | *.opendb
99 | *.opensdf
100 | *.sdf
101 | *.cachefile
102 | *.VC.db
103 | *.VC.VC.opendb
104 |
105 | # Visual Studio profiler
106 | *.psess
107 | *.vsp
108 | *.vspx
109 | *.sap
110 |
111 | # Visual Studio Trace Files
112 | *.e2e
113 |
114 | # TFS 2012 Local Workspace
115 | $tf/
116 |
117 | # Guidance Automation Toolkit
118 | *.gpState
119 |
120 | # ReSharper is a .NET coding add-in
121 | _ReSharper*/
122 | *.[Rr]e[Ss]harper
123 | *.DotSettings.user
124 |
125 | # JustCode is a .NET coding add-in
126 | .JustCode
127 |
128 | # TeamCity is a build add-in
129 | _TeamCity*
130 |
131 | # DotCover is a Code Coverage Tool
132 | *.dotCover
133 |
134 | # AxoCover is a Code Coverage Tool
135 | .axoCover/*
136 | !.axoCover/settings.json
137 |
138 | # Visual Studio code coverage results
139 | *.coverage
140 | *.coveragexml
141 |
142 | # NCrunch
143 | _NCrunch_*
144 | .*crunch*.local.xml
145 | nCrunchTemp_*
146 |
147 | # MightyMoose
148 | *.mm.*
149 | AutoTest.Net/
150 |
151 | # Web workbench (sass)
152 | .sass-cache/
153 |
154 | # Installshield output folder
155 | [Ee]xpress/
156 |
157 | # DocProject is a documentation generator add-in
158 | DocProject/buildhelp/
159 | DocProject/Help/*.HxT
160 | DocProject/Help/*.HxC
161 | DocProject/Help/*.hhc
162 | DocProject/Help/*.hhk
163 | DocProject/Help/*.hhp
164 | DocProject/Help/Html2
165 | DocProject/Help/html
166 |
167 | # Click-Once directory
168 | publish/
169 |
170 | # Publish Web Output
171 | *.[Pp]ublish.xml
172 | *.azurePubxml
173 | # Note: Comment the next line if you want to checkin your web deploy settings,
174 | # but database connection strings (with potential passwords) will be unencrypted
175 | *.pubxml
176 | *.publishproj
177 |
178 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
179 | # checkin your Azure Web App publish settings, but sensitive information contained
180 | # in these scripts will be unencrypted
181 | PublishScripts/
182 |
183 | # NuGet Packages
184 | *.nupkg
185 | # The packages folder can be ignored because of Package Restore
186 | **/[Pp]ackages/*
187 | # except build/, which is used as an MSBuild target.
188 | !**/[Pp]ackages/build/
189 | # Uncomment if necessary however generally it will be regenerated when needed
190 | #!**/[Pp]ackages/repositories.config
191 | # NuGet v3's project.json files produces more ignorable files
192 | *.nuget.props
193 | *.nuget.targets
194 |
195 | # Microsoft Azure Build Output
196 | csx/
197 | *.build.csdef
198 |
199 | # Microsoft Azure Emulator
200 | ecf/
201 | rcf/
202 |
203 | # Windows Store app package directories and files
204 | AppPackages/
205 | BundleArtifacts/
206 | Package.StoreAssociation.xml
207 | _pkginfo.txt
208 | *.appx
209 |
210 | # Visual Studio cache files
211 | # files ending in .cache can be ignored
212 | *.[Cc]ache
213 | # but keep track of directories ending in .cache
214 | !?*.[Cc]ache/
215 |
216 | # Others
217 | ClientBin/
218 | ~$*
219 | *~
220 | *.dbmdl
221 | *.dbproj.schemaview
222 | *.jfm
223 | *.pfx
224 | *.publishsettings
225 | orleans.codegen.cs
226 |
227 | # Including strong name files can present a security risk
228 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
229 | #*.snk
230 |
231 | # Since there are multiple workflows, uncomment next line to ignore bower_components
232 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
233 | #bower_components/
234 |
235 | # RIA/Silverlight projects
236 | Generated_Code/
237 |
238 | # Backup & report files from converting an old project file
239 | # to a newer Visual Studio version. Backup files are not needed,
240 | # because we have git ;-)
241 | _UpgradeReport_Files/
242 | Backup*/
243 | UpgradeLog*.XML
244 | UpgradeLog*.htm
245 | ServiceFabricBackup/
246 | *.rptproj.bak
247 |
248 | # SQL Server files
249 | *.mdf
250 | *.ldf
251 | *.ndf
252 |
253 | # Business Intelligence projects
254 | *.rdl.data
255 | *.bim.layout
256 | *.bim_*.settings
257 | *.rptproj.rsuser
258 | *- Backup*.rdl
259 |
260 | # Microsoft Fakes
261 | FakesAssemblies/
262 |
263 | # GhostDoc plugin setting file
264 | *.GhostDoc.xml
265 |
266 | # Node.js Tools for Visual Studio
267 | .ntvs_analysis.dat
268 | node_modules/
269 |
270 | # Visual Studio 6 build log
271 | *.plg
272 |
273 | # Visual Studio 6 workspace options file
274 | *.opt
275 |
276 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
277 | *.vbw
278 |
279 | # Visual Studio LightSwitch build output
280 | **/*.HTMLClient/GeneratedArtifacts
281 | **/*.DesktopClient/GeneratedArtifacts
282 | **/*.DesktopClient/ModelManifest.xml
283 | **/*.Server/GeneratedArtifacts
284 | **/*.Server/ModelManifest.xml
285 | _Pvt_Extensions
286 |
287 | # Paket dependency manager
288 | .paket/paket.exe
289 | paket-files/
290 |
291 | # FAKE - F# Make
292 | .fake/
293 |
294 | # JetBrains Rider
295 | .idea/
296 | *.sln.iml
297 |
298 | # CodeRush personal settings
299 | .cr/personal
300 |
301 | # Python Tools for Visual Studio (PTVS)
302 | __pycache__/
303 | *.pyc
304 |
305 | # Cake - Uncomment if you are using it
306 | # tools/**
307 | # !tools/packages.config
308 |
309 | # Tabs Studio
310 | *.tss
311 |
312 | # Telerik's JustMock configuration file
313 | *.jmconfig
314 |
315 | # BizTalk build output
316 | *.btp.cs
317 | *.btm.cs
318 | *.odx.cs
319 | *.xsd.cs
320 |
321 | # OpenCover UI analysis results
322 | OpenCover/
323 |
324 | # Azure Stream Analytics local run output
325 | ASALocalRun/
326 |
327 | # MSBuild Binary and Structured Log
328 | *.binlog
329 |
330 | # NVidia Nsight GPU debugger configuration file
331 | *.nvuser
332 |
333 | # MFractors (Xamarin productivity tool) working folder
334 | .mfractor/
335 |
336 | # Local History for Visual Studio
337 | .localhistory/
338 |
339 | # BeatPulse healthcheck temp database
340 | healthchecksdb
341 | /Jlion.Process.Target.ClientCore
342 |
--------------------------------------------------------------------------------
/src/Jlion.Process.HookCore/TextHelper.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.ComponentModel;
3 | using System.IO;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace Jlion.Process.HookCore
8 | {
9 | public class TextHelper
10 | {
11 | private static int dayCount = 0;
12 | private static readonly double maxSize = 50;
13 | private static readonly object locker = new object();
14 |
15 | ///
16 | /// 写入日志
17 | ///
18 | ///
19 | ///
20 | ///
21 | ///
22 | public static void Write(string message, Exception ex = null, bool toFiles = true, LogEnumsType logEnumsType = LogEnumsType.LogsOption)
23 | {
24 | try
25 | {
26 | if (string.IsNullOrEmpty(message))
27 | return;
28 |
29 | message = $"===============================================\r\n" +
30 | $"日志时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff")}\r\n" +
31 | $"日志内容:{message}\r\n";
32 | if (ex != null)
33 | {
34 | message += $"异常内容:{ex.Message}\r\n";
35 | if (!string.IsNullOrEmpty(ex.StackTrace))
36 | message += $"堆栈内容:{ex.StackTrace}\r\n";
37 | if (!string.IsNullOrEmpty(ex.InnerException?.StackTrace ?? ""))
38 | message += $"Inner 堆栈内容 内容:{ex.InnerException.StackTrace}";
39 | }
40 | message += $"===============================================\r\n";
41 |
42 | if (toFiles)
43 | {
44 | var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"logs/aa/{DateTime.Now.ToString("yyyy-MM-dd")}.txt");
45 | message += "\r\n";
46 | DoWrite(filePath, message);
47 | }
48 | }
49 | catch { }
50 | }
51 |
52 | ///
53 | /// 写入日志
54 | ///
55 | ///
56 | ///
57 | ///
58 | ///
59 | public static Task WriteAsync(string message, Exception ex = null, bool toFiles = true, LogEnumsType logEnumsType = LogEnumsType.LogsOption)
60 | {
61 | return Task.Factory.StartNew(() =>
62 | {
63 | try
64 | {
65 | if (string.IsNullOrEmpty(message))
66 | return;
67 |
68 | message = $"===============================================\r\n" +
69 | $"日志时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff")}\r\n" +
70 | $"日志内容:{message}\r\n";
71 | if (ex != null)
72 | {
73 | message += $"异常内容:{ex.Message}\r\n";
74 | if (!string.IsNullOrEmpty(ex.StackTrace))
75 | message += $"堆栈内容:{ex.StackTrace}\r\n";
76 | }
77 | message += $"===============================================\r\n";
78 |
79 | //Console.WriteLine(message);
80 |
81 | if (toFiles)
82 | {
83 | var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"logs/aa/{DateTime.Now.ToString("yyyy-MM-dd")}.txt");
84 | message += "\r\n";
85 | DoWrite(filePath, message);
86 | }
87 | }
88 | catch { }
89 | });
90 | }
91 |
92 | /////
93 | ///// 写入日志
94 | /////
95 | /////
96 | /////
97 | /////
98 | //public static void Write(string message, Exception ex = null, bool toFiles = true)
99 | //{
100 | // WriteAsync(message, ex, toFiles);
101 | //}
102 | public static Task ErrorAsync(string message, Exception ex = null, bool toFiles = true)
103 | {
104 | return WriteAsync(message, ex, toFiles, LogEnumsType.ErrorLogs);
105 | }
106 |
107 | public static void Error(string message, Exception ex = null, bool toFiles = true)
108 | {
109 | Write(message, ex, toFiles, LogEnumsType.ErrorLogs);
110 | }
111 |
112 | public static Task LogInfoAsync(string message, bool toFiles = true, LogEnumsType logEnumsType = LogEnumsType.LogsDetail)
113 | {
114 | return WriteAsync(message, toFiles: toFiles, logEnumsType: logEnumsType);
115 | }
116 |
117 | public static void LogInfo(string message, bool toFiles = true, LogEnumsType logEnumsType = LogEnumsType.LogsDetail)
118 | {
119 | Write(message, toFiles: toFiles, logEnumsType: logEnumsType);
120 | }
121 |
122 | //最大 50M
123 | ///
124 | /// 写入文本文件
125 | ///
126 | /// 文件路径
127 | ///
128 | private static void DoWrite(string filePath, string message)
129 | {
130 | var gb2312 = Encoding.GetEncoding("utf-8");//设置一下编码格式
131 | if (!File.Exists(filePath))
132 | {
133 | var dir = Path.GetDirectoryName(filePath);
134 | if (!Directory.Exists(dir))
135 | Directory.CreateDirectory(dir);
136 |
137 | var swCreate = new StreamWriter(filePath, false, gb2312);
138 | swCreate.Flush();
139 | swCreate.Close();
140 | swCreate.Dispose();
141 | }
142 | else
143 | {
144 | var fileInfo = new FileInfo(filePath);
145 | if (fileInfo.Length > maxSize * 1024 * 1024)
146 | {
147 | filePath = fileInfo.DirectoryName + $"/{DateTime.Now.ToString("yyyy-MM-dd")}_{dayCount}.txt";
148 | if (!File.Exists(filePath))
149 | {
150 | DoWrite(filePath, message);
151 | return;
152 | }
153 |
154 | fileInfo = new FileInfo(filePath);
155 | if (fileInfo.Length > maxSize * 1024 * 1024)
156 | {
157 | filePath = fileInfo.DirectoryName + $"/{DateTime.Now.ToString("yyyy-MM-dd")}_{++dayCount}.txt";
158 | DoWrite(filePath, message);
159 | return;
160 | }
161 | }
162 | }
163 |
164 | lock (locker)
165 | {
166 | using (var sw = File.AppendText(filePath))
167 | {
168 | sw.WriteLine(message);
169 | }
170 | }
171 | }
172 |
173 | ///
174 | /// 日志类型
175 | ///
176 | public enum LogEnumsType
177 | {
178 | ///
179 | /// 读取金额日志
180 | ///
181 | [Description("logsRead")]
182 | ReadLogs = 0,
183 |
184 | ///
185 | /// 错误等相关日志
186 | ///
187 | [Description("logsError")]
188 | ErrorLogs = 1,
189 |
190 | ///
191 | /// 操作日志
192 | ///
193 | [Description("logsOption")]
194 | LogsOption = 2,
195 |
196 | ///
197 | /// 支付日志
198 | ///
199 | [Description("logsPay")]
200 | LogsPay = 3,
201 |
202 | ///
203 | /// Aop 拦截日志
204 | ///
205 | LogsDetail = 4,
206 | }
207 | }
208 | }
209 |
--------------------------------------------------------------------------------
/src/Jlion.Process.Client/FastWin32.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | FastWin32
5 |
6 |
7 |
8 |
9 | 汇编指令,机器码对应表
10 |
11 |
12 |
13 |
14 | 汇编指令
15 |
16 |
17 |
18 |
19 | 机器码
20 |
21 |
22 |
23 |
24 | 实例化对应表
25 |
26 | 汇编指令
27 |
28 |
29 |
30 | 更新对应的机器码,设置为,转换为只读模式
31 |
32 |
33 |
34 |
35 | 返回表示当前对象的字符串。
36 |
37 |
38 |
39 |
40 |
41 | Asm编译/反编译错误
42 |
43 |
44 |
45 |
46 | 用指定的错误消息创建新实例
47 |
48 | 描述错误的消息
49 |
50 |
51 |
52 | 汇编器,提供编译与反编译支持
53 |
54 |
55 |
56 |
57 | 汇编器路径
58 |
59 |
60 |
61 |
62 | 反汇编器路径
63 |
64 |
65 |
66 |
67 | 汇编器路径
68 |
69 |
70 |
71 |
72 | 反汇编器路径
73 |
74 |
75 |
76 |
77 | 汇编指令转机器码
78 |
79 | 汇编指令
80 | 是否使用64位汇编
81 |
82 |
83 |
84 |
85 | 汇编指令转机器码保留原始数据
86 |
87 | 汇编指令
88 | 是否使用64位汇编
89 |
90 |
91 |
92 |
93 | 获取nasm编译后生成list的Token
94 |
95 | list中的一行
96 |
97 |
98 |
99 |
100 | 获取中所有机器码(相当于将的返回值拼接为一个数组)
101 |
102 | 列表
103 |
104 |
105 |
106 |
107 | 获取中所有机器码数组
108 |
109 | 列表
110 |
111 |
112 |
113 |
114 | 机器码转汇编指令
115 |
116 | 机器码
117 | 是否使用64位汇编
118 |
119 |
120 |
121 |
122 | 机器码转汇编指令保留原始数据
123 |
124 | 机器码
125 | 是否使用64位汇编
126 |
127 |
128 |
129 |
130 | 获取ndisasm反编译后生成list的Token
131 |
132 | list中的一行
133 |
134 |
135 |
136 |
137 | 获取中所有汇编指令
138 |
139 | 列表
140 |
141 |
142 |
143 |
144 | 获取临时文件
145 |
146 |
147 |
148 |
149 |
150 | 将机器码写入内存,返回函数指针。如果执行失败,返回
151 |
152 | 机器码
153 |
154 |
155 |
156 |
157 | 将汇编指令写入内存,返回函数指针。如果执行失败,返回
158 |
159 | 汇编指令
160 | 是否使用64位汇编
161 |
162 |
163 |
164 |
165 | 将机器码写入内存,返回对应的委托。如果执行失败,返回
166 |
167 | 委托
168 | 机器码
169 |
170 |
171 |
172 |
173 | 将机器码写入内存,返回对应的委托。如果执行失败,返回
174 |
175 |
176 | 汇编指令
177 | 是否使用64位汇编
178 |
179 |
180 |
181 |
182 | 注入
183 |
184 |
185 |
186 |
187 | 打开进程(注入使用)
188 |
189 | 进程句柄
190 |
191 |
192 |
193 |
194 | 注入非托管DLL
195 |
196 | 要注入的进程ID
197 | 要注入程序集的路径
198 | 类型名(命名空间+类型名,比如NamespaceA.ClassB)
199 | 方法名(比如MethodC),该方法必须具有此类签名static int MethodName(string),比如private static int InjectingMain(string argument)
200 | 参数,可传入null。
201 |
202 |
203 |
204 |
205 | 注入非托管DLL,并获取被调用方法的返回值(警告:被调用方法返回后才能获取到返回值,方法将一直等待到被调用方法返回。如果仅注入程序集而不需要获取返回值,请使用重载版本)
206 |
207 | 要注入的进程ID
208 | 要注入程序集的路径
209 | 类型名(命名空间+类型名,比如NamespaceA.ClassB)
210 | 方法名(比如MethodC),该方法必须具有此类签名static int MethodName(string),比如private static int InjectingMain(string argument)
211 | 参数,可传入null。
212 | 被调用方法返回的整数值
213 |
214 |
215 |
216 |
217 | 注入非托管DLL
218 |
219 | 进程句柄
220 | 要注入程序集的路径
221 | 类型名(命名空间+类型名,比如NamespaceA.ClassB)
222 | 方法名(比如MethodC),该方法必须具有此类签名static int MethodName(string),比如private static int InjectingMain(string argument)
223 | 参数,可传入null。
224 | 被调用方法返回的整数值
225 | 是否等待返回值
226 |
227 |
228 |
229 |
230 | 注入非托管DLL
231 |
232 | 要注入的进程ID
233 | 要注入DLL的路径
234 |
235 |
236 |
237 |
238 | 注入非托管Dll
239 |
240 | 进程句柄
241 | 要注入的Dll的路径
242 |
243 |
244 |
245 |
246 | 获取系统文件夹路径
247 |
248 | 是否64位
249 |
250 |
251 |
252 |
253 | 写入启动CLR的机器码,返回函数指针
254 |
255 | 进程句柄
256 | CLR版本
257 | 程序集路径(绝对路径)
258 | 类型名
259 | 方法名
260 | 参数(可空,如果非空,长度必须小于2000)
261 |
262 |
263 |
264 |
265 | 获取设置好参数的机器码
266 |
267 | CLR版本
268 | 程序集路径(绝对路径)
269 | 类型名
270 | 方法名
271 | 参数(可空,如果非空,长度必须小于2000)
272 |
273 |
274 |
275 |
276 | 设置启动32位CLR V2的机器码
277 |
278 | 机器码指针
279 | 函数指针
280 | CorBindToRuntimeEx的函数指针
281 |
282 |
283 |
284 | 设置启动32位CLR V4的机器码
285 |
286 | 机器码指针
287 | 函数指针
288 | CLRCreateInstance的函数指针
289 |
290 |
291 |
292 | 设置启动64位CLR V2的机器码
293 |
294 | 机器码指针
295 | 函数指针
296 | CorBindToRuntimeEx的函数指针
297 |
298 |
299 |
300 | 设置启动64位CLR V4的机器码
301 |
302 | 机器码指针
303 | 函数指针
304 | CLRCreateInstance的函数指针
305 |
306 |
307 |
308 | 判断是否为程序集,如果是,输出CLR版本
309 |
310 | 路径
311 | 是否程序集
312 | CLR版本
313 |
314 |
315 |
316 | 获取CLR版本
317 |
318 |
319 |
320 |
321 |
322 |
323 | 获取PE信息
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 | 获取节
332 |
333 |
334 |
335 |
336 |
337 |
338 | 获取RVA对应节
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 | 进程
347 |
348 |
349 |
350 |
351 | 打开进程(内存读+查询)
352 |
353 | 进程ID
354 |
355 |
356 |
357 |
358 | 打开进程(进程挂起/恢复)
359 |
360 | 进程ID
361 |
362 |
363 |
364 |
365 | 通过窗口句柄获取进程ID
366 |
367 |
368 |
369 |
370 |
371 |
372 | 通过线程ID获取进程ID
373 |
374 | 线程ID
375 |
376 |
377 |
378 |
379 | 获取当前进程ID
380 |
381 |
382 |
383 |
384 |
385 | 获取所有进程ID,失败返回null
386 |
387 |
388 |
389 |
390 |
391 | 获取进程名
392 |
393 | 进程ID
394 |
395 |
396 |
397 |
398 | 获取进程名
399 |
400 | 进程句柄
401 |
402 |
403 |
404 |
405 | 获取进程路径
406 |
407 | 进程ID
408 |
409 |
410 |
411 |
412 | 获取进程路径
413 |
414 | 进程句柄
415 |
416 |
417 |
418 |
419 | 判断进程是否为64位进程,返回值为方法是否执行成功
420 |
421 | 进程ID
422 | 是否为64位进程
423 |
424 |
425 |
426 |
427 | 判断进程是否为64位进程,返回值为方法是否执行成功
428 |
429 | 进程句柄
430 | 是否为64位进程
431 |
432 |
433 |
434 |
435 | 暂停进程
436 |
437 | 进程ID
438 |
439 |
440 |
441 |
442 | 暂停进程
443 |
444 | 进程句柄
445 |
446 |
447 |
448 |
449 | 恢复进程
450 |
451 | 进程ID
452 |
453 |
454 |
455 |
456 | 恢复进程
457 |
458 | 进程句柄
459 |
460 |
461 |
462 |
463 | 动态提升进程权限,以管理员模式运行当前进程,如果执行成功当前进程将退出,执行失败无反应
464 |
465 | 主窗口的句柄
466 |
467 |
468 |
469 |
470 | 遍历模块回调方法,要继续遍历,返回true;要停止遍历,返回false
471 |
472 | 模块句柄
473 | 模块名
474 | 模块文件所在路径
475 |
476 |
477 |
478 |
479 | 遍历模块导出函数回调方法,要继续遍历,返回true;要停止遍历,返回false
480 |
481 | 函数指针
482 | 函数名,当函数以序号方式导出时,此参数为null
483 | 函数导出序号
484 |
485 |
486 |
487 |
488 | 模块
489 |
490 |
491 |
492 |
493 | 打开进程(内存读+查询)
494 |
495 | 进程ID
496 |
497 |
498 |
499 |
500 | 获取当前进程主模块句柄
501 |
502 |
503 |
504 |
505 |
506 | 获取当前进程模块句柄,获取失败时返回
507 |
508 | 模块名
509 |
510 |
511 |
512 |
513 | 获取主模块句柄,获取失败时返回
514 |
515 | 进程ID
516 |
517 |
518 |
519 |
520 | 获取模块句柄,获取失败时返回
521 |
522 | 进程ID
523 | 模块名
524 |
525 |
526 |
527 |
528 | 获取模块句柄,获取失败时返回
529 |
530 | 进程句柄
531 | 是否返回第一个模块句柄
532 | 模块名
533 |
534 |
535 |
536 |
537 | 遍历模块,遍历成功返回true,失败返回false(返回值与回调方法的返回值无关)
538 |
539 | 进程ID
540 | 回调方法,不能为空
541 | 是否向回调方法提供模块名,默认为是
542 | 是否向回调方法提供模块文件路径,默认为否
543 |
544 |
545 |
546 |
547 | 获取函数地址
548 |
549 | 模块名
550 | 函数名
551 |
552 |
553 |
554 |
555 | 获取远程进程函数地址
556 |
557 | 进程ID
558 | 模块名
559 | 函数名
560 |
561 |
562 |
563 |
564 | 获取函数地址
565 |
566 | 模块名
567 | 函数名
568 |
569 |
570 |
571 |
572 | 获取远程进程函数地址
573 |
574 | 进程句柄
575 | 模块名
576 | 函数名
577 |
578 |
579 |
580 |
581 | 枚举模块导出函数
582 |
583 | 进程ID
584 | 模块名
585 | 回调函数
586 |
587 |
588 |
589 |
590 | 枚举模块导出函数
591 |
592 | 进程ID
593 | 模块句柄
594 | 回调函数
595 |
596 |
597 |
598 |
599 | 枚举模块导出函数
600 |
601 | 进程句柄
602 | 模块名
603 | 回调函数
604 |
605 |
606 |
607 |
608 | 枚举模块导出函数
609 |
610 | 进程句柄
611 | 模块句柄
612 | 回调函数
613 |
614 |
615 |
616 |
617 | 全局设置
618 |
619 |
620 |
621 |
622 | 确定当前操作系统是否为 64 位操作系统。
623 |
624 |
625 |
626 |
627 | SeDebugPrivilege特权
628 |
629 |
630 |
631 |
632 | 将SeDebugPrivilege特权赋予当前进程
633 |
634 |
635 |
636 |
637 |
638 | 取消当前进程的SeDebugPrivilege特权
639 |
640 |
641 |
642 |
643 |
644 | 挂钩当前进程API
645 |
646 |
647 |
648 |
649 | 杀死函数,让函数不执行任何动作
650 |
651 | 模块名
652 | 函数名
653 |
654 |
655 |
656 |
657 | 杀死方法,让方法不执行任何动作
658 |
659 | 方法信息
660 |
661 |
662 |
663 |
664 | 杀死函数,让函数不执行任何动作
665 |
666 | 函数入口地址
667 |
668 |
669 |
670 |
671 | 挂钩远程进程API
672 |
673 |
674 |
675 |
676 | 内存管理
677 |
678 |
679 |
680 |
681 | 打开进程(内存操作)
682 |
683 | 进程ID
684 |
685 |
686 |
687 |
688 | 所有内存保护选项
689 |
690 |
691 |
692 |
693 | 根据提供选项生成对应的内存保护标识
694 |
695 | 可写
696 | 可执行
697 |
698 |
699 |
700 |
701 | 在当前进程中分配内存(默认可写,不可执行)
702 |
703 | 要分配内存的大小
704 | 分配得到的内存所在地址
705 |
706 |
707 |
708 | 在当前进程中分配内存
709 |
710 | 要分配内存的大小
711 | 可写
712 | 可执行
713 | 分配得到的内存所在地址
714 |
715 |
716 |
717 | 分配内存(默认可写,不可执行)
718 |
719 | 进程ID
720 | 要分配内存的大小
721 | 分配得到的内存所在地址
722 |
723 |
724 |
725 | 分配内存
726 |
727 | 进程ID
728 | 要分配内存的大小
729 | 可写
730 | 可执行
731 | 分配得到的内存所在地址
732 |
733 |
734 |
735 | 在当前进程中分配内存(默认可写,不可执行)
736 |
737 | 要分配内存的大小
738 | 分配得到的内存所在地址
739 |
740 |
741 |
742 | 在当前进程中分配内存
743 |
744 | 要分配内存的大小
745 | 内存保护选项
746 | 分配得到的内存所在地址
747 |
748 |
749 |
750 | 分配内存(默认可写,不可执行)
751 |
752 | 进程句柄
753 | 要分配内存的大小
754 | 分配得到的内存所在地址
755 |
756 |
757 |
758 | 分配内存
759 |
760 | 进程句柄
761 | 要分配内存的大小
762 | 内存保护选项
763 | 分配得到的内存所在地址
764 |
765 |
766 |
767 | 在当前进程中释放内存(MEM_RELEASE)
768 |
769 | 指定释放内存的地址
770 |
771 |
772 |
773 |
774 | 在当前进程中释放内存(MEM_DECOMMIT)
775 |
776 | 指定释放内存的地址
777 | 要释放内存的大小
778 |
779 |
780 |
781 | 释放内存(MEM_RELEASE)
782 |
783 | 进程ID
784 | 指定释放内存的地址
785 |
786 |
787 |
788 |
789 | 释放内存(MEM_DECOMMIT)
790 |
791 | 进程ID
792 | 指定释放内存的地址
793 | 要释放内存的大小
794 |
795 |
796 |
797 | 在当前进程中释放内存(MEM_RELEASE)
798 |
799 | 指定释放内存的地址
800 |
801 |
802 |
803 |
804 | 在当前进程中释放内存(MEM_DECOMMIT)
805 |
806 | 指定释放内存的地址
807 | 要释放内存的大小
808 |
809 |
810 |
811 | 释放内存(MEM_RELEASE)
812 |
813 | 进程句柄
814 | 指定释放内存的地址
815 |
816 |
817 |
818 |
819 | 释放内存(MEM_DECOMMIT)
820 |
821 | 进程句柄
822 | 指定释放内存的地址
823 | 要释放内存的大小
824 |
825 |
826 |
827 | 读取内存页面模式
828 |
829 |
830 |
831 |
832 | 当前地址之后(包括当前地址)
833 |
834 |
835 |
836 |
837 | 当前地址之前(包括当前地址)
838 |
839 |
840 |
841 |
842 | 整个内存页面
843 |
844 |
845 |
846 |
847 | 遍历页面回调方法,要继续遍历,返回true;要停止遍历,返回false
848 |
849 | 页面信息
850 |
851 |
852 |
853 |
854 | 内存读写
855 |
856 |
857 |
858 |
859 | 打开进程(内存读写+查询)
860 |
861 | 进程ID
862 |
863 |
864 |
865 |
866 | 获取指针指向的地址
867 |
868 | 进程句柄
869 | 指针
870 |
871 |
872 |
873 |
874 | 内存读写模板回调函数
875 |
876 | 进程句柄
877 | 地址
878 |
879 |
880 |
881 |
882 | 内存读写模板回调函数
883 |
884 |
885 | 进程句柄
886 | 地址
887 | 值
888 |
889 |
890 |
891 |
892 | 内存读写模板
893 |
894 | 进程ID
895 | 地址
896 | 读写器
897 |
898 |
899 |
900 |
901 | 内存读写模板
902 |
903 | 进程ID
904 | 指针
905 | 读写器
906 |
907 |
908 |
909 |
910 | 内存读取模板
911 |
912 |
913 | 进程ID
914 | 地址
915 | 值
916 | 读写器
917 |
918 |
919 |
920 |
921 | 内存读写模板
922 |
923 |
924 | 进程ID
925 | 指针
926 | 值
927 | 读写器
928 |
929 |
930 |
931 |
932 | 读取字节数组,读取的长度由value的长度决定
933 |
934 | 进程ID
935 | 地址
936 | 值
937 |
938 |
939 |
940 |
941 | 读取字节数组,读取的长度由value的长度决定
942 |
943 | 进程ID
944 | 地址
945 | 值
946 | 实际读取的字节数
947 |
948 |
949 |
950 |
951 | 读取字节数组,读取的长度由value的长度决定
952 |
953 | 进程ID
954 | 指针
955 | 值
956 |
957 |
958 |
959 |
960 | 读取字节数组,读取的长度由value的长度决定
961 |
962 | 进程ID
963 | 指针
964 | 值
965 | 实际读取的字节数
966 |
967 |
968 |
969 |
970 | 读取字节数组,读取的长度由value的长度决定
971 |
972 | 进程句柄
973 | 地址
974 | 值
975 |
976 |
977 |
978 |
979 | 读取字节数组,读取的长度由value的长度决定
980 |
981 | 进程句柄
982 | 地址
983 | 值
984 | 实际读取的字节数
985 |
986 |
987 |
988 |
989 | 写入字节数组,写入的长度由value的长度决定
990 |
991 | 进程ID
992 | 地址
993 | 值
994 |
995 |
996 |
997 |
998 | 写入字节数组,写入的长度由value的长度决定
999 |
1000 | 进程ID
1001 | 地址
1002 | 值
1003 | 实际写入的字节数
1004 |
1005 |
1006 |
1007 |
1008 | 写入字节数组,写入的长度由value的长度决定
1009 |
1010 | 进程ID
1011 | 指针
1012 | 值
1013 |
1014 |
1015 |
1016 |
1017 | 写入字节数组,写入的长度由value的长度决定
1018 |
1019 | 进程ID
1020 | 指针
1021 | 值
1022 | 实际写入的字节数
1023 |
1024 |
1025 |
1026 |
1027 | 写入字节数组,写入的长度由value的长度决定
1028 |
1029 | 进程句柄
1030 | 地址
1031 | 值
1032 |
1033 |
1034 |
1035 |
1036 | 写入字节数组,写入的长度由value的长度决定
1037 |
1038 | 进程句柄
1039 | 地址
1040 | 值
1041 | 实际写入的字节数
1042 |
1043 |
1044 |
1045 |
1046 | 读取地址所在内存页面,读取长度由页面大小以及mode决定决定
1047 |
1048 | 进程ID
1049 | 地址
1050 | 值
1051 | 读取模式
1052 |
1053 |
1054 |
1055 |
1056 | 读取地址所在内存页面,读取长度由页面大小以及mode决定决定
1057 |
1058 | 进程ID
1059 | 指针
1060 | 值
1061 | 读取模式
1062 |
1063 |
1064 |
1065 |
1066 | 读取地址所在内存页面,读取长度由页面大小以及mode决定决定
1067 |
1068 | 进程句柄
1069 | 地址
1070 | 值
1071 | 读取模式
1072 |
1073 |
1074 |
1075 |
1076 | 遍历所有页面
1077 |
1078 | 进程ID
1079 | 回调方法
1080 |
1081 |
1082 |
1083 |
1084 | 从指定地址开始遍历页面
1085 |
1086 | 进程ID
1087 | 起始地址
1088 | 回调方法
1089 |
1090 |
1091 |
1092 |
1093 | 从指定地址开始遍历页面
1094 |
1095 | 进程句柄
1096 | 起始地址
1097 | 回调方法
1098 |
1099 |
1100 |
1101 |
1102 | 读取字节
1103 |
1104 | 进程ID
1105 | 地址
1106 | 值
1107 |
1108 |
1109 |
1110 |
1111 | 读取字节
1112 |
1113 | 进程ID
1114 | 指针
1115 | 值
1116 |
1117 |
1118 |
1119 |
1120 | 读取字节
1121 |
1122 | 进程句柄
1123 | 地址
1124 | 值
1125 |
1126 |
1127 |
1128 |
1129 | 写入字节
1130 |
1131 | 进程ID
1132 | 地址
1133 | 值
1134 |
1135 |
1136 |
1137 |
1138 | 写入字节
1139 |
1140 | 进程ID
1141 | 指针
1142 | 值
1143 |
1144 |
1145 |
1146 |
1147 | 写入字节
1148 |
1149 | 进程句柄
1150 | 地址
1151 | 值
1152 |
1153 |
1154 |
1155 |
1156 | 读取布尔值
1157 |
1158 | 进程ID
1159 | 地址
1160 | 值
1161 |
1162 |
1163 |
1164 |
1165 | 读取布尔值
1166 |
1167 | 进程ID
1168 | 指针
1169 | 值
1170 |
1171 |
1172 |
1173 |
1174 | 读取布尔值
1175 |
1176 | 进程句柄
1177 | 地址
1178 | 值
1179 |
1180 |
1181 |
1182 |
1183 | 写入布尔值
1184 |
1185 | 进程ID
1186 | 地址
1187 | 值
1188 |
1189 |
1190 |
1191 |
1192 | 写入布尔值
1193 |
1194 | 进程ID
1195 | 指针
1196 | 值
1197 |
1198 |
1199 |
1200 |
1201 | 写入布尔值
1202 |
1203 | 进程句柄
1204 | 地址
1205 | 值
1206 |
1207 |
1208 |
1209 |
1210 | 读取字符
1211 |
1212 | 进程ID
1213 | 地址
1214 | 值
1215 |
1216 |
1217 |
1218 |
1219 | 读取字符
1220 |
1221 | 进程ID
1222 | 指针
1223 | 值
1224 |
1225 |
1226 |
1227 |
1228 | 读取字符
1229 |
1230 | 进程句柄
1231 | 地址
1232 | 值
1233 |
1234 |
1235 |
1236 |
1237 | 写入字符
1238 |
1239 | 进程ID
1240 | 地址
1241 | 值
1242 |
1243 |
1244 |
1245 |
1246 | 写入字符
1247 |
1248 | 进程ID
1249 | 指针
1250 | 值
1251 |
1252 |
1253 |
1254 |
1255 | 写入字符
1256 |
1257 | 进程句柄
1258 | 地址
1259 | 值
1260 |
1261 |
1262 |
1263 |
1264 | 读取短整形
1265 |
1266 | 进程ID
1267 | 地址
1268 | 值
1269 |
1270 |
1271 |
1272 |
1273 | 读取短整形
1274 |
1275 | 进程ID
1276 | 指针
1277 | 值
1278 |
1279 |
1280 |
1281 |
1282 | 读取短整形
1283 |
1284 | 进程句柄
1285 | 地址
1286 | 值
1287 |
1288 |
1289 |
1290 |
1291 | 写入短整形
1292 |
1293 | 进程ID
1294 | 地址
1295 | 值
1296 |
1297 |
1298 |
1299 |
1300 | 写入短整形
1301 |
1302 | 进程ID
1303 | 指针
1304 | 值
1305 |
1306 |
1307 |
1308 |
1309 | 写入短整形
1310 |
1311 | 进程句柄
1312 | 地址
1313 | 值
1314 |
1315 |
1316 |
1317 |
1318 | 读取无符号短整形
1319 |
1320 | 进程ID
1321 | 地址
1322 | 值
1323 |
1324 |
1325 |
1326 |
1327 | 读取无符号短整形
1328 |
1329 | 进程ID
1330 | 指针
1331 | 值
1332 |
1333 |
1334 |
1335 |
1336 | 读取无符号短整形
1337 |
1338 | 进程句柄
1339 | 地址
1340 | 值
1341 |
1342 |
1343 |
1344 |
1345 | 写入无符号短整形
1346 |
1347 | 进程ID
1348 | 地址
1349 | 值
1350 |
1351 |
1352 |
1353 |
1354 | 写入无符号短整形
1355 |
1356 | 进程ID
1357 | 指针
1358 | 值
1359 |
1360 |
1361 |
1362 |
1363 | 写入无符号短整形
1364 |
1365 | 进程句柄
1366 | 地址
1367 | 值
1368 |
1369 |
1370 |
1371 |
1372 | 读取整形
1373 |
1374 | 进程ID
1375 | 地址
1376 | 值
1377 |
1378 |
1379 |
1380 |
1381 | 读取整形
1382 |
1383 | 进程ID
1384 | 指针
1385 | 值
1386 |
1387 |
1388 |
1389 |
1390 | 读取整形
1391 |
1392 | 进程句柄
1393 | 地址
1394 | 值
1395 |
1396 |
1397 |
1398 |
1399 | 写入整形
1400 |
1401 | 进程ID
1402 | 地址
1403 | 值
1404 |
1405 |
1406 |
1407 |
1408 | 写入整形
1409 |
1410 | 进程ID
1411 | 指针
1412 | 值
1413 |
1414 |
1415 |
1416 |
1417 | 写入整形
1418 |
1419 | 进程句柄
1420 | 地址
1421 | 值
1422 |
1423 |
1424 |
1425 |
1426 | 读取无符号整形
1427 |
1428 | 进程ID
1429 | 地址
1430 | 值
1431 |
1432 |
1433 |
1434 |
1435 | 读取无符号整形
1436 |
1437 | 进程ID
1438 | 指针
1439 | 值
1440 |
1441 |
1442 |
1443 |
1444 | 读取无符号整形
1445 |
1446 | 进程句柄
1447 | 地址
1448 | 值
1449 |
1450 |
1451 |
1452 |
1453 | 写入无符号整形
1454 |
1455 | 进程ID
1456 | 地址
1457 | 值
1458 |
1459 |
1460 |
1461 |
1462 | 写入无符号整形
1463 |
1464 | 进程ID
1465 | 指针
1466 | 值
1467 |
1468 |
1469 |
1470 |
1471 | 写入无符号整形
1472 |
1473 | 进程句柄
1474 | 地址
1475 | 值
1476 |
1477 |
1478 |
1479 |
1480 | 读取长整形
1481 |
1482 | 进程ID
1483 | 地址
1484 | 值
1485 |
1486 |
1487 |
1488 |
1489 | 读取长整形
1490 |
1491 | 进程ID
1492 | 指针
1493 | 值
1494 |
1495 |
1496 |
1497 |
1498 | 读取长整形
1499 |
1500 | 进程句柄
1501 | 地址
1502 | 值
1503 |
1504 |
1505 |
1506 |
1507 | 写入长整形
1508 |
1509 | 进程ID
1510 | 地址
1511 | 值
1512 |
1513 |
1514 |
1515 |
1516 | 写入长整形
1517 |
1518 | 进程ID
1519 | 指针
1520 | 值
1521 |
1522 |
1523 |
1524 |
1525 | 写入长整形
1526 |
1527 | 进程句柄
1528 | 地址
1529 | 值
1530 |
1531 |
1532 |
1533 |
1534 | 读取无符号长整形
1535 |
1536 | 进程ID
1537 | 地址
1538 | 值
1539 |
1540 |
1541 |
1542 |
1543 | 读取无符号长整形
1544 |
1545 | 进程ID
1546 | 指针
1547 | 值
1548 |
1549 |
1550 |
1551 |
1552 | 读取无符号长整形
1553 |
1554 | 进程句柄
1555 | 地址
1556 | 值
1557 |
1558 |
1559 |
1560 |
1561 | 写入无符号长整形
1562 |
1563 | 进程ID
1564 | 地址
1565 | 值
1566 |
1567 |
1568 |
1569 |
1570 | 写入无符号长整形
1571 |
1572 | 进程ID
1573 | 指针
1574 | 值
1575 |
1576 |
1577 |
1578 |
1579 | 写入无符号长整形
1580 |
1581 | 进程句柄
1582 | 地址
1583 | 值
1584 |
1585 |
1586 |
1587 |
1588 | 读取单精度浮点型
1589 |
1590 | 进程ID
1591 | 地址
1592 | 值
1593 |
1594 |
1595 |
1596 |
1597 | 读取单精度浮点型
1598 |
1599 | 进程ID
1600 | 指针
1601 | 值
1602 |
1603 |
1604 |
1605 |
1606 | 读取单精度浮点型
1607 |
1608 | 进程句柄
1609 | 地址
1610 | 值
1611 |
1612 |
1613 |
1614 |
1615 | 写入单精度浮点型
1616 |
1617 | 进程ID
1618 | 地址
1619 | 值
1620 |
1621 |
1622 |
1623 |
1624 | 写入单精度浮点型
1625 |
1626 | 进程ID
1627 | 指针
1628 | 值
1629 |
1630 |
1631 |
1632 |
1633 | 写入单精度浮点型
1634 |
1635 | 进程句柄
1636 | 地址
1637 | 值
1638 |
1639 |
1640 |
1641 |
1642 | 读取双精度浮点型
1643 |
1644 | 进程ID
1645 | 地址
1646 | 值
1647 |
1648 |
1649 |
1650 |
1651 | 读取双精度浮点型
1652 |
1653 | 进程ID
1654 | 指针
1655 | 值
1656 |
1657 |
1658 |
1659 |
1660 | 读取双精度浮点型
1661 |
1662 | 进程句柄
1663 | 地址
1664 | 值
1665 |
1666 |
1667 |
1668 |
1669 | 写入双精度浮点型
1670 |
1671 | 进程ID
1672 | 地址
1673 | 值
1674 |
1675 |
1676 |
1677 |
1678 | 写入双精度浮点型
1679 |
1680 | 进程ID
1681 | 指针
1682 | 值
1683 |
1684 |
1685 |
1686 |
1687 | 写入双精度浮点型
1688 |
1689 | 进程句柄
1690 | 地址
1691 | 值
1692 |
1693 |
1694 |
1695 |
1696 | 读取指针
1697 |
1698 | 进程ID
1699 | 地址
1700 | 值
1701 |
1702 |
1703 |
1704 |
1705 | 读取指针
1706 |
1707 | 进程ID
1708 | 指针
1709 | 值
1710 |
1711 |
1712 |
1713 |
1714 | 读取指针
1715 |
1716 | 进程句柄
1717 | 地址
1718 | 值
1719 |
1720 |
1721 |
1722 |
1723 | 写入指针
1724 |
1725 | 进程ID
1726 | 地址
1727 | 值
1728 |
1729 |
1730 |
1731 |
1732 | 写入指针
1733 |
1734 | 进程ID
1735 | 指针
1736 | 值
1737 |
1738 |
1739 |
1740 |
1741 | 写入指针
1742 |
1743 | 进程句柄
1744 | 地址
1745 | 值
1746 |
1747 |
1748 |
1749 |
1750 | 读取字符串,使用UTF16编码,如果读取到非托管进程中,并且读取为LPSTR LPWSTTR BSTR等字符串类型,请自行转换为byte[]并使用,
1751 |
1752 | 进程ID
1753 | 地址
1754 | 值
1755 | 是否以2个\0结尾(比如LPWSTR以2个字节\0结尾,而LPSTR以1个字节\0结尾)
1756 |
1757 |
1758 |
1759 |
1760 | 读取字符串,如果读取到非托管进程中,并且读取为LPSTR LPWSTTR BSTR等字符串类型,请自行转换为byte[]并使用,
1761 |
1762 | 进程ID
1763 | 地址
1764 | 值
1765 | 是否以2个\0结尾(比如LPWSTR以2个字节\0结尾,而LPSTR以1个字节\0结尾)
1766 | 编码
1767 |
1768 |
1769 |
1770 |
1771 | 读取字符串,使用UTF16编码,如果读取到非托管进程中,并且读取为LPSTR LPWSTTR BSTR等字符串类型,请自行转换为byte[]并使用,
1772 |
1773 | 进程ID
1774 | 指针
1775 | 值
1776 | 是否以2个\0结尾(比如LPWSTR以2个字节\0结尾,而LPSTR以1个字节\0结尾)
1777 |
1778 |
1779 |
1780 |
1781 | 读取字符串,如果读取到非托管进程中,并且读取为LPSTR LPWSTTR BSTR等字符串类型,请自行转换为byte[]并使用,
1782 |
1783 | 进程ID
1784 | 指针
1785 | 值
1786 | 是否以2个\0结尾(比如LPWSTR以2个字节\0结尾,而LPSTR以1个字节\0结尾)
1787 | 编码
1788 |
1789 |
1790 |
1791 |
1792 | 读取字符串,使用UTF16编码,如果读取到非托管进程中,并且读取为LPSTR LPWSTTR BSTR等字符串类型,请自行转换为byte[]并使用,
1793 |
1794 | 进程句柄
1795 | 地址
1796 | 值
1797 | 缓存大小
1798 | 是否以2个\0结尾(比如LPWSTR以2个字节\0结尾,而LPSTR以1个字节\0结尾)
1799 |
1800 |
1801 |
1802 |
1803 | 读取字符串,如果读取到非托管进程中,并且读取为LPSTR LPWSTTR BSTR等字符串类型,请自行转换为byte[]并使用,
1804 |
1805 | 进程句柄
1806 | 地址
1807 | 值
1808 | 缓存大小
1809 | 是否以2个\0结尾(比如LPWSTR以2个字节\0结尾,而LPSTR以1个字节\0结尾)
1810 | 编码
1811 |
1812 |
1813 |
1814 |
1815 | 写入字符串,使用UTF16编码
1816 |
1817 | 进程ID
1818 | 地址
1819 | 值
1820 |
1821 |
1822 |
1823 |
1824 | 写入字符串
1825 |
1826 | 进程ID
1827 | 地址
1828 | 值
1829 | 编码
1830 |
1831 |
1832 |
1833 |
1834 | 写入字符串,使用UTF16编码
1835 |
1836 | 进程ID
1837 | 指针
1838 | 值
1839 |
1840 |
1841 |
1842 |
1843 | 写入字符串
1844 |
1845 | 进程ID
1846 | 指针
1847 | 值
1848 | 编码
1849 |
1850 |
1851 |
1852 |
1853 | 写入字符串,使用UTF16编码
1854 |
1855 | 进程句柄
1856 | 地址
1857 | 值
1858 |
1859 |
1860 |
1861 |
1862 | 写入字符串
1863 |
1864 | 进程句柄
1865 | 地址
1866 | 值
1867 | 编码
1868 |
1869 |
1870 |
1871 |
1872 | 内存页面信息
1873 |
1874 |
1875 |
1876 |
1877 | 地址
1878 |
1879 |
1880 |
1881 |
1882 | 大小
1883 |
1884 |
1885 |
1886 |
1887 | 保护选项
1888 |
1889 |
1890 |
1891 |
1892 | 页面类型
1893 |
1894 |
1895 |
1896 |
1897 | 返回表示当前对象的字符串
1898 |
1899 |
1900 |
1901 |
1902 |
1903 | 指针类型
1904 |
1905 |
1906 |
1907 |
1908 | 模块名+偏移
1909 |
1910 |
1911 |
1912 |
1913 | 地址+偏移
1914 |
1915 |
1916 |
1917 |
1918 | 指针
1919 |
1920 |
1921 |
1922 |
1923 | 模块名
1924 |
1925 |
1926 |
1927 |
1928 | 模块偏移
1929 |
1930 |
1931 |
1932 |
1933 | 基础地址
1934 |
1935 |
1936 |
1937 |
1938 | 偏移
1939 |
1940 |
1941 |
1942 |
1943 | 实例化指针结构
1944 |
1945 | 模块名
1946 | 模块偏移
1947 | 偏移
1948 |
1949 |
1950 |
1951 | 实例化指针结构
1952 |
1953 | 基础地址
1954 | 偏移
1955 |
1956 |
1957 |
1958 | 本地方法
1959 |
1960 |
1961 |
1962 |
1963 | 最大模块名长度
1964 |
1965 |
1966 |
1967 |
1968 | 最大路径长度
1969 |
1970 |
1971 |
1972 |
1973 | 表示当前进程的伪句柄
1974 |
1975 |
1976 |
1977 |
1978 | Installs a hook procedure that monitors messages generated as a result of an input event in a dialog box, message box, menu, or scroll bar. For more information, see the MessageProc hook procedure.
1979 |
1980 |
1981 |
1982 |
1983 | Installs a hook procedure that records input messages posted to the system message queue. This hook is useful for recording macros. For more information, see the JournalRecordProc hook procedure.
1984 |
1985 |
1986 |
1987 |
1988 | Installs a hook procedure that posts messages previously recorded by a WH_JOURNALRECORD hook procedure. For more information, see the JournalPlaybackProc hook procedure.
1989 |
1990 |
1991 |
1992 |
1993 | Installs a hook procedure that monitors keystroke messages. For more information, see the KeyboardProc hook procedure.
1994 |
1995 |
1996 |
1997 |
1998 | Installs a hook procedure that monitors messages posted to a message queue. For more information, see the GetMsgProc hook procedure.
1999 |
2000 |
2001 |
2002 |
2003 | Installs a hook procedure that monitors messages before the system sends them to the destination window procedure. For more information, see the CallWndProc hook procedure.
2004 |
2005 |
2006 |
2007 |
2008 | Installs a hook procedure that receives notifications useful to a CBT application. For more information, see the CBTProc hook procedure.
2009 |
2010 |
2011 |
2012 |
2013 | Installs a hook procedure that monitors messages generated as a result of an input event in a dialog box, message box, menu, or scroll bar. The hook procedure monitors these messages for all applications in the same desktop as the calling thread. For more information, see the SysMsgProc hook procedure.
2014 |
2015 |
2016 |
2017 |
2018 | Installs a hook procedure that monitors mouse messages. For more information, see the MouseProc hook procedure.
2019 |
2020 |
2021 |
2022 |
2023 | 当调用 GetMessage 或 PeekMessage 来从消息队列种查询非鼠标、键盘消息时
2024 |
2025 |
2026 |
2027 |
2028 | Installs a hook procedure useful for debugging other hook procedures. For more information, see the DebugProc hook procedure.
2029 |
2030 |
2031 |
2032 |
2033 | Installs a hook procedure that receives notifications useful to shell applications. For more information, see the ShellProc hook procedure.
2034 |
2035 |
2036 |
2037 |
2038 | Installs a hook procedure that will be called when the application's foreground thread is about to become idle. This hook is useful for performing low priority tasks during idle time. For more information, see the ForegroundIdleProc hook procedure.
2039 |
2040 |
2041 |
2042 |
2043 | Installs a hook procedure that monitors messages after they have been processed by the destination window procedure. For more information, see the CallWndRetProc hook procedure.
2044 |
2045 |
2046 |
2047 |
2048 | Installs a hook procedure that monitors low-level keyboard input events. For more information, see the LowLevelKeyboardProc hook procedure.
2049 |
2050 |
2051 |
2052 |
2053 | Installs a hook procedure that monitors low-level mouse input events. For more information, see the LowLevelMouseProc hook procedure.
2054 |
2055 |
2056 |
2057 |
2058 | Required to delete the object.
2059 |
2060 |
2061 |
2062 |
2063 | Required to read information in the security descriptor for the object, not including the information in the SACL.
2064 | To read or write the SACL, you must request the ACCESS_SYSTEM_SECURITY access right.
2065 | For more information, see SACL Access Right.
2066 |
2067 |
2068 |
2069 |
2070 | The right to use the object for synchronization.
2071 | This enables a thread to wait until the object is in the signaled state.
2072 |
2073 |
2074 |
2075 |
2076 | Required to modify the DACL in the security descriptor for the object.
2077 |
2078 |
2079 |
2080 |
2081 | Required to change the owner in the security descriptor for the object.
2082 |
2083 |
2084 |
2085 |
2086 | Standard Rights Required
2087 |
2088 |
2089 |
2090 |
2091 | Required to create a process.
2092 |
2093 |
2094 |
2095 |
2096 | Required to create a thread.
2097 |
2098 |
2099 |
2100 |
2101 | Required to duplicate a handle using DuplicateHandle.
2102 |
2103 |
2104 |
2105 |
2106 | Required to retrieve certain information about a process, such as its token, exit code, and priority class (see OpenProcessToken).
2107 |
2108 |
2109 |
2110 |
2111 | Required to retrieve certain information about a process (see GetExitCodeProcess, GetPriorityClass, IsProcessInJob, QueryFullProcessImageName).
2112 | A handle that has the PROCESS_QUERY_INFORMATION access right is automatically granted PROCESS_QUERY_LIMITED_INFORMATION.
2113 |
2114 |
2115 |
2116 |
2117 | Required to set certain information about a process, such as its priority class (see SetPriorityClass).
2118 |
2119 |
2120 |
2121 |
2122 | Required to set memory limits using SetProcessWorkingSetSize.
2123 |
2124 |
2125 |
2126 |
2127 | Required to suspend or resume a process.
2128 |
2129 |
2130 |
2131 |
2132 | Required to terminate a process using TerminateProcess.
2133 |
2134 |
2135 |
2136 |
2137 | Required to perform an operation on the address space of a process (see VirtualProtectEx and O:WriteProcessMemory).
2138 |
2139 |
2140 |
2141 |
2142 | Required to read memory in a process using O:ReadProcessMemory.
2143 |
2144 |
2145 |
2146 |
2147 | Required to write to memory in a process using O:WriteProcessMemory.
2148 |
2149 |
2150 |
2151 |
2152 | All possible access rights for a process object.
2153 |
2154 |
2155 |
2156 |
2157 | 线程被创建为挂起状态
2158 |
2159 |
2160 |
2161 |
2162 | 指定堆栈大小
2163 |
2164 |
2165 |
2166 |
2167 | Required to read certain information from the thread object, such as the exit code (see GetExitCodeThread).
2168 |
2169 |
2170 |
2171 |
2172 | Contains information about a low-level keyboard input event.
2173 |
2174 |
2175 |
2176 |
2177 | A virtual-key code.
2178 | The code must be a value in the range 1 to 254.
2179 |
2180 |
2181 |
2182 |
2183 | A hardware scan code for the key.
2184 |
2185 |
2186 |
2187 |
2188 | The extended-key flag, event-injected flags, context code, and transition-state flag.
2189 | This member is specified as follows.
2190 | An application can use the following values to test the keystroke flags.
2191 | Testing LLKHF_INJECTED (bit 4) will tell you whether the event was injected.
2192 | If it was, then testing LLKHF_LOWER_IL_INJECTED (bit 1) will tell you whether or not the event was injected from a process running at lower integrity level.
2193 |
2194 |
2195 |
2196 |
2197 | The time stamp for this message, equivalent to what GetMessageTime would return for this message.
2198 |
2199 |
2200 |
2201 |
2202 | Additional information associated with the message.
2203 |
2204 |
2205 |
2206 |
2207 | Contains information about a range of pages in the virtual address space of a process.
2208 | The VirtualQuery and VirtualQueryEx functions use this structure.
2209 |
2210 |
2211 |
2212 |
2213 | A pointer to the base address of the region of pages.
2214 |
2215 |
2216 |
2217 |
2218 | A pointer to the base address of a range of pages allocated by the VirtualAlloc function.
2219 | The page pointed to by the BaseAddress member is contained within this allocation range.
2220 |
2221 |
2222 |
2223 |
2224 | The memory protection option when the region was initially allocated.
2225 | This member can be one of the memory protection constants or 0 if the caller does not have access.
2226 |
2227 |
2228 |
2229 |
2230 | The size of the region beginning at the base address in which all pages have identical attributes, in bytes.
2231 |
2232 |
2233 |
2234 |
2235 | The state of the pages in the region.
2236 |
2237 |
2238 |
2239 |
2240 | The access protection of the pages in the region. This member is one of the values listed for the AllocationProtect member.
2241 |
2242 |
2243 |
2244 |
2245 | The type of pages in the region.
2246 |
2247 |
2248 |
2249 |
2250 | 结构体在非托管内存中大小
2251 |
2252 |
2253 |
2254 |
2255 | 回调函数 要继续遍历,返回true;要停止遍历,返回false
2256 |
2257 | 子级窗口的句柄
2258 | EnumWindows或EnumDesktopWindows中给出的应用程序定义值
2259 |
2260 |
2261 |
2262 |
2263 | 回调函数 要继续遍历,返回true;要停止遍历,返回false
2264 |
2265 | 顶级窗口的句柄
2266 | EnumWindows或EnumDesktopWindows中给出的应用程序定义值
2267 |
2268 |
2269 |
2270 |
2271 | HookProc 回调函数
2272 |
2273 | 钩子代码传递给当前的钩子过程。下一个钩子过程使用此代码来确定如何处理挂钩信息。
2274 | 此参数的含义取决于与当前钩链相关联的钩子类型。
2275 | 此参数的含义取决于与当前钩链相关联的钩子类型。
2276 |
2277 |
2278 |
2279 |
2280 | 读取内存
2281 |
2282 | 进程句柄
2283 | 地址
2284 | 要读取的内容
2285 | 读取内容的大小
2286 | 实际读取大小
2287 |
2288 |
2289 |
2290 |
2291 | 读取内存
2292 |
2293 | 进程句柄
2294 | 地址
2295 | 要读取的内容
2296 | 读取内容的大小
2297 | 实际读取大小
2298 |
2299 |
2300 |
2301 |
2302 | 读取内存
2303 |
2304 | 进程句柄
2305 | 地址
2306 | 要读取的内容
2307 | 读取内容的大小
2308 | 实际读取大小
2309 |
2310 |
2311 |
2312 |
2313 | 读取内存
2314 |
2315 | 进程句柄
2316 | 地址
2317 | 要读取的内容
2318 | 读取内容的大小
2319 | 实际读取大小
2320 |
2321 |
2322 |
2323 |
2324 | 读取内存
2325 |
2326 | 进程句柄
2327 | 地址
2328 | 要读取的内容
2329 | 读取内容的大小
2330 | 实际读取大小
2331 |
2332 |
2333 |
2334 |
2335 | 读取内存
2336 |
2337 | 进程句柄
2338 | 地址
2339 | 要读取的内容
2340 | 读取内容的大小
2341 | 实际读取大小
2342 |
2343 |
2344 |
2345 |
2346 | 读取内存
2347 |
2348 | 进程句柄
2349 | 地址
2350 | 要读取的内容
2351 | 读取内容的大小
2352 | 实际读取大小
2353 |
2354 |
2355 |
2356 |
2357 | 读取内存
2358 |
2359 | 进程句柄
2360 | 地址
2361 | 要读取的内容
2362 | 读取内容的大小
2363 | 实际读取大小
2364 |
2365 |
2366 |
2367 |
2368 | 读取内存
2369 |
2370 | 进程句柄
2371 | 地址
2372 | 要读取的内容
2373 | 读取内容的大小
2374 | 实际读取大小
2375 |
2376 |
2377 |
2378 |
2379 | 读取内存
2380 |
2381 | 进程句柄
2382 | 地址
2383 | 要读取的内容
2384 | 读取内容的大小
2385 | 实际读取大小
2386 |
2387 |
2388 |
2389 |
2390 | 读取内存
2391 |
2392 | 进程句柄
2393 | 地址
2394 | 要读取的内容
2395 | 读取内容的大小
2396 | 实际读取大小
2397 |
2398 |
2399 |
2400 |
2401 | 读取内存
2402 |
2403 | 进程句柄
2404 | 地址
2405 | 要读取的内容
2406 | 读取内容的大小
2407 | 实际读取大小
2408 |
2409 |
2410 |
2411 |
2412 | 读取内存
2413 |
2414 | 进程句柄
2415 | 地址
2416 | 要读取的内容
2417 | 读取内容的大小
2418 | 实际读取大小
2419 |
2420 |
2421 |
2422 |
2423 | 读取内存
2424 |
2425 | 进程句柄
2426 | 地址
2427 | 要读取的内容
2428 | 读取内容的大小
2429 | 实际读取大小
2430 |
2431 |
2432 |
2433 |
2434 | 读取内存
2435 |
2436 | 进程句柄
2437 | 地址
2438 | 要读取的内容
2439 | 读取内容的大小
2440 | 实际读取大小
2441 |
2442 |
2443 |
2444 |
2445 | 写入内存
2446 |
2447 | 进程句柄
2448 | 地址
2449 | 要写入的内容
2450 | 写入内容的大小
2451 | 实际写入大小
2452 |
2453 |
2454 |
2455 |
2456 | 写入内存
2457 |
2458 | 进程句柄
2459 | 地址
2460 | 要写入的内容
2461 | 写入内容的大小
2462 | 实际写入大小
2463 |
2464 |
2465 |
2466 |
2467 | 写入内存
2468 |
2469 | 进程句柄
2470 | 地址
2471 | 要写入的内容
2472 | 写入内容的大小
2473 | 实际写入大小
2474 |
2475 |
2476 |
2477 |
2478 | 写入内存
2479 |
2480 | 进程句柄
2481 | 地址
2482 | 要写入的内容
2483 | 写入内容的大小
2484 | 实际写入大小
2485 |
2486 |
2487 |
2488 |
2489 | 写入内存
2490 |
2491 | 进程句柄
2492 | 地址
2493 | 要写入的内容
2494 | 写入内容的大小
2495 | 实际写入大小
2496 |
2497 |
2498 |
2499 |
2500 | 写入内存
2501 |
2502 | 进程句柄
2503 | 地址
2504 | 要写入的内容
2505 | 写入内容的大小
2506 | 实际写入大小
2507 |
2508 |
2509 |
2510 |
2511 | 写入内存
2512 |
2513 | 进程句柄
2514 | 地址
2515 | 要写入的内容
2516 | 写入内容的大小
2517 | 实际写入大小
2518 |
2519 |
2520 |
2521 |
2522 | 写入内存
2523 |
2524 | 进程句柄
2525 | 地址
2526 | 要写入的内容
2527 | 写入内容的大小
2528 | 实际写入大小
2529 |
2530 |
2531 |
2532 |
2533 | 写入内存
2534 |
2535 | 进程句柄
2536 | 地址
2537 | 要写入的内容
2538 | 写入内容的大小
2539 | 实际写入大小
2540 |
2541 |
2542 |
2543 |
2544 | 写入内存
2545 |
2546 | 进程句柄
2547 | 地址
2548 | 要写入的内容
2549 | 写入内容的大小
2550 | 实际写入大小
2551 |
2552 |
2553 |
2554 |
2555 | 写入内存
2556 |
2557 | 进程句柄
2558 | 地址
2559 | 要写入的内容
2560 | 写入内容的大小
2561 | 实际写入大小
2562 |
2563 |
2564 |
2565 |
2566 | 写入内存
2567 |
2568 | 进程句柄
2569 | 地址
2570 | 要写入的内容
2571 | 写入内容的大小
2572 | 实际写入大小
2573 |
2574 |
2575 |
2576 |
2577 | 写入内存
2578 |
2579 | 进程句柄
2580 | 地址
2581 | 要写入的内容
2582 | 写入内容的大小
2583 | 实际写入大小
2584 |
2585 |
2586 |
2587 |
2588 | 写入内存
2589 |
2590 | 进程句柄
2591 | 地址
2592 | 要写入的内容
2593 | 写入内容的大小
2594 | 实际写入大小
2595 |
2596 |
2597 |
2598 |
2599 | 写入内存
2600 |
2601 | 进程句柄
2602 | 地址
2603 | 要写入的内容
2604 | 写入内容的大小
2605 | 实际写入大小
2606 |
2607 |
2608 |
2609 |
2610 | 写入内存
2611 |
2612 | 进程句柄
2613 | 地址
2614 | 要写入的内容
2615 | 写入内容的大小
2616 | 实际写入大小
2617 |
2618 |
2619 |
2620 |
2621 | 获取模块所在路径
2622 |
2623 | 模块句柄
2624 | 文件路径
2625 | 缓冲区大小
2626 |
2627 |
2628 |
2629 |
2630 | 获取当前进程中符合条件的模块句柄
2631 |
2632 | 模块名
2633 |
2634 |
2635 |
2636 |
2637 | 获取指定模块中导出函数的地址
2638 |
2639 | 模块句柄
2640 | 函数名
2641 |
2642 |
2643 |
2644 |
2645 | 加载DLL
2646 |
2647 | DLL路径
2648 |
2649 |
2650 |
2651 |
2652 | 安装Windows消息钩子
2653 |
2654 | 将安装的钩子的类型
2655 | 回调函数
2656 | 回调函数所在模块的句柄。如果 dwThreadId 指定的线程由当前进程创建并且回调函数在当前进程中,参数必须设置为 IntPtr.Zero
2657 | 与回调函数关联的线程ID,0为全局钩子
2658 | 返回钩子的句柄
2659 |
2660 |
2661 |
2662 | 卸载Windows消息钩子
2663 |
2664 | 要卸载的钩子的句柄
2665 |
2666 |
2667 |
2668 |
2669 | 将钩子信息传递给当前钩子链中的下一个钩子过程。挂钩过程可以在处理挂钩信息之前或之后调用此函数。
2670 |
2671 | 当前钩子的句柄,可以不填写
2672 | 钩子代码传递给当前的钩子过程。下一个钩子过程使用此代码来确定如何处理挂钩信息。
2673 | 所述的wParam传递给当前挂钩过程值。此参数的含义取决于与当前钩链相关联的钩子类型。
2674 | 所述的lParam传递给当前挂钩过程值。此参数的含义取决于与当前钩链相关联的钩子类型。
2675 | 该值由链中的下一个钩子过程返回。当前的钩子过程也必须返回此值。返回值的含义取决于钩子类型。有关详细信息,请参阅各个挂钩过程的说明。
2676 |
2677 |
2678 |
2679 | 将虚拟键的状态拷贝到缓冲区
2680 |
2681 | 指向一个256字节的数组,数组用于接收每个虚拟键的状态。
2682 |
2683 |
2684 |
2685 |
2686 | 获取虚拟键状态
2687 |
2688 |
2689 | 高位为1,表示按下,为0表示未按下。低位为1,表示虚拟键被切换。比如按下Caps Lock键,低位为1,反之低位为0
2690 |
2691 |
2692 |
2693 | 该函数将指定的虚拟键码和键盘状态翻译为相应的字符或字符串。该函数使用由给定的键盘布局句柄标识的物理键盘布局和输入语言来翻译代码。
2694 |
2695 | 指定要翻译的虚拟键码。
2696 | 定义被翻译键的硬件扫描码。若该键处于Up状态,则该值的最高位被设置。
2697 | 指向包含当前键盘状态的一个256字节数组。数组的每个成员包含一个键的状态。若某字节的最高位被设置,则该键处于Down状态。若最低位被设置,则表明该键被触发。在此函数中,仅有Caps Lock键的触发位是相关的。Num Lock和Scroll Lock键的触发状态将被忽略。
2698 | 指向接受翻译所得字符或字符串的缓冲区。
2699 | 定义一个菜单是否处于激活状态。若一菜单是活动的,则该参数为1,否则为0。
2700 |
2701 |
2702 |
2703 |
2704 | 在当前进程中分配内存
2705 |
2706 | 指定一个地址用于分配内存(如果为IntPtr.Zero则自动分配)
2707 | 要分配内存的大小
2708 | 内存分配选项
2709 | 内存保护选项
2710 |
2711 |
2712 |
2713 |
2714 | 分配内存
2715 |
2716 | 进程句柄
2717 | 指定一个地址用于分配内存(如果为IntPtr.Zero则自动分配)
2718 | 要分配内存的大小
2719 | 内存分配选项
2720 | 内存保护选项
2721 |
2722 |
2723 |
2724 |
2725 | 在当前进程中释放内存
2726 |
2727 | 指定释放内存的地址
2728 | 要释放内存的大小
2729 | 内存释放选项
2730 |
2731 |
2732 |
2733 |
2734 | 释放内存
2735 |
2736 | 进程句柄
2737 | 指定释放内存的地址
2738 | 要释放内存的大小
2739 | 内存释放选项
2740 |
2741 |
2742 |
2743 |
2744 | 查询地址空间中内存地址的信息
2745 |
2746 | 进程句柄
2747 | 查询内存的地址
2748 | 内存页面信息
2749 | MEMORY_BASIC_INFORMATION结构的大小
2750 |
2751 |
2752 |
2753 |
2754 | 向线程发送消息
2755 |
2756 | 线程ID
2757 | 消息类型
2758 | 参数1
2759 | 参数2
2760 |
2761 |
2762 |
2763 |
2764 | 同步方法发送消息
2765 |
2766 | 窗口句柄
2767 | 消息
2768 | 参数1
2769 | 参数2
2770 |
2771 |
2772 |
2773 |
2774 | 将一个线程的输入处理机制附加或分离到另一个线程的输入处理机制
2775 |
2776 | 附加线程的ID,不能是系统线程
2777 | 被附加线程的ID,不能是系统线程
2778 | true为附加,false为分离
2779 |
2780 |
2781 |
2782 |
2783 | 关闭句柄
2784 |
2785 | 句柄
2786 |
2787 |
2788 |
2789 |
2790 | 创建远程线程
2791 |
2792 | 进程句柄
2793 |
2794 | 堆栈初始大小,如果为0,则使用系统默认
2795 | 远程进程中线程的起始地址
2796 | 指向要传递给线程函数的变量的指针
2797 | 线程创建的标志
2798 | 指向接收线程标识符的变量的指针
2799 | 如果函数成功,返回值是新线程的句柄,否则返回值是IntPtr.Zero
2800 |
2801 |
2802 |
2803 | 获取当前进程ID
2804 |
2805 | 线程ID
2806 |
2807 |
2808 |
2809 | 获取当前线程ID
2810 |
2811 | 线程ID
2812 |
2813 |
2814 |
2815 | Retrieves the termination status of the specified thread.
2816 |
2817 | A handle to the thread.
2818 | A pointer to a variable to receive the thread termination status.
2819 |
2820 |
2821 |
2822 |
2823 | 获取线程所在进程的ID
2824 |
2825 | 线程句柄
2826 |
2827 |
2828 |
2829 |
2830 | 获取指定的进程是否在WOW64下运行
2831 |
2832 | 进程句柄
2833 |
2834 | 32位进程运行在32位Windows下:false
2835 | 32位进程运行在64位Windows下:true
2836 | 64位进程运行在64位Windows下:false
2837 |
2838 | 返回值是函数是否执行成功,而不是是否为64位进程!!!
2839 |
2840 |
2841 |
2842 | 打开进程
2843 |
2844 | 权限
2845 | 是否继承
2846 | 进程ID
2847 |
2848 |
2849 |
2850 |
2851 | 打开线程
2852 |
2853 | 权限
2854 | 是否继承
2855 | 线程ID
2856 |
2857 |
2858 |
2859 |
2860 | 打开进程
2861 |
2862 | 权限
2863 | 是否继承
2864 | 进程ID
2865 |
2866 |
2867 |
2868 |
2869 | 打开线程
2870 |
2871 | 权限
2872 | 是否继承
2873 | 线程ID
2874 |
2875 |
2876 |
2877 |
2878 | 遍历所有进程ID
2879 |
2880 | 进程ID
2881 |
2882 |
2883 |
2884 |
2885 |
2886 |
2887 | 遍历进程的所有模块
2888 |
2889 | 进程的句柄
2890 | 模块句柄
2891 | 储存模块句柄的字节数
2892 | 储存所有模块句柄所需的字节数
2893 |
2894 |
2895 |
2896 |
2897 | 遍历进程的所有模块
2898 |
2899 | 进程的句柄
2900 | 模块句柄
2901 | 储存模块句柄的字节数
2902 | 储存所有模块句柄所需的字节数
2903 | 过滤条件
2904 |
2905 |
2906 |
2907 |
2908 | 获取模块名
2909 |
2910 | 进程句柄
2911 | 模块句柄
2912 | 模块名
2913 | 最大模块名长度
2914 | 成功将返回非零整数
2915 |
2916 |
2917 |
2918 | 获取进程路径
2919 |
2920 | 进程句柄
2921 | 进程路径
2922 | 缓存区大小
2923 |
2924 |
2925 |
2926 |
2927 | 启动程序
2928 |
2929 | 选项
2930 |
2931 |
2932 |
2933 |
2934 | 等待对象被关闭
2935 |
2936 | 对象的句柄
2937 | 最多等待多少毫秒
2938 |
2939 |
2940 |
2941 |
2942 | 遍历所有子窗口
2943 |
2944 | 父窗口句柄
2945 |
2946 |
2947 |
2948 |
2949 |
2950 |
2951 | 遍历所有顶级窗口
2952 |
2953 |
2954 | 自定义参数
2955 |
2956 |
2957 |
2958 |
2959 | 查找窗口
2960 |
2961 | 窗口类名
2962 | 窗口标题
2963 |
2964 |
2965 |
2966 |
2967 | 查找窗口
2968 |
2969 | 父窗口句柄
2970 | 从此窗口之后开始查找(此窗口必须为父窗口的直接子窗口)
2971 | 窗口类名
2972 | 窗口标题
2973 |
2974 |
2975 |
2976 |
2977 | 获取当前顶端窗口
2978 |
2979 |
2980 |
2981 |
2982 |
2983 | 获取Program Manager的窗口句柄
2984 |
2985 |
2986 |
2987 |
2988 |
2989 | 获取某个窗口的创建者的线程ID和进程ID
2990 |
2991 | 窗口句柄
2992 | 进程ID
2993 | 线程ID
2994 |
2995 |
2996 |
2997 | 是否为有效窗口
2998 |
2999 | 窗口句柄
3000 |
3001 |
3002 |
3003 |
3004 | 设置窗口位置
3005 |
3006 | 窗口句柄
3007 | 窗口Z序
3008 | 左上顶点x坐标
3009 | 左上顶点y坐标
3010 | 长度
3011 | 高度
3012 | 选项
3013 |
3014 |
3015 |
3016 |
3017 | 激活窗口
3018 |
3019 | 窗口句柄
3020 |
3021 |
3022 |
3023 |
3024 | 设置焦点
3025 |
3026 | 窗口句柄
3027 |
3028 |
3029 |
3030 |
3031 | 窗口置顶
3032 |
3033 | 窗口句柄
3034 |
3035 |
3036 |
3037 |
3038 | 恢复进程
3039 |
3040 | 进程句柄
3041 | If the function succeeds, the return value is the thread's previous suspend count.If the function fails, the return value is (DWORD) -1. To get extended error information, call GetLastError.
3042 |
3043 |
3044 |
3045 | 暂停进程
3046 |
3047 | 进程句柄
3048 | If the function succeeds, the return value is the thread's previous suspend count; otherwise, it is (DWORD) -1. To get extended error information, use the GetLastError function.
3049 |
3050 |
3051 |
3052 | 获取所有不支持的本地方法,可以通过反射调用此方法
3053 | string[] notSupportedMethod = (string[])Assembly.Load("FastWin32").GetType("FastWin32.NativeMethods").GetMethod("SelfCheck", BindingFlags.Public | BindingFlags.Static).Invoke(null, null);
3054 |
3055 |
3056 |
3057 |
3058 |
3059 | 安全句柄
3060 |
3061 |
3062 |
3063 |
3064 | 窗口
3065 |
3066 |
3067 |
3068 |
3069 | 遍历窗口回调函数,继续遍历返回true,否则返回false
3070 |
3071 | 窗口句柄
3072 |
3073 |
3074 |
3075 |
3076 | 获取包含桌面ListView的句柄
3077 |
3078 |
3079 |
3080 |
3081 |
3082 | 将窗口置顶并激活(单次,非永久),非直接调用Win32API SetForegroundWindow,成功率高
3083 |
3084 | 窗口句柄
3085 |
3086 |
3087 |
3088 | 查找窗口
3089 |
3090 | 窗口类名
3091 | 窗口标题
3092 |
3093 |
3094 |
3095 |
3096 | 查找窗口
3097 |
3098 | 父窗口句柄
3099 | 从此窗口之后开始查找(此窗口必须为父窗口的直接子窗口)
3100 | 窗口类名
3101 | 窗口标题
3102 |
3103 |
3104 |
3105 |
3106 | 遍历所有顶级窗口
3107 |
3108 | 查找到窗口时的回调函数
3109 |
3110 |
3111 |
3112 |
3113 | 遍历所有子窗口
3114 |
3115 | 父窗口
3116 | 查找到窗口时的回调函数
3117 |
3118 |
3119 |
3120 |
3121 |
--------------------------------------------------------------------------------