2010-11-06 2 views
1

Я хочу обнаружить возможные аппаратные точки останова в моем приложении. Для этого мне нужен доступ для чтения для регистров отладки. Прямой доступ не представляется возможным, так что я сделать это таким образом:Доступ к регистрам отладки в Windows 7 x64

HANDLE thread = GetCurrentThread(); 

WOW64_CONTEXT context; 
context.ContextFlags = CONTEXT_FULL; 
BOOL status = Wow64GetThreadContext(thread, &context); 

if (!status) 
    return -1; 

std::cout << std::hex << context.Dr0 << " " << context.Dr1 << " " << context.Dr2 << " " << context.Dr3 << " " << std::endl; 

То, что я вижу на стандартный вывод является: CCCCCCCC CCCCCCCC CCCCCCCC CCCCCCCC даже если есть забираемой горячей точки останова, установленные мной.

Нужны ли мне специальные разрешения для доступа к этим регистрам? Приложение 32 бит, но я работаю над Windows 7 x64, если это имеет значение.

ответ

1

Неверное значение ContextFlags, вам необходимо CONTEXT_ALL включить CONTEXT_DEBUG_REGISTERS.

0

, цитируя MSDN: Если вы вызываете Wow64GetThreadContext для текущего потока, функция возвращается успешно; однако возвращенный контекст недействителен.