2011-04-29 2 views
1

원격 호출을 사용하여 대상 주소 공간에 .NET SpyLib를 주입 중입니다. GetWindowThreadProcessId을 통해 해당 원격 프로세스를 생성 한 해당 창 스레드로 메시지를 보내야합니다.왜 GetWindowThreadProcessId가 0을 반환합니까?

저는 Windows 7에서 작업하고 있습니다. 불행히도 대부분 0을 반환합니다. 때로는 적절한 스레드 ID를 제공합니다 (Windows를 다시 시작한 후).

GetWindowThreadProcessId으로 왜 이상한 동작이 발생합니까?

+0

이 페이지의 "커뮤니티 콘텐츠"섹션을 참조하십시오. http://msdn.microsoft.com/en-us/library/ms633522%28v=vs.85%29.aspx. GetWindowThreadProcessId는 HWND 매개 변수가 유효하지 않은 경우 0을 반환합니다. 또한이 경우 GetLastError()의 값은 무엇입니까? –

+0

GetLastError()는 1400 = "invlid hWnd"를 반환합니다. 그러나 oint는 어떻게 처리합니까? invlid hWnd ID가 될 수 있습니까? 그것은 올바른 숫자 값을주고 있기 때문입니다. – Usman

답변

2

GetWindowThreadProcessId에 대한 MSDN 설명서에는 사용자의 질문에 대해 2 년 전에 DDeBen이 이미 질문에 대답 한 커뮤니티 콘텐츠 섹션이 있습니다. :)

GetWindowThreadProcessId는 0을 반환하고 변수는 핸들 HWND가 유효하지 않은 경우 약간 변형되지 lpdwProcessId 에 의해 지적했다. GetLastError()는 87을 반환합니다 (ERROR_INVALID_PARAMETER).

나중에 확실하지 않은 오류 상태가 발생할 때 GetLastError()이 Win32 API로 이동해야하는 것을 기억하는 데 도움이 될 수 있습니다. MSDN은 일반적으로 링크를 제공하지만 그렇지 않은 경우에도 체크 아웃 할 수 없습니다. 그러나 관리 코드 GetLastError()에는 special treatment이 필요합니다. 그렇지 않으면 가짜 결과로 끝나기 만하면 혼란 스러울 것입니다.

+0

비록 그것이 연결하고자하는 해당 프로세스의 유효한 숫자 ID이지만, 그것이 달라질 때마다 1028,1439라고 말합니다. 나에게 이것은 GetWndowThreadProcessId가 호출되는 해당 프로세스에 대한 유효한 식별자입니다. 필자의 경우, 유효한 식별자 (유효한 hWnd)인지, 내 경우처럼 항상 숫자 값을 부여 하는지를 확인하는 방법이있다. – Usman

+0

커뮤니티 댓글 섹션은 현재이 페이지와 같이 자주 누락되거나 최소한 평소와 다른 위치에 있습니다. 지금은 페이지에 없습니다. – Celess