--------------------------------------------- *** 15.03.2024 *** --------------------------------------------- ! При запрещённом вводе сообщений мыши GetNumberOfConsoleInputEvents мог возвращать завышенное число клавиатурных сообщений. ! Многократные вызовы HeapReAlloc с мелкими блоками могли разрушить хип. ! Многократные вызовы SetEnvironmentVariable могли разрущить хип. --------------------------------------------- *** 11.04.2022 *** --------------------------------------------- * Разрешить PE с TLS-процедурами и без TLS-данных. --------------------------------------------- *** 06.11.2021 *** --------------------------------------------- * Module32First всегда возвращал ошибку. --------------------------------------------- *** 28.09.2020 *** --------------------------------------------- * Добавлено несколько "заглушек". --------------------------------------------- *** 16.05.2019 *** --------------------------------------------- ! WiteCharToMultibyte всегда останавливалась на 0 в w-строке. --------------------------------------------- *** 16.02.2019 *** --------------------------------------------- ! Эмулятор LFN мог возвращать ошибку при работе с сетевыми дисками. --------------------------------------------- *** 30.05.2018 *** --------------------------------------------- * nt-kmd драйвер поправлен для возможности работы в Win10 bild 1803+. --------------------------------------------- *** 26.04.2018 *** --------------------------------------------- ! Исправлена ошибка в SetFilePointerEx. --------------------------------------------- *** 19.01.2018 *** --------------------------------------------- * nt-kmd драйвер поправлен для возможности работы в Win10 bild 1703+. --------------------------------------------- *** 29.05.2017 *** --------------------------------------------- ! Уточнено определение наличия поддержки LFN. ! В некоторых случаях число кнопок мыши было неверным. --------------------------------------------- *** 04.04.2017 *** --------------------------------------------- ! При запуске задачи stub'ом у неё оказывались закрытые прерывания, до первого обращения к BIOS'у. ! GetShortPathName/GetLongPathName при вызове с отрицательным счётчиком не корректно обрабатывали запросы про корневой каталог. --------------------------------------------- *** 29.08.2016 *** --------------------------------------------- ! Эмулятор LFN мог возвращать Path Not Found вместо File Not Found. ! При работе под отладчиком портился LastError. ! При нехватке памяти для загрузки задачи диагностика выдавалась не всегда. --------------------------------------------- *** 15.04.2016 *** --------------------------------------------- ! GetProcaddress для не найденных процедур при отсутствии extension DLL мог зацикливаться (ошибка была внесена 08.07.2015). * Небольшая коррекция документации. ! Исправлено поведение LCMapString с положительным счётчиком. --------------------------------------------- *** 06.12.2015 *** --------------------------------------------- * Добавлен обход ошибки NTVDM-консоли Win8+. ВНИМАНИЕ: В Win10 должен быть установлен режим 'Use legacy console'. --------------------------------------------- *** 27.07.2015 *** --------------------------------------------- ! Исправлено поведение заглушки ResetEvent. --------------------------------------------- *** 08.07.2015 *** --------------------------------------------- + Возможность работы в Vista+ при включенном DEP. * nt-kmd драйвер поправлен для возможности работы в Win8. * При работе в NT4 автоматически включается запрет LFN. ! Исправлено поведение таймерных ф-ций в Vista+. ! Исправлена ошибка в MessageBoxEx. --------------------------------------------- *** 05.06.2015 *** --------------------------------------------- ! Исправлена ошибка в MultiByteToWideChar/WideCharToMultiByte - преобразование останавливалось по 0 независимо от указанных счётчиков. + Добавлены имплементации GetEnwironmentStringsW/FreeEnvironmentStringsW (ранее были unimplemented-заглушки) - для программ собранных VC10. + Добавлена заглушка IsProcessorFeaturePresent (тоже для программ от VC10). *+ Изменена работа с Extension DLL,- новый вариант дает возможность перекрывать "заглушки" (подробности см п. 1.5. doswin32.txt). ** Добавлен "хак" для обхода ошибки инициализации программ собранных RAD-Studio. *+ Добавлены частичные имплементации (FindFirstFileExA, SetFilePointerEx, InitializeSListHead) и заглушки (GetModuleHandleExW, SystemFunction036) для тривиальной поддержки VC15 ** Различные мелкие исправления. *+ Номер билда (GetVersion...) изменён на 23 (0x17). * nt-kmd драйвер поправлен для возможности работы в текущем апдейте ядра Win7. На будущее - теперь инталятор прописывает его так, что бы он не грузился в safe-mode. --------------------------------------------- *** 01.02.2014 *** --------------------------------------------- * В NT-driver добавлена поддержка XPsp4 (и старших sp's vista/win7) * Уточнение обработки ENABLE_WINDOW_INPUP --------------------------------------------- *** 07.08.2013 *** --------------------------------------------- * Добавлены заглушки для EncodePointer, DecodePointer и HeapSetInformation --------------------------------------------- *** 26.03.2012 *** --------------------------------------------- * Добавлена заглушка для SetWindowTextA --------------------------------------------- *** 22.08.2009 *** --------------------------------------------- * Добавлена имплементация GetModuleHandleW (для CRTL vc9) ! FindFirstFile не работал если второй аргумент перекрывал первый --------------------------------------------- *** 20.01.2009 *** --------------------------------------------- * Добавлена 'заглушка' для mouse_event --------------------------------------------- *** 10.02.2008 *** --------------------------------------------- * Несколько косметических изменений для работы в Windows Vista --------------------------------------------- *** 29.12.2007 *** --------------------------------------------- * В драйвере для NT добавлен обход ошибки привнесённой ms в ядро ~08.2007 (вокруг SafeSEH) и добавлена поддержка Syser Debugger --------------------------------------------- *** 14.11.2007 *** --------------------------------------------- ! Был потерян атрибут каталога в int 21 71/56 --------------------------------------------- *** 19.09.2007 *** --------------------------------------------- * Добавлены 'заглушки' для IsValidSid или EqualSid. --------------------------------------------- *** 25.05.2006 *** --------------------------------------------- ! Исправлена "потерявшаяся" обработка "нового формата" GetShortPathName ! Ротатор файловых хэндлов (когда их недостаточно) считал что свободных на 1 больше чем было в реальности --------------------------------------------- *** 13.04.2006 *** --------------------------------------------- * Мелкие изменения для работы с 'дополнительными' блочными устройствами (напр. DOS-NTFS). --------------------------------------------- *** 10.03.2006 *** --------------------------------------------- * Добавлены экспорты CharPrev[/Next]Ex и несколько "заглушек. + В отладочном драйвере для NT изменён метод автодетекта для правильной работы на многопроцессорных/многоядерных машинах. Поскольку новый драйвер не может работать на процессорах младше Pentium, в архив включен файл old_ntdi.zip со старым драйвером. --------------------------------------------- *** 01.02.2006 *** --------------------------------------------- * В dw32reg.exe добавлена поддержка комментариев. --------------------------------------------- *** 20.12.2005 *** --------------------------------------------- * В парсере dw32reg.exe исправлено вычисление номера строки с ошибкой --------------------------------------------- *** 23.09.2005 *** --------------------------------------------- + Добавлено некоторое число "заглушек" (NOT_IMPLEMENTED) в kernel32 и advapi32. --------------------------------------------- *** 05.08.2005 *** --------------------------------------------- ! Исправлена ошибка (stack) в WideCharToMultiByte при lpDefaultChar != NULL * Добавлен контроль недопустимости сохранения registry из обработчика исключения переполнения стека и/или при снятии задачи с невалидным стеком. Попытка вызова RegFlushKey из обработчика исключения переполнения стека возвращает ERROR_CALL_NOT_COMPLETE. * Слегка ускорено сохранение registry на диск (по RegFlushKey или завершению задачи) --------------------------------------------- *** 05.05.2005 *** --------------------------------------------- + Добавлена имплементация GetProcessAffinityMask (в виде аналогичном w9x) и некоторое число "заглушек" (NOT_IMPLEMENTED) в kernel32 и advapi32. * Слегка изменён DuplicateHandle (теперь допустимо "дублировать" CurrentProcessHandle и CurrentThreadHandle для особо "умных" программ) * Слегка изменено состояние стека при запуске программы (для "поддержки ошибок" jvm :) --------------------------------------------- *** 14.11.2004 *** --------------------------------------------- ! При загрузке регистри некорректно обрабатывалась ситуация нескольких идущих подряд значений типа BINARY со сравнительно большой длиной. ! Добавлена совместимость lfn-запросов 6C и 4E к DOS-устройствам последовательного доступа (обход ошибки некоторых версий command.com) ! Исправлена ошибка lfn rename при максимальной (для DOS'а) длине входного пути. --------------------------------------------- *** 26.10.2004 *** --------------------------------------------- + Добавлен экспорт ShowWindow --------------------------------------------- *** 15.09.2004 *** --------------------------------------------- * С целью повышения "похожести" на win32, консоль переводится в режим, когда нет blinking'а (а есть "светлый" фон). Ну а, соответствующий int 10 из задачи, теперь относится к разряду "игнорируемых". * Слегка изменён механизм отдачи time-slice в Win9x. Иначе при "слишком частой" отдаче они умудряются переводить задачу в глухой idle. + Добавлена "заглушка" для DebugActiveProcess. + Добавлена _частичная_ имплементация SHGetFolderPathA - только для CSIDL_APPDATA. В качестве ответа возвращается путь вида: \DW32APP.DAT Подразумевается, что такой каталог должен быть (он включен в архив). * VirtualQueryEx раньше отдавал "смешанные" значения для самого отладчика и отлаживаемого процесса (поскольку никому эти отличия были не важны :). * Несколько "косметических" правок для совместимости с ida-debugger'ом * * * * В dpmi32.lib добавлены вышеописанные импорты --------------------------------------------- *** 09.09.2004 *** --------------------------------------------- * Несколько изменено поведение RegEnumKeyValues при недостаточном размере буферов (сделано более похожим на то что в win32). * В регистри разрешены значения всех типов (кроме REG_DWORD :), с нулевой длиной (хотя это не документировано, но win32 это позволяет). * Запрещена работа с "типом" REG_NONE (непонятно что с ним делать). * Более жёсткий контроль файла registry на старте. + Добавлен код обхода ошибок VirtualPC в её инкарнации для MAC'а :). Под последними версиями VMware тоже работает а свежий bochs требует уже почти только косметических патчей :). * На некоторых биосах [un]registered сообщение портило цвет последующих выводов на дисплей. ! При включенной поддержке lfn запросы (16битовых задач) на запись CD :), возвращали неверный код ошибки, а из 32хбитовых задач любые запросы возвращали ошибку. НАПОМИНАНИЕ: lfn для CD не поддерживается, причём короткие имена видны в iso9660 (так же как в dos'е), а не так как в Win32. ! При наличии в системе фантомного драйва и указании недопустимо длинного имени в DW32LOG, на инициализации могло портится несколько служебных переменных. * Если DosWin32 запущен с CD (strongly not recommended), а registry за время работы была модифицирована, то при завершении работы теперь НЕ выдаётся сообщение о невозможности её записать. + Появилась ещё одна environment переменная 'dw32lim' для которой может быть указано значение от 8 до 1024. Это значение ограничивает объём памяти (в MB) "захватываемой" хостом при старте. + Появилась возможность разрешать запуск задач использующих 16битовые экстендеры (точнее - сами экстендеры) при загруженном DosWin32. Это можно делать ТОЛЬКО при загруженном emm386. Механизм см. ниже. Однако такая работа есть 'strongly not recommended' :). + Теперь можно "замаскировать" присутствие DosWin32 для задач проверяющих multitasking environment. + Полностью изменён алгоритм захвата/особождения/валидации памяти под хэндлы/регистри (и Local- GlobaAlloc'а). Всё ради того, что бы, "speed of validation has increased drammatically" ;-). Работа с хипом пока оставлена по старому (иначе получается слишком много потенциально опасных правок одновременно). ! Несколько мелких исправлений [внутренних] некритических ошибок. ВНИМАНИЕ: поскольку одна из них относится к nt-kmd, то его (настоятельно) рекомендуется переставить ПРИМЕЧАНИЕ: инсталлятор теперь умеет ставить kmd "поверх" старого (хотя, разумеется, изменения вступают в силу только после перезагрузки). + Добавлены имплементации ntohl/htonl/ntohs/htons - часть совершенно "несетевых" задач стала ими пользоваться :(. Так же добавлены "заглушки" для PlaySound и sndPlaySound. + При "падении" задачи по exception 01, теперь есть более подробная расшифровка причины (errorcode = осмысленная часть Dr6). ПРИМЕЧАНИЕ: Полноценно это работает только в DOS'е - NT "теряет" информацию от ttrap'е, а w9x просто некорректно обрабатывает int 1 для pm-задач на vm. * * * * В dpmi32.lib добавлены вышеописанные импорты * * * * Для run32.exe, rd32.exe и stub'а несколько изменён метод поиска - на случай когда DosWin32.rtm находится в пути, но на CD-диске, а mscdex загружен без '/S'. * * * + В парсер dw32reg.exe добавлена обработка "алиасных" ключей (HKCU и HKCR). * dw32reg.exe теперь позволяет работать со строковыми значениями 0й длины (см. выше) ! В 16битовой части dw32reg.exe при обработке ..._MULTI_SZ и ..._EXPAND_SZ происходил удар по памяти. * * * + В dpmi-tool появилась новая программа 'dw32mode.com'. Эта программа позволяет включать/выключать две вещи: а) "маскировать" присутствие DosWin32 от задач проверяющих multitasking environment (не возвращается версия windows по int 2F 1600). б) "маскировать" присутствие dpmi-хоста (только при загруженном emm386) для обеспечения возможности запуска "вложенных" 16битовых экстендеров. --------------------------------------------- *** 27.08.2004 *** --------------------------------------------- ! Исправлена работа ScrollConsoleScreenBuffer при lpScroll != lpClip и частичном "непопадании" lpScroll в lpClip. ! Исправлена работа PeekConsoleInput при счётчике больше 1. * В PeekConsoleInput добавлена "поддержка ошибки" консольной библиотеки борланда (see kbhit.c) - элементы буфера за концом принятого прописываются нулями. + Добавлена поддержка WinKeyboard (три дополнительные клавиши). ПРИМЕЧАНИЕ: Работает только в DOS'е - при работе в development режиме под 9x не приходит Win, а под NT ничего не приходит :) * Несколько косметических правок в ф-циях работы с клавиатурой. + В dpmi-host, при "отвале" по необработанному исключению, добавлена печать регистров. --------------------------------------------- *** 22.04.2004 *** --------------------------------------------- ---dpmi develop (ntdints.exe) [doswin32.zip] * В NT'шном драйвере добавлена поддержка последней версии SoftIce (ds3.1). Если Вы не используете SoftIce в режиме загрузки Boot, то драйвер можно не переставлять, в противном случае он (после установки этой версии ds) перестанет загружаться, а инсталятор будет сообщать о неизвестной версии ядра :). --------------------------------------------- *** 08.03.2004 *** --------------------------------------------- ---dpmi (doswin32.rtm) [dw32core.zip] ! В хосте сделан учёт "непрозрачности" кэша инструкций в старших моделях x486 (например, Amd K5) из-за которой на этих процессорах могли происходить "вылеты" и зависания на загрузке. + В хосте добавлен код позволяющий детектировать ситуацию загруженных "некорректных" менеджеров памяти (например, DosICE без ключа /EMM). * Добавлена "совместимость с логической ошибкой win32" :) - SetFileAttributes теперь игнорирует атрибут _DIRECTORY и бит volume label. --------------------------------------------- *** 09.01.2004 *** --------------------------------------------- ---dpmi (doswin32.rtm) [dw32core.zip] ! Исправлена ошибка определения типа процессора (приводила к тому, что на некоторых x486 DosWin32 "вис" при запуске) --------------------------------------------- ---dpmi develop (ntdints.exe) [doswin32.zip] * Из-за вышеописанной правки изменилась база NT'шного драйвера. ВНИМАНИЕ: Если Вы испольуете DosWin32 под NT Вам НЕОБХОДИМО переставить драйвер --------------------------------------------- *** 15.10.2003 *** --------------------------------------------- ---dpmi (doswin32.rtm) [dw32core.zip] ! Исправлена ошибка внесённая в последней версии (разрешение/запрещение мыши) из-за которой мышь была всегда выключена. Задачи интенсивно переключающие режим (например редактор FAR'а) могли работать из-за этой ошибки катастрофически медленно. * При работе DosWin32 в "резидентном" режиме, после запуска 16битовой задачи через CreateProcess, терялся флаг необходимости "автозапуска" всех PE-файлов и их можно было запускать только через run32 * Сделан обход ошибки command.com из-за которой при включенной поддержке LFN не работали пайпы (task | task). --------------------------------------------- *** 01.10.2003 *** --------------------------------------------- ---dpmi (doswin32.rtm) [dw32core.zip] ! CreateProcess иногда возвращал FALSE даже при нормальном запуске (внесено в последней версии) ! GetExitCodeProcess всегда возвращал 0 (внесено в последней версии) * Для старых версий brc32 (5.0) добавлены заглушки GetDC, ReleaseDC, GetDlgItem, GetActiveWindow, IsDlgButtonChecked --------------------------------------------- ---dpmi develop (doswin32.lib) [doswin32.zip] * Добавлены новые импорты (см. выше) -------------------------------------------------------------------------------