2011-09-05 15 views
0

我需要一個問題的幫助。我有兩個進程在運行,一個是看門狗,另一個是簡單的測試過程。我需要進程2從看門狗調用代碼,我這樣做的原因是爲了減少進程2的大小。例如進程2必須從看門狗調用一個名爲「IsSafe」的函數。 IsSafe函數依賴於屬於看門狗進程的其他代碼,並且不可能爲流程2重寫此代碼。我想到了一些想法,請您告訴我哪個是最佳解決方案並提供建議。執行屬於其他進程的外部函數

思想一個

使用命名管道和進程間通信傳遞參數和周圍返回值。

理念兩個

使用共享內存共享參數和返回值

理念三

使用Windows的消息,老實說,我認爲這是不行的

理念四個

以某種方式創建共享內存的可執行部分並使用遠端jmp執行此代碼。

請您指教。

+0

沒有DLL的愛? :( –

+3

爲什麼你想減少過程2的大小?你可能只是創造一個更大的問題... – Roddy

+3

想法5把處理2需要的代碼放入進程2中。 –

回答

0

雖然把代碼放在需要調用它的進程中是很好的建議,但在使用單獨進程的看門狗(也是調試器和任何其他形式的錯誤處理程序)的特定情況下是正確的。你不希望看門狗由於主代碼中的錯誤而失敗,所以它需要是一個單獨的過程。

命名管道在這種情況下是理想的,TransactNamedPipe function就是爲此而設計的。

2

RPC早就發明了。然後COM在上面。在我看來最好忘記你的想法,但如果你必須使用COM。

順便說一下,要在不使用COM的同一Windows計算機上的進程之間進行通信,請使用郵槽。

似乎你忘了他們在你的名單。

乾杯&心連心,

0

DLL是它的滿載兩個地址空間,但在物理內存共享標準實現的想法4。你不需要特別的技巧;它隨處可用,Windows將爲您處理任何安全問題。

它也可移植到大多數其他操作系統,儘管它們通常被稱爲別的東西,例如, .so在Linux上。

+0

我不想使用dll,因爲進程2不是我的進程,它被dll掛鉤,dll必須檢查它是否必須繼續使用掛鉤函數,這需要相當多的代碼,此代碼需要運行通過看門狗cus它獲得了驗證過程所需的額外信息 –

+0

我該如何去做這件事? –

0

所有你真正需要的是一些IPC。對於輕量級且簡單的解決方案,只需使用WM_APP定義特定於應用程序的消息並從wParam/lParam中爲參數定義一個映射。如果你發現你需要多於8個字節,你可以使用WM_COPYDATA來代替。

相關問題