Como me aburro mientras OTTO llega, explicaré en qué consiste el script que he creado, así usuarios medios y avanzados podrán entender lo que hace.
Información variada sobre el SCRIPT contenido en el archivo RAR adjunto del post anterior:
Dentro del archivo RAR, el fichero
SCRIPT.CMD, es el que al ejecutarlo (tal como mencioné en el post anterior) realiza las tareas pertinentes para inyectar el driver y su servicio en el registro y contiene el siguiente código para realizarlo con éxito:
Código:
@ECHO OFF
[B][COLOR=DarkRed]SET DEVICE="VEN_8086&DEV_2829"[/COLOR][/B]
CLS
ECHO.
ECHO.
ECHO **ATENCIàN!!: NO EJECUTE ESTE SCRIPT SI EL TCNICO NO SE LO
ECHO ------------- HA RECOMENDADO, YA QUE PODRÖA DA¥AR SU EQUIPO
ECHO E IMPEDIR SU INICIO NORMAL.
ECHO.
ECHO.
ECHO Para cancelar, cierre esta ventana...
ECHO.
ECHO Para continuar, pulse cualquier tecla...
PAUSE >NUL
CLS
ECHO.
ECHO.
ECHO.
ECHO INICIO DEL SCRIPT AUTOMATIZADO by SPTR, ESPERE...
ECHO.
ECHO.
ECHO.
ECHO ------------------------------------------------------------------
ECHO.
ECHO.
ECHO ** Inicio de chequeo de disco...
ECHO.
[B][COLOR=Sienna]CHKDSK C: /F /X[/COLOR][/B]
ECHO.
ECHO ** Fin de chequeo de disco.
ECHO.
ECHO.
ECHO ------------------------------------------------------------------
ECHO.
ECHO.
ECHO ** Inicio de cargar rama de registro desde archivo...
ECHO.
[B][COLOR=Red]REG LOAD HKLM\SYSTEM2 C:\Windows\System32\Config\System[/COLOR][/B]
ECHO.
ECHO ** Fin de cargar rama de registro desde archivo.
ECHO.
ECHO.
ECHO ------------------------------------------------------------------
ECHO.
ECHO.
ECHO ** Inicio de purgar Critical001...
ECHO.
[B][COLOR=SeaGreen]FOR /F %%A IN ('REG QUERY HKLM\SYSTEM2\ControlSet001\Control\CriticalDeviceDatabase /f * /k ^|FINDSTR /I %DEVICE%') DO REG DELETE %%A /f[/COLOR][/B]
ECHO.
ECHO ** Fin de purgar Critical001.
ECHO.
ECHO.
ECHO ------------------------------------------------------------------
ECHO.
ECHO.
ECHO ** Inicio de purgar Critical002...
ECHO.
FOR /F %%A IN ('REG QUERY HKLM\SYSTEM2\ControlSet002\Control\CriticalDeviceDatabase /f * /k ^|FINDSTR /I %DEVICE%') DO REG DELETE %%A /f
ECHO.
ECHO ** Fin de purgar Critical002.
ECHO.
ECHO.
ECHO ------------------------------------------------------------------
ECHO.
ECHO.
ECHO ** Inicio de purgar Services001...
ECHO.
[B][COLOR=RoyalBlue]REG DELETE HKLM\SYSTEM2\ControlSet001\Services\iastor /f[/COLOR][/B]
ECHO.
ECHO ** Fin de purgar Services001.
ECHO.
ECHO.
ECHO ------------------------------------------------------------------
ECHO.
ECHO.
ECHO ** Inicio de purgar Services002...
ECHO.
REG DELETE HKLM\SYSTEM2\ControlSet002\Services\iastor /f
ECHO.
ECHO ** Fin de purgar Services002.
ECHO.
ECHO.
ECHO ------------------------------------------------------------------
ECHO.
ECHO.
ECHO ** Inicio de importar Critical y Services al registro...
ECHO.
[B][COLOR=DarkOrchid]REGEDIT /S Intel_AHCI.reg[/COLOR][/B]
ECHO.
ECHO ** Fin de importar Critical y Services al registro.
ECHO.
ECHO.
ECHO ------------------------------------------------------------------
ECHO.
ECHO.
ECHO ** Inicio de descargar rama de registro...
ECHO.
[B][COLOR=Purple]REG UNLOAD HKLM\SYSTEM2[/COLOR][/B]
ECHO.
ECHO ** Fin de descargar rama de registro.
ECHO.
ECHO.
ECHO ------------------------------------------------------------------
ECHO.
ECHO.
ECHO ** Inicio de copiar archivo de driver INTEL AHCI...
ECHO.
[B][COLOR=Blue]COPY IASTOR.SYS C:\Windows\System32\Drivers /Y[/COLOR][/B]
ECHO.
ECHO ** Fin de copiar archivo de driver INTEL AHCI.
ECHO.
ECHO.
ECHO ------------------------------------------------------------------
ECHO.
ECHO.
ECHO.
ECHO.
ECHO SCRIPT AUTOMATIZADO by SPTR FINALIZADO.
ECHO.
ECHO Reinicie el sistema con el bot¢n reiniciar que hay
ECHO en el men£ (**NO CON EL BOTàN RESET DEL EQUIPO!!).
ECHO.
ECHO.
* SET DEVICE="VEN_8086&DEV_2829" setea una variable que luego será utilizada más adelante para realizar una limpieza del registro.
* CHKDSK C: /F /X realiza un chequeo de unidad del sistema operativo, forzando su desmontaje si es necesario (/X) y reparando automáticamente los errores que encuentre (/F).
* REG LOAD HKLM\SYSTEM2 C:\Windows\System32\Config\System carga la rama
SYSTEM (que contiene la config. de hardware del sistema y servicios, etc.) del registro del sistema operativo instalado en el registro temporal de Windows Recovery Environment. Lo que hace es montar en
HKLM\SYSTEM2 el fichero del registro mencionado para poder operar con el más tarde.
Si se abre un
REGEDIT sin más en
Windows RE (Recovery Environment), las ramas de registro que vemos, no son las del sistema operativo instalado, sino las de Windows RE (que ha usado para poder arrancar él mismo), por lo tanto no tiene sentido modificar nada en ese registro, ya que no es el del sistema operativo instalado que estamos reparando. Por eso hay que montar los archivos de registro de ese sistema a mano.
Una vez cargado el ramal, ya se puede operar con él e inyectar las claves necesarias.
* FOR /F %%A IN ('REG QUERY HKLM\SYSTEM2\ControlSet001\Control\CriticalDeviceDatabase /f * /k ^|FINDSTR /I %DEVICE%') DO REG DELETE %%A /f es un comando algo complejo, lo que hace es repetir una serie de acciones para cierta condición. En este caso, lo que nos hace es eliminar del registro, en una de sus ramas, todas las referencias al PNP ID de la controladora SATA que vamos a inyectar, para evitar que este duplicada en él. Todas las claves dentro de CriticalDeviceDatabase (rama del registro que le indica a Windows los drivers que debe cargar al arranque para dispositivos críticos en base a su PNP ID [identificación única de hardware]) que contengan en PNP ID, VEN_8086&DEV_2829 serán eliminadas, ya que puede haber repetidas con diferentes coletillas despues de DEV_2829 (diferentes SUBSYS, etc., que diferencian variaciones de un mismo modelo de controladora). De ese modo nos evitamos conflictos porque una intente cargar un driver, y otra similar intente cargar otra.
El
FOR lo que hace es repetir el comando
REG DELETE (
REG es un comando para ejecutar acciones sobre el registro en modo línea de comandos.
REG DELETE ejecuta acciones de borrado en la clave del registro que se le indique) por cada clave que en cuentre con la palabra
"VEN_8086&DEV_2829", para dejar todo limpio.
La parte
IN ('REG QUERY HKLM\SYSTEM2\ControlSet001\Control\CriticalDeviceDatabase /f * /k lo que hace es ejecutar un
REG QUERY (
REG QUERY consulta claves en el registro y las muestra en pantalla según las opciones que le establezcamos para ello) en la clave
HKLM\SYSTEM2\ControlSet001\CriticalDeviceDatabase para que enumere todas las subclaves que allí hay. La
/f * define lo que debe enumerar. Al poner
*, enumera todas las subclaves que hay dentro de CriticalDeviceDatabase.
La parte
^|FINDSTR /I %DEVICE%') lo que hace es un pipe, una redirección. Envía los resultados del
REG QUERY anterior a un programa llamado
FINDSTR.EXE que filtra los resultados y sólo deja como tales los que contengan el valor
"VEN_8086&DEV_2829", cuya variable
%DEVICE% contiene en su interior, ya que lo asignamos con el
SET al principio del script. /I omite mayúsculas y minúsculas (busca cualquier resultado aunque no sea exacto en mayus., minus).
Digamos que FINDSTR nos filtra todas las claves que hay dentro de CriticalDeviceDatabase y sólo muestra o procesa las que contienen
"VEN_8086&DEV_2829" como parte de su nombre.
DO REG DELETE %%A /f esta última parte del FOR, ejecuta la acción a realizar una vez se cumplan las anteriores condiciones.
Es decir, que por cada clave que contenga la palabra
"VEN_8086&DEV_2829" en su seno dentro de CriticalDeviceDatabase, hay que proceder a borrarla. Es decir DO REG DELETE %%A /f (borra todas esas sin confirmación [/f] al usuario).
El siguiente FOR que hay en el script hace lo mismo que el anterior pero en ControlSet002 en vez de ControlSet001. (En el registro hay dos ControlSet o más. El 001 suele ser el de mayor importancia, los demás son copias de seguridad del primero y se suelen emplear a veces cuando se selecciona arrancar con la última configuración buena conocida por ejemplo, creo recordar).
* REG DELETE HKLM\SYSTEM2\ControlSet001\Services\iastor /f elimina del registro el servicio IASTOR (es el servicio que hace posible que se carguen los drivers SATA AHCI de INTEL) si existía con anterioridad para evitar problemas. Así después lo restableceremos de 0 sin mezclar datos existentes con los que luego se inyecten. Para no pedir confirmación a usuario, finalizamos el comando con
/f.
* REGEDIT /S Intel_AHCI.reg lo que hace es importar silenciosamente (sin confirmación por parte de usuario [
/S]) al registro el fichero
"Intel_AHCI.reg" que contiene las claves necesarias en
CriticalDeviceDatabase y en
Services para que Windows sepa que debe cargar el driver SATA AHCI de Intel nada más arrancar para poder acceder al disco duro y continuar cargando resto de drivers y Windows a su vez.
Intel_AHCI.reg contiene el código siguiente:
Código:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM2\ControlSet001\Control\CriticalDeviceDatabase\PCI#VEN_8086&DEV_2829]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="iastor"
[HKEY_LOCAL_MACHINE\SYSTEM2\ControlSet002\Control\CriticalDeviceDatabase\PCI#VEN_8086&DEV_2829]
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"
"Service"="iastor"
[HKEY_LOCAL_MACHINE\SYSTEM2\ControlSet001\Services\iastor]
"ErrorControl"=dword:00000001
"Group"="SCSI Miniport"
"Start"=dword:00000000
"Tag"=dword:0000001b
"Type"=dword:00000001
"ImagePath"=hex(2):5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
74,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,64,00,72,\
00,69,00,76,00,65,00,72,00,73,00,5c,00,69,00,61,00,73,00,74,00,6f,00,72,00,\
2e,00,73,00,79,00,73,00,00,00
"DisplayName"="Intel(R) SATA AHCI Controller"
[HKEY_LOCAL_MACHINE\SYSTEM2\ControlSet002\Services\iastor]
"ErrorControl"=dword:00000001
"Group"="SCSI Miniport"
"Start"=dword:00000000
"Tag"=dword:0000001b
"Type"=dword:00000001
"ImagePath"=hex(2):5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
74,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,64,00,72,\
00,69,00,76,00,65,00,72,00,73,00,5c,00,69,00,61,00,73,00,74,00,6f,00,72,00,\
2e,00,73,00,79,00,73,00,00,00
"DisplayName"="Intel(R) SATA AHCI Controller"
En la primera parte especificamos los
PNP ID de la controladora que el SO debe cargar al inicio. En
CriticalDeviceDatabase.
Ahí también especificamos el servicio asociado a esa controladora, en el valor
"Service=iastor".
Así Windows luego abre la clave
SERVICES y busca
IASTOR para cargar el driver en función de los datos que haya dentro da la clave IASTOR.
En el código del fichero REG, en la segunda parte podemos ver que crea la clave
IASTOR dentro de
SERVICES.
Allí mete unos cuantos valores que le indican a Windows si es un driver que debe cargar al inicio, el tipo de driver que es, si es un Kernel Driver, etc.
También indica otros parámetros de control para ese driver.
En
IMAGEPATH, que ahí está en HEXADECIMAL, realmente todo eso se traduce a
IMAGEPATH=%SystemRoot%\system32\drivers\iastor.sys. Es decir que ese valor es de lo más importante porque indica a Windows la ruta del driver que hace posible que Windows entienda la controladora SATA AHCI de INTEL.
%SystemRoot% es una variable que como valor da la carpeta dónde está instalado Windows, por defecto
"C:\WINDOWS" en la mayoría de los casos.
Es decir, todo esto que estamos haciendo al importar manualmente el fichero REG (cuyo código estoy comentando) es lo que realmente hace el driver SATA AHCI de INTEL cuando lo instalamos en un equipo desde su ejecutable o archivo INF (en el caso de INF, manualmente desde el admin de dispositivos. El INF es un fichero de texto que acompaña a todos los drivers y le dice a Windows como debe instalarlo, es decir, qué modificaciones debe aplicar al registro, donde están los ficheros de origen del driver y dónde debe copiarlos, etc., que es lo que nosotros estamos haciendo manualmente con el fichero REG).
* REG UNLOAD HKLM\SYSTEM2 descarga del registro la rama que habíamos cargado con anterioridad para realizar modificaciones e inyectar los datos del fichero REG. De este modo cuando luego reiniciemos el equipo, no correremos el riesgo de que el fichero de registro que habiamos cargado, quede corrupto por un mal desmontaje.
Como ya hemos terminado con la parte del registro, la descargamos y listo.
* COPY IASTOR.SYS C:\Windows\System32\Drivers /Y copia el fichero
IASTOR.SYS a
C:\Windows\system32\drivers sin pedir confirmación de sobreescritura al usuario [
/Y] en el caso de que ya existiera en destino.
IASTOR.SYS está en el set de ficheros, junto al script realizado. Muchos de los ficheros usados y mencionados aquí, están en ese set.
IASTOR.SYS es el driver de INTEL SATA AHCI. Driver que copiamos desde nuestro pen (o la fuente que sea) a la carpeta
DRIVERS de la instalación de nuestro Windows, para que luego cuando lea desde el registro, Windows lo encuentre donde debe estar y proceda a su carga para poder acceder a la controladora SATA AHCI de INTEL y poder seguir cargando drivers y archivos.
Vaya peazo de TOCHO que me ha salido. Bueno, ahí queda eso, sólo apto para los curiosos medios-avanzados.
-------------------------------------------------------------------------------------------------------
--- © Mini-tutorial by SPTR ---
(Si este manual se copia a otra parte, pedir permiso y luego citar a su autor)
-------------------------------------------------------------------------------------------------------