|
|
|
|
Метод открытого обработчика
Для обнаружения наличия менеджера расширенной памяти с помощью метода открытого обработчика используется ряд системных вызовов файлов DOS, для
выявления присутствия драйвера устройства менеджера расширенной памяти и, в случае его присутствия, для определения его способности обслуживать
запросы для прерывания 67h. Метод действует следующим образом:
1. Выполняется вызов открытого обработчика DOS (функция DOS - 3Dh), определяющий доступ только по чтению (режим 0) с именем пути доступа EMMXXXX0.
Это - имя драйвера символьного устройства
менеджера расширенной памяти, который был установлен во время
первичной загрузки, если для драйвера устройства менеджера расширенной памяти в файле CONFIG.SYS было указано DEVICE=элемент.
2. Если вызов открытого обработчика не выполняется с кодом
возврата "не найдено имя файла или пути доступа", то Вы можете
полагать, что расширенная память отсутствует. Вызов открытого обработчика может также не выполниться, если все обработчики файлов
DOS используются перед тестом наличия. Для предотвращения этого
Ваша программа должна выполнять тест наличия расширенной памяти
до открытия любого другого файла.
3. Если вызов открытого обработчика завершается успешно, это
показывает, что существует файл или устройство с именем менеджера
расширенной памяти. Для того, чтобы установить, относится ли обработчик, возвращенный на шаге 1, к устройству или файлу, выдайте
вызов "Управление ввода/вывода для устройств" (IOCTL) - функция
DOS 44h - с подфункцией "Получить информацию об устройстве" (регистр AL=00h) для обработчика файла, возвращенного на шаге 1.
4. Если обработчик принадлежит устройству, бит 7 регистра DL
будет равен 1, что показывает на присутствие менеджера расширенной памяти. Если бит 7 равен 0, обработчик связан с файлом, так
что Вы можете полагать, что расширенная память отсутствует.
5. Если обработчик ссылается на устройство, выдайте вызов
IOCTL с подфункцией "Получить выходное состояние" (регистр
AL=07h) для данного обработчика, для того чтобы определить готовность менеджера расширенной памяти обрабатывать запросы на обслуживание
расширенной памяти.
6. Если менеджер расширенной памяти готов обрабатывать запросы обслуживания расширенной памяти, по вызову IOCTL возвратится значение 0FFh в регистре
AL. В противном случае менеджер расширенной памяти отсутствует или неспособен обрабатывать запросы
на обслуживание расширенной памяти.
7. Если начальный открытый обработчик DOS достиг цели, закройте его с помощью вызова закрытия обработчика (функция DOS 3h).
Данный обработчик более не нужен, поскольку дальнейшее общение
между менеджером расширенной памяти и Вашим приложением происходит через интерфейс прерывания 67h и не использует файловую систему DOS.
|
|