darry wrote on 2021-08-18, 01:40:
There is still the question of how Windows (and the corresponding driver) will behave if a DOS driver has enabled (U)DMA on one of these prior to Windows starting .
UDMA.sys and cia chokes against VMM IOS subsystem, which doesn't have a way to know how to handshake with it in order to unload it. This doesn't happen with Promise and alike drivers, as their miniports (PDRs) know about the BIOS enabled DMA, and they will shutdown it before them load themselves (just like what happens with BIOS usb support and usbohci/ehci drivers in windows NT). Sometimes certain INT13 DMA-enabled bioses have enough intelligence to know about running on windows and how handshake minimally with the IOS, so them can keep providing DMA even in "DOS Compatibility Mode"... But that isn't a rule, and it can vary from version to version of the same ROM.
Like many people... You may not believe it, but the VMM is actually an operating system in its own right... And doesn't like when unknow code to itself tampers with critical resources such as DMA. That's why "DOS Compatibility with Storage devices", was designed like that, and to work with the bare minimum INT13 and PIO modes.
BTW... IOS has different codepaths to handle "DOS Compatibility Mode". If it detects any DOS code hooked to the INT13, it will use DOSMGR, which will lead to the DMA Choke later in Windows. If it doesn't detect the hooks, it will use BIOSXLAT to manage the access entirely from ROM code, so depending on how the ROM was coded, it can keep providing DMA access to storage on windows... Or just get back to PIO modes.