2010-02-21

Vista x64 SP1 Doesn't Refresh CD/DVD Drive View (Volume / Directory)

Ah, the frustration of a Microsoft operating system.  This one's got me stumped.

A brief description of the issue:  After ejecting a disc, and putting a new one in, the old directory shows up, and not the one from the newly loaded disc.  This is in Explorer, in a command prompt, and also in FreeCommander.  A procmon watch of Freecommander shows it's calling CreateFile on the drive and getting the old list directly from Windows, and not some cached file.  At least, the caching's not taking place in the userland file manager.  With Imgburn, I can eject and load, have it show stats of the disc (as well as using DVDIdentifier), but Windows Explorer, cmd, and FC all display the stale information.  From some googling, it doesn't look like anyone's found a real solution to this, and it appears to still exist on Windows 7.

The often mentioned fix is:
gpedit.msc
-Local Group Policy
--User Configuration
---Administrative Templates
----Windows Components.
-----Windows Explorer.
Double click on “Remove CD burning features“.
Set the value to “Enabled”

Or, for anyone fixing a system with Home on it:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
Create a DWORD, name it NoCDBurning, and put a 1 in it.
The above does fix the issue where Vista sees a UDF disc as blank and wants to format it, but wasn't much use to me.

Another solution which tends to be mentioned is to enable Autorun, which is counterintuitive for those of us who have specifically disabled it.  However, in true Microsoft fashion (and to get a Princess Bride reference in), they tell us, "I do not think that word means what you think it means." and go on to create much confusion.  The following apply to HKLM\SYSTEM\CurrentControlSet\Services\Cdrom and not to Windows Explorer.

http://technet.microsoft.com/en-us/library/cc960238.aspx says AutoRunsAlwaysDisabled "Suppresses the Media Change Notification (MCN) message for particular CD-ROM drives."

http://technet.microsoft.com/en-us/library/cc976182.aspx says Autoruns "Determines whether the system sends a Media Change Notification (MCN) message to the Windows interface when it detects that a CD-ROM is inserted in the drive. The MCN message triggers media-related features, such as Autoplay.
If the MCN message is disabled, the media features that use it do not operate."

This is great, except the official documentation says the upshot of this is, if Media Change Notification isn't enabled, you have to hit F5 or select Refresh to show changes; obviously not the issue here, since hitting F5 or refresh just shows the previous disc directory listing, again.

Am I the only one flabbergasted Vista can't _list the damn contents of a DVD_?! And, this IS Vista (and Windows 7?) specific.  In XP, you might see something almost like this, but deleting the \burn directory would clear it right up.  This also isn't the same issue as Upper and Lower filters by idiotic programs.  This really seems to be some new 'feature' present in cdrom.sys from Vista forward.  The cynic in me would tend to think it has to do with ci.dll (code integrity) and the Protected Environment Authentication crap, but, then again, it could just be some sort of stupidity in the file system parsing code.  

As a point of amusement, leaving an Explorer window open to a share on a NAS... goes blank after an amount of time (files are still there, the view just disappears until it's refreshed).  

My temporary 'solution' (obviously, rebooting fixes this, as everyone knows.  However, rebooting every damn time you want to read a new disc is ludicrous) is to right click on the drive in device manager, Uninstall, select 'no' to the query to reboot now (you'll note the drive's still there, unlike in XP...) and then Scan For Hardware Changes.  This _works_.  Explorer now sees the disc that's actually IN the drive.  Rinse, repeat.
Of note is there doesn't seem any nice (and hence, scriptable) way of doing this using devcon; the drive isn't happy to be restarted or disabled/enabled there, and happily reports its status as running the whole time.

Some info for anyone digging into this:
X64 Vista SP1 Ultimate
i975x chipset 
Drive:
C:\bin\devcon\i386>devcon stack @IDE\CDROM*
IDE\CDROMSONY_DVD_RW_DRU-190A____________________1.65____\5&36E1B51B&0&0.0.0
    Name: SONY DVD RW DRU-190A ATA Device
    Setup Class: {4d36e965-e325-11ce-bfc1-08002be10318} CDROM
    Controlling service:
        cdrom
1 matching device(s) found.

There isn't any third party junkware installed (no sonic, or easycd, or even Nero; no daemontools, or poweriso, etc).  Imgburn is used exclusively to burn.  Services HAVE been trimmed, but nothing that should be related to this have been modified; most are set to 'manual' (remote registry to disabled, etc).  Nothing is odd looking at the service registry entries.

Based on the other posts regarding this issue by people who obviously don't tinker about with their system, I doubt it has to do with anything I've messed with.

So, it begs the question: where is Vista saving this, WHY is Vista saving this, and how does one stop it?

Update #1:  Interesting tidbit; using dskprobe (yes, from the Windows Support Tools for XP2) and the LOGICAL volume, I can happily read 2048 sectors (arbitrarily picked to test) and see the 'real' new disc, despite even Disk Manager showing the stale volume header.  So, the problem must be in the file system driver and caching... 

Update #2: Another quicker solution than the uninstall temporary solution: Using diskmgmt.msc, eject disc, and then (in my case, because computer is actually in another room; gotta dig strings of cables and KVMs) using Imgburn to reload, works: Drive is refreshed.  However, using Imgburn, or Windows Explorer even, to eject, or the button on physical drive, _doesn't_ refresh.  

No comments: