1

두 개의 응용 프로그램을 실행하고 각 응용 프로그램은 RegisterWindowMessage()를 사용하여 동일한 메시지를 등록합니다. 응용 프로그램 A는 일반 사용자로, 응용 프로그램 B는 시스템의 동일한 사용자 세션에서 관리자로,이 응용 프로그램은이 메시지를 서로에게 보냅니다. A와 B가 같은 사용자로 실행되면 모든 것이 좋았으며 PostMessage() 메시징을 사용하여 통신 할 수있었습니다. 이제 응용 프로그램 B가 관리자 메시지로 실행될 때 더 이상 문제가 발생하지 않습니다. 우리는 그것에 대해 무엇을 할 수 있습니까?Win32 : Windows에서 다른 사용자가 실행하는 프로세스에 메시지를 게시하는 방법?

이 상황에서 메시지 이외의 다른 메커니즘을 사용해야합니까?

+0

커널 네임 스페이스는 창 메시지에 적용되지 않습니다. –

+1

왜 다른 종류의 IPC를 사용하지 않습니까? – rkosegi

+0

@rkosegi 이미 코딩 된 코드를 다시 코딩하고 싶지 않았습니다. – Artem

답변

9

Windows Vista 이상에서는 User Interface Privilege Isolation (UIPI)이 낮은 무결성 프로세스가 창 메시지를 높은 무결성 프로세스로 보내는 것을 방지합니다. 이전 Windows 버전에서는 악성 코드가 창 메시지를 잘못 사용하여 관리 프로세스를 공격 할 수있었습니다. 기본적으로 UIPI는 WM_USER 이상의 값을 가진 모든 메시지를 차단하며 여기에는 RegisterWindowMessage()을 통해 등록 된 메시지가 포함됩니다. 따라서 A가 B에게 이러한 메시지를 보내도록하려면 B는 낮은 무결성 프로세스에서 수신하려는 차단 된 각 메시지에 대해 ChangeWindowMessageFilter() 또는 ChangeWindowMessageFilterEx()을 먼저 호출해야합니다.

+0

뛰어난! 정말 고마워, 고마워! – Artem

+0

매력적이었습니다! :) – Artem