Re-enable DMA using the Registry Editor
Run REGEDIT. Go to the following key:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}
It has subkeys like 0000, 0001, 0002, etc. Normally 0001 is the primary IDE channel, 0002 the secondary, but other numbers can occur under certain circumstances. You have to go through these subkeys and check the DriverDesc value until you find the proper IDE channel.
Delete MasterIdDataChecksum or SlaveIdDataChecksum, depending on whether the device in question is attached as master or slave, but it can't actually hurt to delete both. Reboot. The drive DMA capabilities will be redetected.
Note that many CD and DVD drives only use UDMA-2, because their data rate is much lower than that of a hard disk. This is normal and no reason to worry.
It is sufficient to empty the content of these values. But you can also delete the values entirely. Windows will automatically recreate them anyway, with new content.
Open Device Manager again and check whether the device is now actually using DMA mode. If so, congratulations, you've made it (at least until the next time Windows disables DMA).
If this doesn't work, check also the dword value MasterDeviceTimingModeAllowed, whose default value is hex 0xFFFFFFFF. If you have a much smaller value, you can try to set it back to its default and reboot for a test.
It's three keys that work together:
MasterDeviceTimingMode
UserMasterDeviceTimingModeAllowed
MasterDeviceTimingModeAllowed
MasterDeviceTimingMode:
Queried by the drive. Each bit means a permitted transfer mode that the device is capable of. Somewhere at MS some of these bits can be looked up.
UserMasterDeviceTimingModeAllowed:
Has the same structure as MasterDeviceTimingMode and has the bit values the user configures in Device Manager. 0xffffffff allows all modes that are set in MasterDeviceTimingMode as well.
MasterDeviceTimingModeAllowed:
This entry is the problem child. Normally not present in XP, it is created as a reaction to errors. This entry has absolute priority.
These parameters also exist for the slave drive as SlaveDeviceTimingMode, etc.
The above mail mistakes the two last registry values for one another, that UserMasterDeviceTimingModeAllowed is normally not present in XP, but appears when an error occurs, and for MasterDeviceTimingModeAllowed the default value is 0xFFFFFFFF. Can anybody please confirm or deny this by email?
One guess is therefore that removing the UserMasterDeviceTimingModeAllowed value could cure the problem.