如何从托管c#代码中钩住本机windows API?

如何从托管c#代码中钩住本机windows API?,c#,.net,winapi,pinvoke,nt-native-api,C#,.net,Winapi,Pinvoke,Nt Native Api,我想使用以下本机API: NtOpenProcess NtOpenThread NtReadVirtualMemory NtWriteVirtualMemory PsCreateSystemThread KiAttachProcess 是否可以从托管C#代码中钩住这些API?如果是这样的话,有人能提供一个如何实现这一点的例子吗?您可以使用原始参数声明NtOpenProcess,然后在声明之前声明DllImport(“kernel32.dll”)(您可以在任何dll/过程组合中使用此方

我想使用以下本机API:

NtOpenProcess 
NtOpenThread 
NtReadVirtualMemory 
NtWriteVirtualMemory 
PsCreateSystemThread 
KiAttachProcess

是否可以从托管C#代码中钩住这些API?如果是这样的话,有人能提供一个如何实现这一点的例子吗?

您可以使用原始参数声明NtOpenProcess,然后在声明之前声明DllImport(“kernel32.dll”)(您可以在任何dll/过程组合中使用此方法)

就这样,

[DllImport("kernel32.dll")]
internal static extern int NtOpenProcess(IntPtr32 arguments...);
这是一个例子


<强> Update <强>:实际上,你想做的事情是从C++中实现的,但是在C++的帮助下。如果你想拦截其他程序的API调用,一个更简单的方法是在C++中使用API(使用本机Windows功能)来拦截API拦截代码,然后将代码+> DLimPult > C++ C++ DLL应用到C语言应用程序中,只做C代码的函数调用。去买一些关于windows系统编程的好书。你已经试着挂接其他API了吗?如果是的话,一旦你试着把这些挂在上面,会发生什么呢?SO的流行意味着人们甚至不再为最基本的研究而烦恼。让我渴望代码项目的日子。我认为这是一个有效的问题,只是表达得很糟糕。但问题的关键是有用的。此外,我想说,仅仅因为这个问题的答案可以通过研究在网上找到,并不意味着它不应该在网上找到。事实上,我宁愿在这里找到答案,也不愿在某个论坛上找到答案。那么,毫无疑问,答案是否定的。这不能从托管代码(如C#)中找到。谢谢您的回答。。我不想使用一些api。正如您在更新中所说,我想截获api。。我必须用C++来拦截API?如果否,如何使用c#进行api拦截?他希望钩住对这些函数的调用,也就是说,在其他应用程序调用它们时接收通知。这在像C#这样的托管代码中是不可能的,并且不能通过简单的P/调用函数来实现。(我本来会投否决票,但在问题关闭时,有人改变了问题,说了些别的话。现在它被重新打开了,所以我修复了它。)事实上,我的答案包括如何拦截其他程序的API调用的指南。它应该在C++库中完成,在C代码中应该是DllImport ed。他将调用他自己的C++代码,这对他来说是正确的。也许我没有充分解释,也许你没有完全阅读它。但是对于C++代码,拦截API调用可能会导致系统不稳定。也许这个问题被编辑了,但OP在评论中说,他想知道哪个程序使用了这些API,所以我们的思路是正确的。