Палец вверх 2
Перевод
Перевод

Крюк FindWindow

Я пытаюсь подключить 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;
}

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

c++ winapi hook detours
задан user922871 21 янв. 2012 г., 21:37:49
источник

2 ответа

Решение 1
Перевод
Перевод

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

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

ответ дан arx 22 янв. 2012 г., 1:46:31
источник
Палец вверх 0
Перевод
Перевод

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

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

ответ дан thpatel 22 янв. 2012 г., 1:55:22
источник