Strange behavior with IDE drivers

Here’s a strange one.

I have Vista installed on a system with an Intel chipset, and thus the
intelide.sys IDE controller minidriver was installed during system setup. I
need to migrate this installation to an ever-so-slightly different platform
with a different chipset (still Intel, but different chip), so I figured the
best solution was to replace the Intel specific IDE driver with the generic
IDE driver for best portability, and then reinstall the Intel driver for the
new chipset once I got booted on the new system.

So I go into Device Manager and select the generic IDE driver instead of the
Intel driver. Device manager now says that it’s using pciide.sys (along with
pciidex.sys, ataport.sys, and atapi.sys) instead of intelide.sys.

However, when I boot Vista after this change, the intelide.sys driver is
still loaded into memory by the boot manager, and is still loaded by Vista.
But now, right after loading intelide.sys and pciidex.sys, it then loads
pciide.sys. However, since pciide.sys loads after intelide.sys, intelide.sys
ends up being the driver controlling the IDE controller, despite what Device
Manager says. Note that Vista still boots fine.

So I figure the update in Device Manager somehow missed that it should have
disabled intelide.sys when it replaced it with pciide.sys, so I go into the
registry and change the start type for intelide.sys from 0 to 4. I reboot,
and see that intelide.sys is no longer loaded by either the boot loader or
by Vista, and the system still boots fine, as expected. So now it’s running
using the generic IDE controller driver as desired.

So now, I migrate this installation to the other system, and when it tries
to boot, I get a BSOD of an INACCESSIBLE_BOOT_DEVICE. I won’t bore you with
all the !analyze output, as it all points to an issue with the storage
systems drivers earlier in the boot. It was loading the generic pciide.sys
driver, but yet wasn’t working. Since this was booting in this configuration
on the first system, and both have Intel IDE controllers, and, unless I’m
horribly mistaken, pretty much any IDE controller should work with the
generic driver (pciide.sys), this led us down all sorts of other dead end
paths that didn’t resolve the problem.

So I took the installation back to the original system, and, just as an
experiment, set the start type for intelide.sys back to 0. Then, returning
to the other system, it now boots successfully, where it loads both
intelide.sys (first) and pciide.sys (second).

So this poses a few questions:

  1. When I first replaced the Intel IDE driver with the generic one
    using Device Manager, why was the Intel driver still enabled, and in fact
    still the dominant player regardless of what Device Manager indicated? Is
    this a bug, or an expected behavior?

  2. Why don’t I see some sort of a weird conflict or problem when both
    intelide.sys and pciide.sys are loaded at the same time?

  3. Why on the second system would it fail to boot using the generic
    IDE driver (which should work on any system), but would boot fine using the
    Intel IDE driver? Shouldn’t the generic IDE driver work on any IDE
    controller?

Note that the Vista install is not yet activated, if that has any impact on
the situation.

  • Jay