2013-02-04 45 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

謝謝,我只是不知道系統實際上擁有這個地址在未來:/ –