Вопрос или проблема
Debug.exe не работает как ожидалось в Windows 10 32-бит.
Если я пытаюсь запустить debug из командной строки (CMD.EXE), я получаю ошибку:
16-битная подсистема MS-DOS, NTVDM обнаружила системную ошибку 4001h.
Если вместо этого я нажимаю “Пуск”, ввожу ‘command.com’ и затем выбираю command.com из списка, при попытке запустить debug я получаю: “Система не может выполнить указанные программы.”
Если вместо этого я использую проводник для поиска command.com или debug.exe в директории \windows\system32 и дважды щелкаю по ним, debug запускается нормально.
Последняя интересная особенность заключается в том, что даже если я запускаю debug, я не вижу BIOS, отображенный в f000:0. Это была техника, которую я использовал для получения информации о BIOS внутри Windows.
Мои вопросы: существуют ли настройки или другие виды конфигурации, которые заставят debug.exe отображать BIOS, как это было в Windows XP? Можно ли исправить проблему с запуском 16-битных программ внутри CMD.EXE?
Первый вопрос: Нет, BIOS не может быть прочитан из Windows 10.
Обновление: в 32-битной версии Windows 10 BIOS может быть прочитан через новый API, если вы знаете, как им пользоваться. Остальная часть моего комментария точна относительно существующих утилит.
Вот пример API для получения BIOS:
// Запрос размера данных BIOS.
BIOSDataSize = GetSystemFirmwareTable('FIRM', 0xE0000, NULL, 0);
// Выделение памяти для данных BIOS
BIOSData = (char*) HeapAlloc(GetProcessHeap(), 0, BIOSDataSize);
// Получение таблицы BIOS
bytesRead = GetSystemFirmwareTable('FIRM', 0xE0000, BIOSData, BIOSDataSize);
Я обнаружил, что могу видеть что-то похожее на BIOS, если нажимаю “Пуск”, набираю ‘debug’, щелкаю правой кнопкой мыши и выбираю “Запуск от имени администратора”. Это НЕ настоящий BIOS машины.
Я загрузил систему с Windows XP и вижу совершенно другой BIOS на f000:0. Используя XP для чтения, я вижу “IBM COMPATIBLE IBM IS A …”
Загружаясь с Windows 10 и запуская debug.exe из меню “Пуск”, на f000:e000 я вижу “4504512 SoftPC 4.00 (C) Copyright Insignia Solutions Inc. 1995”.
Я делаю вывод, что настоящий BIOS намеренно недоступен в Windows 10, и нет способа его прочитать из Windows.
Второй вопрос: нет и да. Я не нашел способа запустить debug.exe из окна CMD. Обходной путь — создать запланированное задание и запустить его.
См.: Запланировать задачу с правами администратора без запроса пользователя в Windows 7
.
Ответ или решение
Настройка и использование программы debug.exe в Windows 10 может вызвать определенные сложности, особенно с учетом поддержки 16-битных приложений. Проблемы с совместимостью в современных версиях Windows часто возникают из-за отказа от устаревших технологий, и в данном случае речь идет о запуске 16-битных программ. Рассмотрим возможные решения и объясним, почему возникают подобные трудности.
Проблемы с запуском и возможные решения
-
Ошибка "16 bit MS-DOS Subsystem, NTVDM has encountered a System Error 4001h"
В Windows 10, поддержка 16-битных приложений ограничена, особенно в 64-битной версии ОС. Однако, вы упомянули, что используете 32-битную версию, что делает возможным использование NTVDM (NT Virtual DOS Machine). Эта ошибка может возникнуть из-за повреждения компонента NTVDM или его некорректных настроек. Для решения попробуйте:- Убедиться, что компонент NTVDM активирован. Для этого откройте Panel управления -> Программы и компоненты -> Включение или отключение компонентов Windows и убедитесь, что галочка напротив "Поддержка NTVDM" установлена.
- Если проблема не решается, возможно, файл NTVDM поврежден и требует восстановления системы или переустановки.
-
"The system cannot execute the specified program" при использовании command.com
Эта ошибка может указывать на несовместимость или отсутствие необходимых компонент программы. Использовать debug.exe через command.com может не всегда быть корректно из-за различий в обработке 16-битных приложений в текущем окружении. -
Запуск через Проводник
Если двукратное нажатие на debug.exe позволяет запустить его успешно, это показывает, что само приложение корректно, но могут возникать изменения в окружении при использовании других методов запуска (например, через командную строку).
Доступ к BIOS из Windows 10
Доступ к BIOS из среды Windows 10 сильно ограничен. Поддержка прямого доступа к адресам памяти BIOS (например, f000:0) была более доступна в Windows XP, но в современных системах, таких как Windows 10, доступ осуществляется через API, что повышает безопасность.
Пример использования API для получения данных BIOS:
// Определение размера данных BIOS.
BIOSDataSize = GetSystemFirmwareTable('FIRM', 0xE0000, NULL, 0);
// Выделение памяти для данных BIOS
BIOSData = (char*) HeapAlloc(GetProcessHeap(), 0, BIOSDataSize);
// Извлечение таблицы BIOS
bytesRead = GetSystemFirmwareTable('FIRM', 0xE0000, BIOSData, BIOSDataSize);
Запуск debug.exe с правами администратора
Для запуска debug.exe с повышенными правами следует:
- Использовать запуск от имени администратора, что может требовать корректной настройки UAC (User Account Control) или создания задачи в планировщике заданий. Для этого:
- Откройте планировщик задач.
- Создайте новое задание с указанием debug.exe в качестве запускаемой программы.
- Убедитесь, что пункт "Выполнять с наивысшими правами" выбран.
Заключение
Средства работы с BIOS и запуск 16-битных приложений, таких как debug.exe, в современных версиях Windows требуют соблюдения дополнительных условий, связанных с настройкой системы и правами доступа. Учитывая вышеизложенные рекомендации, можно достигнуть большей совместимости и устранить возникшие проблемы.