2012-09-04 43 views
0

我該如何解決這個問題?代碼工作正常,因爲我在32位計算機上測試它,但我的64位計算機使用getlasterror()返回該錯誤;CreateRemoteThread在win7上返回ERROR_ACCESS_DENIED(5)64位

我能做些什麼來解決這個問題?

+0

你能澄清什麼是32位和什麼是64位?當你說「我的64位計算機」時,你的意思是在運行64位操作系統的計算機上?或者當代碼被編譯成64位可執行文件?或者當您在64位遠程進程上調用CreateRemoteThread時?或者是什麼? (另請參閱[此問題]的答案(http://stackoverflow.com/questions/9456228/createremotethread-returning-error-access-denied-windows-7-dll-injection)) –

+0

我的電腦運行在64-位操作系統,我編譯的問題爲32位。 – lolwut123

+0

您是否嘗試附加到64位進程? –

回答

0

部分信息:

當我和CreateRemoteThread在Win2000工作,一切工作除了案件罰款時,我就在那屬於不同的終端服務器會話進程啓動遠程線程。在Win2003上(以及),所有系統進程都在TS會話0中工作,這與您當前登錄的交互式會話不同。那時,我還沒有設法解決TS會話邊界問題。這是您可能需要首先檢查的內容。

這很可能不是32/64位問題,而是某種需要特殊權限和/或權限的安全問題。

+0

我認爲openProcess請求這些權限,所以我給它(PROCESS_ALL_ACCESS) – lolwut123

+0

不,這是不正確的。我從MS內部的可靠來源確定這一點。向OpenProcess參數控制你可以用流程本身的句柄來做什麼。其他行動是一個單獨的故事。 –

0

我要去猜測,你的目標進程託管可執行文件,編爲「任何CPU」 ......

如果是這樣,當您啓動64位Windows是exe文件,它將JIT編譯到64位的代碼,從而變成了64位的進程。

然後,您不能從32位進程調用CreateRemoteThread。

在32位Windows上啓動的相同Managed exe將JIT轉換爲32位代碼,因此可以工作。

如果是這種情況,並且您是受管理的exe文件的作者,請重新構建它的x86版本。