C# API代码别来发函数原形

来源:百度知道 编辑:UC知道 时间:2024/06/30 04:48:04
VirtualProtectEX和 VirtualQueryEx这2个函数在C#里要如何定义?
我今天试了1天了都没试
请不要来发函数原形
说查MSND的也别说列MSDN看了N次了
还有谁能告诉我API里的数据类型对应C#的数据类型是那些
还有就是完整的WINDOWS API函数文件
我有一个30M的但是是PDF的看起来不太清晰
不足1M的API帮助我多了

全解决我我最后追加100分

VirtualQueryEx基本上只是调用VWIN32.VXD的第40h号Win32 Service(也就是VxDCall 002A0040)。这个Service内部调用VMM的_PageQuery函数。DDK文件中说_PageQuery函数需要一个参数,指向MEMORY_BASIC_INFORMATION结构。

或许是为了避免因为一个不适当的线程切换动作而返回不协调的值(在MEMORY_BASIC_INFORMATION结构中),所以VirtualQueryEx一开始就先取得Krn32Mutex,并在离开时释放之。它是以未公开的KERNEL32_EnterSysLevel和_LeaveSysLevel函数完成这些工作的。

第43h号VWIN32 Service,也是填写MEMORY_BASIC_INFORMATION结构,就比简单的_PageQuery外包函数更多一些。目前我还不能够确切地说它到底做了什么事情,然而很显然这个函数必须知道查询对象(进程)的当前线程的ring0 stack的地址。因此,在调用VWIN32 Service之前,VirtualQueryEx使用hProcess参数取得一个指针,指向进程的结构PDB。从那个地方,VirtualQueryEx取得当前线程的Thread Database,交给VWIN32 Service。有趣的是,在仔细观察第43h号VWIN32 Service数次之后,老实说,我未曾发现这个程序代码除了调用_PageQuery之外还作了些什么。

VirtualQuery和IVirtualQuery

VirtualQuery只不过是VirtualQueryEx的一个特例。VirtualQuery获取当前进程中某个地址的信息,而VirtualQueryEx可以取得任何进程的地址信息。

VirtualQuery的虚拟代码似乎没有什么值得说的,它只是检验参数的合法性。它看看一个被指针所指的缓冲区是否大到足够容纳MEMORY_BASIC_INFORMATION结构。假设答案是肯定的,VirtualQuery就跳到IVirtualQuery去。VirtualQuery先做参数检验,再跳到一个内部函数中去,这是System