Крюк FindWindow - PullRequest
       8

Крюк FindWindow

2 голосов
/ 21 января 2012

Я пытаюсь подключить FindWindowA и FindWindowW, используя Detours 3.0. Эти две функции успешно подключены, и я вижу запрошенный класс и заголовок окна. Но когда я пытаюсь получить доступ к любому слову, например,

if ( lpWindowName[0] == buf ) 

или что-то в этом роде:

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

Я получаю сообщение об ошибке (исключение в подключенной программе). У меня нет доступа к этой строке, но я могу прочитать ее, используя

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;
}

И строка не повреждена. Все работает ... почему я не могу проверить или иметь прямой доступ к этим двум параметрам?

Ответы [ 2 ]

1 голос
/ 22 января 2012

Проверьте документы для FindWindow .

Любой строковый параметр может быть НЕДЕЙСТВИТЕЛЕН (то есть не имеет значения), а имя класса может быть атомом.Попытка разыменования строки в любом из этих случаев приведет к нарушению доступа (код исключения -1073741819 = 0xC0000005).

0 голосов
/ 22 января 2012

Исключение, которое вы получаете: EXCEPTION_ACCESS_VIOLATION (0xC0000005).Посмотрите, на что указывает a1.Первое предположение: a1 [0] выполняет разыменование нулевого указателя?Я запустил бы это в отладчике и проверил бы стек вызовов, чтобы увидеть, откуда исходит плохой указатель.

Как вы настраиваете обходы?Это может быть проявлением неправильного объезда.

...