在任何人提到它之前,我参考了这个链接,找出我需要将后备缓冲区复制到位图.
现在的情况
期望的情况
正确制作屏幕截图,让目标进程继续正常执行.
码
注意Hook类与链接中的相同.我只添加了一个UnmodifiableHook版本,它的名字就是这么说的.我遗漏了所有不重要的位.
TestSwapChainHook.cs
using System;
using System.Runtime.InteropServices;
namespace Test
{
public sealed class TestSwapChainHook : IDisposable
{
private enum IDXGISwapChainVirtualTable
{
QueryInterface = 0,
AddRef = 1,
Release = 2,
SetPrivateData = 3,
SetPrivateDataInterface = 4,
GetPrivateData = 5,
GetParent = 6,
GetDevice = 7,
Present = 8,
GetBuffer = 9,
SetFullscreenState = 10,
GetFullscreenState = 11,
GetDesc = 12,
ResizeBuffers = 13,
ResizeTarget = …Run Code Online (Sandbox Code Playgroud) 我想拦截当用户通过挂钩所需的API函数来删除任何目录上的文件时,可以在mesagebox中询问一个简单的布尔问题,Really Would you like to Delete this file?"问题是一个表达我想要的例子控制文件,删除文件或防止删除.
我的操作系统是Windows 8 x64,但我想在其他Windows操作系统和它们的arquitechtures中编写一种通用方法(如果这不会让人头疼更难).
在这个SO问题中,我已经读过,最好的选择是通过我看到的方式挂钩NtSetFileInformation函数Intercept FIleSytemCall for Deletion,它存在一个名为WinAPI的函数DeleteFile,也是接口ICopyHook,我不知道它们之间的差异,但是反正我真的不知道怎么开始这样做......
我想澄清一下,我正在寻找一个VBNET解决方案,我很头疼,因为这些API-Hooking库上没有任何VBNET代码示例,而且当复杂的代码是复杂的代码时,C#代码转换为VBNET是非常错误的.参与其中.
编辑:我发现了一个EasyHook库示例,NtSetFileInformation其中似乎是完美的满足我的需求,但它是C#代码,我试图翻译它没有成功:使用EasyHook挂钩NtdCreateFile API(c#)
所以,我已经尝试使用Deviare库2.6,但什么也没做:
Public Class Form1
Private _mgr As Deviare2.NktSpyMgr = Nothing
Private WithEvents _hook As Deviare2.NktHook = Nothing
Private _proc As Deviare2.INktProcess = Nothing
Private Shadows Sub Shown() Handles MyBase.Shown
_mgr = New Deviare2.NktSpyMgr()
_hook = _mgr.CreateHook("ntdll.dll!NtSetFileInformation", Nothing)
_hook.Hook()
End Sub
Private Sub …Run Code Online (Sandbox Code Playgroud) 我在让我的方法挂钩工作时遇到了一些问题。如果“我”调用被挂钩的方法,我就可以让挂钩工作。但是当它在进程操作期间自然发生时,它就不会被吸引。我的问题可能源于这样一个事实:我实际上是在我自己生成的线程中设置这些钩子。显然 LhSetInclusiveACL() 方法需要知道您想要挂钩的线程。嗯,这是我的问题......
\n\n我并不关心哪些线程应用了钩子,我希望它们都被钩子。例如,假设我希望“gdi32.dll”库中的 CreateICW() 方法与整个进程“iexplorer.exe”挂钩。不仅仅是来自线程 ID 号 48291 或其他什么。要知道哪些线程将调用您有兴趣挂钩的例程,需要深入了解您正在挂钩的进程的内部工作原理。我推测这通常是不可行的,而且对我来说当然也不可行。因此,我不可能先验地知道哪些线程 ID 需要被挂钩。
\n\n以下代码取自“UnmanageHook”示例:
\n\nextern "C" int main(int argc, wchar_t* argv[])\n{\n //...\n //...\n //...\n\n /*\n The following shows how to install and remove local hooks...\n */\n FORCE(LhInstallHook(\n GetProcAddress(hUser32, "MessageBeep"),\n MessageBeepHook,\n (PVOID)0x12345678,\n hHook));\n\n // won\'t invoke the hook handler because hooks are inactive after installation\n MessageBeep(123);\n\n // activate the hook for the current thread\n // This is where I believe my problem is. ACLEntries is \n // supposed to …Run Code Online (Sandbox Code Playgroud) 当有人通过任务管理器或任务杀控制台命令杀死我的应用程序(java,但这并不重要)时,我如何捕获?
我知道我无法在我的应用程序中捕捉到这一点,但也许我可以通过操作系统(当然是 Windows)的一些钩子来做到这一点。也许easyhook库(http://www.codeplex.com/easyhook)可以帮助我,但我在那里找不到例子。我们的应用程序经常在客户服务器上死掉,我只想知道是谁(或什么)杀死了它。我们确定这不是应用程序问题,似乎 java.exe 进程已从任务管理器中终止
我试图钩住winsock连接功能,并通过socks5代理/ w auth路由TCP连接。
如果套接字是阻塞套接字,则此方法有效,但是在使用firefox(非阻塞套接字)时,我收到很多10035、10022 winsock错误。
我如何确定它是否是非阻塞/阻塞插座?
我真的很感激任何提示或想法,以实现钩住wsock连接功能并通过socks5服务器路由TCP通信的功能。
如果有人要测试它,我可以将其放在github上。(适用于任何版本的firefox)
编辑1:https : //github.com/duketwo/WinsockConnectHookSocks5/
(您必须在WSockConnectHook / HookManager.cs中编辑代理信息,并在Injector / MainForm.cs中编辑firefox的路径)
Edit2:这很容易引起麻烦,原始函数调用后的所有操作均无法正常进行。
Edit3:似乎我使它具有许多缺陷,实际上需要区分非阻塞套接字和阻塞套接字。任何想法如何实现这一目标?
Edit4:Windows没有提供任何方法来检索套接字的阻塞属性,因此我可能必须钩挂ioctlsocket函数以跟踪套接字的阻塞状态。
谢谢
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using EasyHook;
using System.IO;
using System.Windows.Forms;
namespace WSockConnectHook
{
public class WinSockConnectController : IDisposable, IHook
{
[UnmanagedFunctionPointer(CallingConvention.StdCall, CharSet = CharSet.Ansi, SetLastError = true)]
private delegate int WinsockConnectDelegate(IntPtr s, IntPtr addr, int addrsize);
[DllImport("WS2_32.dll", SetLastError = true)]
public static extern int connect(IntPtr s, IntPtr addr, int addrsize);
[StructLayout(LayoutKind.Sequential, …Run Code Online (Sandbox Code Playgroud)