2012-01-21 4 views
2

나는 Detours 3.0을 사용하여 FindWindowA와 FindWindowW를 연결하려고합니다. 이 두 함수는 성공적으로 연결되었고 요청한 클래스와 창 제목을 볼 수 있습니다. 나는 그런후크 FindWindow

if (lpWindowName[0] == buf) 

이나 뭐 같은 단어 일부에 액세스하려고 할 때 :

wcscpy(buf, lpWindowName); 
memcpy(buf, lpWindowName, sizeof(lpWindowName)); 

나는 (후크 프로그램 exeption) 오류가 발생합니다. 나는이 캐릭터에 대한 액세스 권한이 어차피하지만 난 그게 내가 ... 아무것도 이해하지 잘못된 오류 코드를 해달라고

MessageBox(NULL,lpWindowName,lpClassName,MB_OK); 

http://s017.radikal.ru/i421/1201/73/54fa9046a46c.png 사용 읽을 수 있습니다. 이 코드를 사용합니다 :

int filter(DWORD code, struct _EXCEPTION_POINTERS *ep) { 

    char buf[MAX_PATH] = {0}; 
    sprintf(buf,"Exception code: %d", code); 
    MessageBox(NULL,buf,"Error",MB_OK); 
    return EXCEPTION_EXECUTE_HANDLER; 
} 

HWND __stdcall Mine_FindWindowW(LPCWSTR a0, 
    LPCWSTR a1) 
{ 
    __try 
    { 
    if (a1[0] == L'a') 
     return NULL; 
    } 
    __except(filter(GetExceptionCode(), GetExceptionInformation())){ 
    } 
    HWND rv = 0; 
    __try { 
     rv = Real_FindWindowW(a0, a1); 
    } __finally { 
    }; 
    return rv; 
} 

문자열이 손상되지 않았습니다. 모든 작업 ...이 두 매개 변수를 확인하거나 직접 액세스 할 수없는 이유는 무엇입니까?

+1

그건 살인자가 될 것입니다. WM_SETTEXT 메시지를 보내야합니다. –

+0

WM_SETTEXT? o_O – user922871

답변

1

FindWindow에 대한 문서를 확인하십시오.

문자열 매개 변수가 NULL 일 수 있으며 (상관하지 말아야 함) 클래스 이름은 아톰 일 수 있습니다. 이러한 경우 중 하나를 참조 해제하려고하면 액세스 위반이 발생합니다 (예외 코드 -1073741819 = 0xC0000005).

+0

오오오! 메신저 바보! ... 이것에 대해 약 5 시간을 ... =))) 나는 NULL을 잊어 버렸습니다. (이제는 모두 잘 작동합니다!) 감사합니다. 그리고 도와 주려고하는 모든 사람들에게 감사합니다. – user922871

0

예외는 EXCEPTION_ACCESS_VIOLATION (0xC0000005)입니다. a1이 가리키는 점을 들여다보십시오. 첫 번째 추측은 a1입니다 [0] NULL 포인터 역 참조를하고 있습니까? 나는 이것을 디버거에서 실행하고 호출 스택을 검사하여 잘못된 포인터가 어디에서 왔는지 확인합니다.

어떻게 우회를 설정하고 있습니까? 이것은 잘못된 우회의 징후 일 수 있습니다.