Операционная система Microsoft Windows 3.1 для программиста -том 3

         

Файл selector/selector.cpp


#define STRICT #include <windows.h>

#pragma argsused int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) { UINT uSelCS, uSelDS, uTICS, uTIDS; BYTE szBuf[100];

// Получаем селектор сегмента кода asm mov ax, cs asm mov uSelCS, ax

// Получаем селектор сегмента данных asm mov ax, ds asm mov uSelDS, ax

// Выделяем бит TI. Если этот бит // равен 1, для адресации используется // глобальная таблица дескрипторов, // если 0 - локальная uTICS = (uSelCS & 4) >
>
2; uTIDS = (uSelDS & 4) >
>
2;

// Выводим значения селекторов для сегментов // кода и данных, значения поля TI и номер // кольца защиты wsprintf(szBuf, "CS=%0X \tTI=%d\tRING=%d" "\nDS=%0X \tTI=%d\tRING=%d", uSelCS, uTICS, uSelCS & 3, uSelDS, uTIDS, uSelDS & 3);

MessageBox(NULL, (LPSTR)szBuf, "CS & DS selector's", MB_OK);
return 0; }

Это приложение переписывает текущее содержимое регистров процессора CS и DS в переменные uSelCS и uSelDS. Далее содержимое бита TI селекторов, взятых из регистров DS и CS, переписывается в переменные uTICS и uTIDS, соответственно.

Запустив это нехитрое приложение, вы сможете убедиться, что операционная система Windows версии 3.1 предоставляет приложениям самый низкий уровень привилегий, располагая их в третьем кольце защиты (рис. 2.9).

Рис. 2.9. Содержимое регистров CS и DS

Так как содержимое поля TI равно 1, это означает, что для адресации сегмента кода и сегмента данных используется локальная таблица дескрипторов.

В операционной системе Windows версии 3.1 все приложения используют одну общую локальную таблицу дескрипторов, что в принципе не исключает взаимного влияния приложений. Это означает, что адресные пространства приложений Windows не изолированы друг от друга. Поэтому не пытайтесь загружать в сегментные регистры неправильные селекторы. В следующих версиях Windows каждое приложение будет иметь свое собственное адресное пространство.

Используйте только те селекторы, которые получены приложением от операционной системы Windows.

Файл определения модуля приложения SELECTOR ничем не примечателен и приведен в листинге 2.2.



Содержание раздела