15

The Safely Remove Hardware icon in Windows 8 (and 8.1) offers the ability to eject my internal SATA drives, including the boot drive (see example):

enter image description here

I don't see myself ever needing this - especially not from the convenience of the tray icon.

For Windows 7 exists well known solution (answer 1, answer 2, etc). But in Windows 8 msahci driver has been replaced by storahci. Unfortunately, TreatAsInternalPort workaround no longer works.

Anton
  • 153

5 Answers5

10

The TreatAsInternalPort value still exists in the Windows 8 storahci driver, but its syntax has changed.

It is now in the key HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\storahci\Parameters\Device, and is a REG_MULTI_SZ list of port numbers to force treating as internal.

For example, to disable removability on ports 0 and 1, you would use

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\storahci\Parameters\Device]
"TreatAsInternalPort"=hex(7):30,00,00,00,31,00,00,00,00,00

Unfortunately, i have no idea how these ports are numbered.

kinokijuf
  • 8,364
3

I had the same issue in Windows 8.1 with HDDs connected to an ASMedia 106x on-board chip and using the storahci driver instead of the ASMedia driver (would freeze up my box fierce!).

I ended up solving it using Raiddinn's suggestion found here.

Essentially, I created a scheduled task that runs when the system starts and that imports the following registry file, altering the "Capabilities" key under the 2 HDD devices:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\SCSI\Disk&Ven_WDC&Prod_WD6400AAKS-22A7B\5&288c89f1&2&000000]
"Capabilities"=dword:000000e0

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\SCSI\Disk&Ven_WDC&Prod_WD6401AALS-00L3B\5&1272cb31&2&000000]
"Capabilities"=dword:000000e0

The problem will be for you to track down the above keys for your setup as they are slightly different for every install. However, if you find the drive in question in your "Device Manager", then look at the properties, specifically "Device instance path" on the "Details" tab, you will find where in the registry the entry is located (always below HKLM\SYSTEM\CurrentControlSet\Enum\. So by combining HKLM\SYSTEM\CurrentControlSet\Enum\ with the "Device instance path", you should find the right location that contains the "Capabilities" value.

I hope this is somewhat helpful.

iBug
  • 11,645
3

or Windows 10:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\storahci\Parameters\Device]
"TreatAsInternalPort"=hex(7):30,00,31,00,32,00,33,00,34,00,35,00,00

(Thanks to kinokijuf for the head-start, but his code Only disabled 1 drive for me (drive 0 on my 2nd controller).
This one worked for all 5 drives I have. (and probably the 6th too).
I think it was because there was a BLANK newline in between his values (00 in hex is newline), (30 in hex is 0, 31 is 1 etc).

This one worked on all 4 of my ports: screenshot

I need to block bus 0 and 3. I had to enter in hex 30 00 00 00 33 00 00 00 for the hex value. Problem solved.

0

None of the methods I've seen online worked with my amd x570 setup. Partly because none explain how to know which driver is being used; and thus which registry key needs attention.

So here we go for Windows 10:

  1. In Device Manager expand either:

    • IDE ATA/ATAPI controllers
    • Storage Controllers

    enter image description here

  2. Here you can open the Properties -> Events tab for whichever controller you are using:

    • Look for the registry key name after Device started
    • AMD Sata (amd_sata)

    enter image description here

    • Intel RST (iaStorAC)

    enter image description here

  3. With these names we now know which registry key to look for in HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\

    • amd_sata, iaStorAC, storahci, secnvme, spaceport, etc...
    • you can tell a driver is in use if it has an Enum key inside
    • for me storahci has no Enum key so adding TreatAsInternalPort wont affect anything
  4. Now this is the tricky part as each driver looks for a different registry setting

    • amd_sata, hide 2 drives on port 0 & 1 required a setting of 3:
     [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\amd_sata\Parameters\Device]
    "AmdSataInternal"=dword:00000003
    
    • Use AmdSataExternal, alternatively, to force showing eject for drives
  5. What about my controllers' registry setting?

    • I'm sorry I don't know any others.
    • You may be able to find some clues or registry settings in different versions the driver's inf file
    • If someone knows of a way to get a driver to list its possible registry options and values that would be cool. (I imagine it involves analyzing the driver's sys files?)

Hopefully, this helps someone else stuck on this.

Worthwelle
  • 4,816
0

Instructions Text Picture To clarify earlier posts on how to stop drives from showing up in the "Safely Remove Hardware and Eject Media" dialog box.