VxD


VxD — модель драйверов устройств, используемая в Microsoft Windows/386, 386 расширенном режиме Windows 3.x, Windows 9x и, в некоторой степени, в Novell DOS 7, OpenDOS 7.01, и DR-DOS 7.02.[1] VxD имеет доступ к памяти из ядра, ко всем запущенным процессам, а также прямой доступ к аппаратным средствам.

Название «VxD» — это аббревиатура «virtual xxx driver» («виртуальный драйвер xxx»), где «xxx» — определённый класс аппаратного устройства.[1] Это вытекает из того факта, что многие драйверы в Windows 3.x имели имена файлов вида vxxxd.386. Например: vjoyd.386 (джойстик), vmm.386 (диспетчер памяти). VxD обычно имели расширение файла .386 под Windows 3.x и .vxd под Windows 9x. VxD-драйверы, написанные для Windows 3.x можно использовать под Windows 9x, но не наоборот.

До появления Windows, DOS приложения либо напрямую обращались к различным частям аппаратных средств (отвечали на запросы, прерывания, чтение и запись в память устройства и т.д.) или через DOS-драйвер устройства. Поскольку DOS не была многозадачной системой, каждое приложение имело эксклюзивный и полный контроль над аппаратными средствами во время работы. И хотя Windows-приложения не часто обращались непосредственно с аппаратными средствами, это был единственный способ для драйверов Windows; он до сих пор находится в реальных и стандартных режимах Windows 3.x.

Начиная с Windows/386 и далее разрешался одновременный запуск нескольких DOS-приложений, каждое из которых запускалась в собственной виртуальной машине. Для совместного использования физических ресурсов виртуальными машинами, Microsoft были введены драйверы виртуальных устройств (virtual device drivers). Эти драйверы решали вопросы, связанные с конфликтами, возникающими при использовании физических ресурсов, путем перехвата обращений к аппаратному обеспечению. Например, вместо аппаратного порта, представляющего собой фактическое устройство, драйвер представлял собой «виртуальное» устройство, которым могла управлять операционная система.

Несмотря на то, что в Windows 98 была введена Windows Driver Model (WDM), VxD-драйвера могли использоваться в Windows 98 и Windows Me. Однако, они не могли использоваться в Windows NT и ее потомках. Начиная с Windows 2000, системы на основе Windows NT так же используют Windows Driver Model, в то время как Windows NT 4 и более ранние версии должны были использовать драйверы, разработанные специально для них. Использование VxD драйверов вместо WDM в Windows9x делало невозможным использование некоторых возможностей ACPI, например, спящий режим.

VxD не следует путать с другими драйверами, с похожими по названию, NTVDM-'VDDs' (Virtual Device Drivers), которые обеспечивают эмуляцию прямого I/O под Windows NT в DOS Box. VDD NTVDM выполняется как обычная 32-битная DLL пользовательского режима и должна зависеть от API Win32 (или другого WDM драйвера), чтобы эмулировать желаемый ввод-вывод от имени 16-разрядной программы.