I recently had some issues with my DVD+/-RW drive. It is a 16x Sony drive. I was trying to burn DVD’s with it and it would easily take 45 minutes to burn a disc. Normally I can burn a disc within 15 minutes. I just figured it was having issues buffering the content from a shared virtual machine drive. Then I tried watching a DVD movie and it was slowing down my computer severely. Then I tried the DVD disc in my DVD-ROM/CD-RW drive and it played flawlessly. This got me thinking that it was something else entirely, so I checked my device properties for my Master IDE Channel (I only have a master on my motherboard as everything else is SATA). It showed one device using DMA and the other was set to PIO only. Well that is weird. So I switched it to Use DMA if Available. Rebooted and it was still showing PIO mode. I knew that this drive at one point was using DMA, so I initially thought that my drive might be going out.
I did a bunch of digging online, and found that this happens occasionally because of a little-known counter in Windows. It turns out that windows keeps a count of how many times a device’s transfer times out. On hard drive and disc drives that limit is 6 times. I then remembered that I was trying to watch a movie that had a scratch on the disc. I remember trying it multiple times thinking it was a problem with the media playing software I normally use (Smplayer, but that is another topic) due to mplayers issues with certain dvd’s.
So the fix for this is to go into the registry (beware in the registry, I will not be held responsible for any issues you cause). Click on your Start -> Run and type in regedit and hit enter. Then navigate to the key:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}
Under this key there will be several subkeys. These will be for your various IDE controllers. Go through them and delete MasterIdDataChecksum or SlaveIdDataChecksum, which will depend on whether it is your Master or Slave device. It does not matter if you delete ones that are not having issues, because windows will automatically create them when you reboot. This will reset the counter.
Now there is a way to reduce the probability of you running into this issue again. To do this you will need to create a new DWORD Value. To do this go into one of the subkeys (the 0001 and such) and right click on an empty part or go to click on edit and go to New -> DWORD Value. Type in ResetErrorCountersOnSuccess and hit enter. Now change the value to 1. I did this in all the subkeys that I deleted the above items. What this will do is make it so that those time out errors needs to be consecutive (ie happening without a successful attempt) before it reverts back to PIO. So if you have a problem playing a dvd a couple of times and you try another disc and it works it will reset the counter.