Cambiar discos de IDE a AHCI después de instalado Windows

Como es sabido, los discos SATA pueden funcionar tanto en un modo en que solo usan las funciones de los discos PATA de siempre, como, en las placas con chipset Intel, en un modo (AHCI, Advanced Host Controller Interface) en el que se tiene acceso a nuevas funcionalidades de los discos SATA como son NCQ (Native Command Queue) o la conexión/desconexión de discos en caliente (muy usado con discos eSATA).

Debido a que los fabricantes de placas quieren maximizar la compatibilidad, en muchos casos los valores por defecto de la BIOS configuran éstas para que los discos SATA se comporten como discos IDE tradicionales, con lo que perdemos estas características avanzadas del interfaz SATA, y, en algunos casos, algo de rendimiento (esto no siempre es apreciable).

En estos casos, si nos lanzamos a instalar Windows sin haber mirado antes como están estos valores en la BIOS, y están en modo de emulación IDE, la instalación de Windows se configurará para cargar estos drivers en el arranque del sistema, y no los AHCI correspondientes a los SATA en modo avanzado.

Si después nos damos cuenta y tras reiniciar cambiamos el valor en la BIOS de IDE a AHCI, nos llevaremos la sorpresa de que nos sale una pantalla azul con el código de error 0x0000005B, ya que Windows no puede leer del disco duro al no tener activado el driver AHCI, ahora necesario tras el cambio en la BIOS.

Sin embargo, la solución es fácil: primero volvemos a editar la BIOS y dejar la configuración de discos como antes, en modo emulación IDE (o como lo llama la BIOS, que puede también ponerlo como PATA o similar).

Una vez vuelto a arrancar Windows, editamos el registro y nos posicionamos en la siguiente clave:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\msahci

localizamos el valor REG_DWORD “Start” y cambiamos su valor a “0” (seguramente estará en “3”).

A continuación reiniciamos el equipo y editamos la BIOS, configurando, ahora sí, los discos en modo AHCI y dejando que Windows reinicie ya con los discos en este modo.

Si en lugar de controladora AHCI de Intel estamos usando un RAID o una controladora diferente, antes del cambio tenemos que localizar cual es la rama del registro bajo CurrentControlSet\services correspondiente al controlador (para RAIDs de Intel suele ser iaStor o iaStorV), y modificar el mismo valor “Start” a “0” como hemos hecho en el caso de AHCI.

Escribir valores en el registro en todas las ramas de los perfiles de usuario

Si queremos realizar modificaciones en el registro, dentro del perfil de cada uno de los usuarios existentes en el equipo, e incluso modificar el perfil por defecto para que esos valores estén presentes en los perfiles de los usuarios que en el futuro inicien sesión, tenemos que obrar del siguiente modo:

en un archivo con extensión .cmd se escribe el código que pongo más abajo, lógicamente adaptado a las necesidades y se tienesque ejecutar como administrador, por ejemplo con el comando psexec de las pstools, lanzándolo con la siguiente línea:

psexec -i -s  c:\ruta\archivo.cmd

El archivo.cmd tiene que tener el siguiente contenido o similar, con tantas líneas como sea necesario:

for /f "tokens=1,2* delims=\" %%i in (‘ reg query HKU ‘) do reg add HKU\%%j\Prueba /f
for /f "tokens=1,2* delims=\" %%i in (‘ reg query HKU ‘) do reg add HKU\%%j\Prueba /v ejemplo /t REG_DWORD /d 100 /f

La primera de las líneas recorre todas las claves existentes bajo HKEY_USERS, poniendo en la variable %%j el nombre de la clave de cada usuario y creando bajo ella una nueva subclave "Prueba"

La segunda línea hace el mismo recorrido, y crea dentro de la subclave Prueba un nuevo valor DWORD de nombre "ejemplo" y lo rellena con el dato "100"

El parámetro /f es para que no pregunte si ya existe

El comando psexec se puede descargar del siguiente enlace, y se copia a la carpeta windows o a una que esté en el path, o bien, si no se quiere que esté en los equipos de los usuarios, se puede colocar en una carpeta compartida en la red.

http://technet.microsoft.com/es-es/sysinternals/bb897553.aspx

He hecho pruebas con estas líneas y me ha funcionado creando en cada rama de usuario la carpeta y el valor correspondientes. No obstante, aconsejo que todas las pruebas se hagan con una máquina de pruebas que se pueda reinstalar sin problemas en caso de fallo. El comando REG te permite retocar muchas cosas en el registro, y con el psexec -s lo ejecutas con todos los permisos del mundo, así que hay que asegurarse de que hace justo lo que quieres antes de lanzarlo a todos los equipos de tu dominio.

Para ejecutarlo en todos los equipos puedes asignarlo como login script, y hacer primero que se copie a la carpeta windows de cada equipo el psexec con:

copy "\\servidor\recurso\psexec.exe" "%systemroot%\"