관리 메뉴

kisoo

ChangeWindowMessageFilter 본문

01.About Programming /9..VC++

ChangeWindowMessageFilter

JamesK78 2009. 2. 20. 10:16

권한이 낮은 어플리케이션에서 높은 어플리케이션으로 메시지를 전송 할때 사용 한다.
권한이 높은 어플리케이션에서 ChangeWindowMessageFilter api 를 사용하여 메세지를  필터에 등록 해 준다. 

단, VISTA 와 WINDOWS 7 에서는 service session 과 user session 이 확연히 분리 되어 있다.
service process area 가 isolation 이라는 것이다. 그러므로 service porcess 와 user process 와 통신 하기 위해서는 아래와 같이 필터 등록 만으로 처리 할 수가 없다.
그렇게 하기 위해서 했던 방법으로는 named pipe or 높은 권한을 가진 service process 에서 user process 를
CreateProcessAsUser 로 실행 해 주는 방법이 있다. 그렇게 하므로써 named pipe 도 가능하게 된다.
이 방법에 대해서는 다음에 자세히 설명 하도록 하겠다.

//함수 선언부

typedef BOOL (WINAPI *CHANGEWINDOWMESSAGEFILTER)(

  UINT message,

  DWORD dwFlag

);

 

위 부분을 선언부에 선언 한 후에 아래의 함수 부분을 어플리케이션 entry function 에 넣어준다.

initdialog or initinstance

WM_COPYDATA의 경우

  1. Admin 권한 프로세스 -> User 프로세스 는 가능
  2. User 프로세스 -> Admin 프로세스는  기본적으로 불가

HANDLE hDll;  
CHANGEWINDOWMESSAGEFILTER ChangeWindowMessageFilter;

 hDll= LoadLibrary("USER32.DLL");

ChangeWindowMessageFilter=(CHANGEWINDOWMESSAGEFILTER)GetProcAddress((HINSTANCE)hDll,"ChangeWindowMessageFilter");

if(ChangeWindowMessageFilter == NULL)
return;

//WM_COPYDATA 메세지를 필터에 등록해준다.
ChangeWindowMessageFilter(WM_COPYDATA,1); //1 = add , 2 = remove

FreeLibrary(hDll);


참조 : http://blog.naver.com/remipa01?Redirect=Log&logNo=90015086046
Comments