2013-11-28 3 views
0

프로토콜이 사전 정의 된 SSH 에이전트 (PuTTY의 pageant.exe와 유사 함)를 만들고 WM_COPYDATA를 통해 인증 요청을 에이전트 창에 보냅니다.Windows API : 메시지 보낸 사람 (WM_COPYDATA)의 프로세스 찾기

인증을 요청한 프로세스를 표시하려고합니다. 이 때문에 나는 어떤 프로세스가 WM_COPYDATA를 전송했는지 알아야합니다.

마찬가지로 미리 정의되어 있기 때문에 이 아닌 프로토콜을 변경 (예 : 메시지 자체와 함께 프로세스 ID 보내기) 할 수 있습니다.

답변

4

wParam은 메시지를 보낸 창 핸들 인이되도록 만들어진 입니다. (아래의 참고를 참조하십시오.)

그런 다음 GetWindowThreadProcessID을 사용하여 프로세스 ID를 얻은 다음 GetProcessImageFileName의 입력으로 사용하여 프로세스의 이름을 검색 할 수 있습니다.

참고 : @RemyLeBeau가 아래 주석에서 지적했듯이 이것은 물론 을 기반으로하며 실제로는 WM_COPYDATA 메시지를 보낸 창에 제공됩니다. WM_COPYDATA을 전송한다고해서 그 요구 사항이 적용됩니다.

그렇지 않다면 운이 없네요. 그렇게하지 않고 실제로 메시지를 보낸 프로세스를 추적 할 수있는 방법은 없습니다. IsWindow을 사용하여 실제 창 핸들임을 확인할 수는 있지만 실제로 메시지를 보낸 창을 확인하지는 않습니다.

+2

송신자가 'wParam' 필드에 자체 HWND를 지정해야한다는 요구 사항을 준수한다고 가정합니다. 'SendMessage (WM_COPYDATA)'는 그것을 시행하지 않습니다. IsWindow()를 사용하여'wParam'에 유효한 'HWND'가 포함되어 있는지 확인할 수 있지만 악의적 인 발신자가 다른 사람의 'HWND'를 지정하는 것을 막을 수는 없습니다. –

+1

@Remy : 물론 전달 된 HWND가 메시지를 보내는 것으로 가정합니다. 이는 질문에서 묻는 것입니다. 사실이없이 요청 된 정보를 검색하는 방법을 알고있는 다른 방법은 없습니다. 위조 된 HWND 값을 WM_COPYDATA 메시지가있는 wParam으로 전달한 응용 프로그램을 추적 할 수는 없습니까? 그래도 좋은 지적입니다. 나는 그것을 제공하기 위해 당신에게 주어진 적절한 신용으로 나의 대답에 그것을 추가했습니다. –

+0

감사합니다. 그거 슬프다. wParam을 이미 보았습니다. 항상 0입니다. 그게 무언가가 제대로 작동하지 않는다는 것을 처음 듣는 순간입니다 ... – divB