How can I remove the option to eject SATA drives from the Windows 7 tray icon?

The Safely Remove Hardware icon in Windows 7 offers the ability to eject my SATA drives, including the boot drive. I don't see myself ever needing this - especially not from the convenience of the tray icon.

Is there a common BIOS setting to disable hot-swappability?

Eject internal SATA drives


Solution 1:

The answer really depends on what driver you're set up with. I have a 6 port SATA connector (Intel ICH9 - 2922) and I use the default MS-AHCI driver. If you're in the same boat, create a couple of new keys here:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\msahci

_

\Controller0\Channel0
            \Channel1
            \Channel2
            \Channel3
            \Channel4
            \Channel5

Now create a new DWORD - name: TreatAsInternalPort, value: 1 under each of the ChannelN keys. Now reboot for the changes to take effect and the drives should no longer show up under 'Safely Remove..'

Geeky stuff:

The root cause of the problem is the SATA driver incorrectly determined that your internal SATA port is external. So, if you look at the 'Capabilities' value for your drive(s) under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\IDE\..\.. its probably set at 0x4 which makes it removable (as per the bit flag ORing done of the values below) Once you add the setting to the registry, the SATA driver now returns a different Capabilities value (most probably 0) and the drive stops showing up under 'Safely Remove..'

//from inc/api/cfgmgr32.h (WINDDK)
#define CM_DEVCAP_LOCKSUPPORTED     (0x00000001)
#define CM_DEVCAP_EJECTSUPPORTED    (0x00000002)
#define CM_DEVCAP_REMOVABLE         (0x00000004)
#define CM_DEVCAP_DOCKDEVICE        (0x00000008)
#define CM_DEVCAP_UNIQUEID          (0x00000010)
#define CM_DEVCAP_SILENTINSTALL     (0x00000020)
#define CM_DEVCAP_RAWDEVICEOK       (0x00000040)
#define CM_DEVCAP_SURPRISEREMOVALOK (0x00000080)
#define CM_DEVCAP_HARDWAREDISABLED  (0x00000100)
#define CM_DEVCAP_NONDYNAMIC        (0x00000200)

Solution 2:

Today I had the same problem after upgrading my Dad's PC from Windows 7 to 10

The above no longer holds for Win 8, 8.1 & 10

What helped was a slight variation of this link How can I remove the option to eject internal SATA drives from the Windows 8 tray icon?

I.e. I added a new Multi String Value called TreatAsInternalPort to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\storahci\Parameters\Device with the value:

0
1
2
4
5

(note the newlines)

TreatAsInternalPort registry setting

BTW The AHCI driver was Intel's, not Microsoft's, but the solution should work with both drivers.