1

我們運行兩個應用程序,每個應用程序使用RegisterWindowMessage()註冊相同的消息:應用程序A作爲普通用戶和應用程序B以管理員身份在機器上的相同用戶會話中,並且這些應用程序會將此消息發送給另一個應用程序。 當A和B作爲一個相同的用戶運行時,一切都很好,我們能夠使用PostMessage()消息進行通信。現在,由於應用程序B以管理員消息運行,所以不再需要。我們對於它可以做些什麼呢?Win32:如何將消息發佈到由Windows中的其他用戶運行的進程?

這種情況是否要求我們使用其他機制(除了消息)?

+0

內核命名空間不適用於窗口消息。 – 2013-03-16 04:16:46

+1

爲什麼不使用其他類型的IPC? – rkosegi 2013-03-16 06:40:40

+0

@rkosegi只是不想重新編碼已經編碼的東西。 – Artem 2013-03-18 00:36:52

回答

9

在Windows Vista及更高版本中,User Interface Privilege Isolation (UIPI)可防止較低的完整性進程將窗口消息發送到較高的完整性進程。在早期的Windows版本中,惡意代碼可能會濫用窗口消息來攻擊管理進程。默認情況下,UIPI會阻止所有超過WM_USER的消息,其中包括通過RegisterWindowMessage()註冊的消息。因此,爲了允許A將這些消息發送給B,B必須首先爲其想要從較低完整性進程接收的每個阻止消息調用ChangeWindowMessageFilter()ChangeWindowMessageFilterEx()

+0

傑出!非常感謝,謝謝! – Artem 2013-03-16 18:24:44

+0

像魅力一樣工作! :) – Artem 2013-03-18 00:35:48

相關問題