Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows


           

Структура CONTEXT


К этому моменту Вы должны понимать, какую важную роль играет структура CONTEXT в планировании потоков. Система сохраняет в ней состояние потока перед самым отключением его от процессора, благодаря чему его выполнение возобновляется с того места, где было прервано

Вы, наверное, удивитесь, но в документации Platform SDK структуре CONTEXT отведен буквально один абзац:

"В структуре CONTEXT хранятся данные о состоянии регистров с учетом специ фики конкретного процессора. Она используется системой для выполнения различ ных внутренних операций. В настоящее время такие структуры определены для про цессоров Intel, MIPS, Alpha и PowerPC. Соответствующие определения см. в заголовоч ном файле WinNT.h"

В документации нет ни слова об элементах этой структуры, набор которых зави сит от типа процессора. Фактически CONTEXT — единственная из всех структур Windows, специфичнаядля конкретного процессора.

Так из чего же состоит структура CONTEXT Давайте посмотрим Ее элементы чет ко соответствуют регистрам процессора. Например, для процессоров x86 в число элементов входят Eax, Ebx, Ecx, Edx и т д., а для процессоров Alpha — IntVO, IntTO, IntT1, IntSO, IntRa, IntZero и др. Структура CONTEXT для процессоров x86 выглядит так.

typedef struct _CONTEXT {

//
// Флаги, управляющие содержимым записи CONTEXT.
//

// Если запись контекста используется как входной параметр, тогда раздел,
// управляемый флагом (когда он установлен), считается содержащим
// действительные значения, Если запись котекста используется для
// модификации контекста потока, то изменяются только те разделы, для
// которых флаг установлен
//
// Если запись контекста используется как входной и выходной параметр
// для захвата контекста потока, возвращаются только те разделы контекста,
// для которых установлены соответствующие флаги. Запись контекста никогда
// не используется только как выходной параметр.
//

DWORD ContextFlags;

//
// Этот раздел определяется/возвращается, когда в ContextFlags установлен
// флаг CONTEXT_DEBUG_REGISTERS. Заметьте, что CONTEXT_DEBUG_REGISTERS

Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий