2013-02-04 48 views
1

我用VirtualAllocEx来对远程进程保留一些像这样的空间:检查VirtualFreeEx已完成/执行

VirtualAllocEX (RemoteProcessHandle, nil, SizeInBytes, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE); 

然后我“补” /与WriteProcessMemory

然后写分配的地址空间我正确使用

VirtualFreeEx (RemoteProcessHandle, Address, 0, MEM_RELEASE); 

释放分配的空间。

是否有可能检查的VirtualAllocExVirtualFreeEx后的地址被称为检查VirtualFreeEx是成功的?

+1

['VirtualFreeEx'](http://msdn.microsoft.com/en-us/library/windows/desktop/aa366894(v = vs.85).aspx)函数返回BOOL,因此只需检查该值当你打电话时。 – TLama

+0

对不起,我不够确切。我的意思是可以在VirtualFreeEx被调用后检查它。 (说另一个线程想要检查这个空间是否最近被VirtualFreeEx释放了 –

+0

你可以使用VirtualQueryEx来确定这个地址是分配的还是空闲的,但是如果地址*被分配了,那么没有办法确定这是你的分配还是某个人else。 –

回答

3

只要您将地址返回给系统,该地址的任何未来引用都将无效。一旦您成功拨打VirtualFreeEx,您就不能再次参考Address。一旦你将地址返回给系统,系统就拥有它。该地址在未来有效的唯一方法是通过再次致电VirtualAllocEx

+0

谢谢,我只是不知道系统实际上拥有这个地址在未来:/ –