programa - Modificar el MBR de Windows
reparar mbr windows 10 desde linux (3)
La modificación del gestor de arranque es mala, mala idea. Éstos son solo algunos de los posibles gotcha''s:
- potencialmente matará los productos de cifrado de disco completo (Truecrypt, PGP, BitLocker de Vista, etc.)
- potencialmente hará tropezar los productos AV (asustando a los usuarios)
- potencialmente matará escenarios de arranque complicados (cargadores de arranque encadenados, etc.)
- matará la cadena de confianza cuando use el módulo TPM (porque verifica el cambio de MBR antes de ejecutarlo)
- no se permite el acceso directo al disco desde Vista (solo con controladores)
Alternativas (como la modificación del registro de hardware durante el arranque de Windows a través de un controlador que está configurado para cargar en el momento del arranque o después de que se haya iniciado Windows) realmente deberían considerarse. Si la modificación es tan simple como escribir en un puerto, es decir:
OUT AX, BL
entonces existen controladores para todas las versiones de Window que pueden hacer esto (leer / escribir un valor desde / hacia un determinado puerto) al que se puede llamar desde el modo de usuario.
Necesito modificar el MBR de Windows, y realmente me gustaría hacer esto desde Windows.
Aquí están mis preguntas Sé que puedo manejar un dispositivo físico con una llamada a CreateFile. ¿El MBR siempre estará en //. / PHYSICALDRIVE0? Además, todavía estoy aprendiendo la API de Windows para leer directamente desde el disco. ¿Es reabsolutesectors y writeabsolutesectdors las dos funciones que voy a necesitar para leer / escribir en los sectores de disco que contienen el MBR?
Edita desde lo que he aprendido por mi cuenta. El MBR no siempre estará en //. / PHYSICALDRIVE0. Además, puede escribir en el sector de inicio (al menos como Administrador en XP) llamando a CreateFile con el nombre del dispositivo de la unidad que contiene el MBR. Además, puede escribir en esta unidad simplemente llamando a WriteFile y pasando el control del dispositivo creado llamando a CreateFile.
Editar para dirigirse a Joel Coehoorn. Necesito editar el MBR porque estoy trabajando en un proyecto que necesita modificar los registros de hardware después de la POST en el BIOS, pero antes de que Windows pueda arrancar. Nuestro plan es realizar estos cambios modificando el gestor de arranque para ejecutar nuestro código antes de que Windows arranque.
Editar para Cd-MaN. Gracias por la info. No hay nada en su respuesta, sin embargo, que yo no sabía y su respuesta no aborda mi pregunta. El registro en particular no hará lo que necesitamos por múltiples razones. La gran razón es que Windows es la capa más alta entre varias capas de software que se ejecutarán con nuestro producto. Estos cambios deben ocurrir incluso antes de que se ejecuten los niveles inferiores, por lo que el registro no funcionará.
PD para Cd-MaN. Según lo entiendo, la información que proporcionas no es del todo correcta. Para Vista, creo que puede escribir en un volumen si los sectores que se escriben son sectores de arranque. Consulte http://support.microsoft.com/kb/942448
Tal vez un escenario de arranque PXE podría ayudarte? Simplemente inicie en su imagen PXE creada que modifica los registros de hardware que necesita modificar, y luego devuelva el control al Registro maestro de arranque o al registro de inicio de la partición activa.
De esta manera, no tiene que modificar los registros de arranque.
Una vez que se inicia el sistema operativo, el MBR generalmente está protegido por razones de virus, este es uno de los trucos de virus más antiguos que se encuentran en los libros. Se trata de pasar virus de disquete a disquete.
Incluso si no fue restringido, debe escribir un código de bajo nivel; no es parte del sistema de archivos, pero existe en una ubicación específica en el disco duro.
Debido a eso, prácticamente se limita a escribir bajo nivel (la mayoría de los programas lo implementan en ensamblador) o código C dirigido a DOS de 16 bits.
La mayoría de estos programas usan la interfaz del BIOS (creo que a las 13h) para acceder directamente a los sectores del disco. Puede acceder a estos en C utilizando algún ensamblado en línea o interfaces proporcionadas por el compilador. Sin embargo, generalmente no tendrá acceso al BIOS sin la cooperación del sistema operativo, por lo que su programa, nuevamente, estará restringido a DOS. Si puede acceder a estos, estará casi en su casa libre: lo bueno del BIOS es que no tiene que preocuparse por qué tipo de HD hay en el sistema; incluso las tarjetas RAID a menudo se insertan en las rutinas del BIOS para poder acceder a ellas. sin saber dónde está la memoria del controlador ATA o SATA, y ejecutando comandos en ese nivel bajo.
Sin embargo, si tiene que acceder a él en un sistema operativo, tiene que escribir un controlador de dispositivo para acceder al BIOS o al espacio de memoria donde existen los controladores HD. Sin embargo, no lo recomendaría, ya que es muy difícil de manejar: las computadoras modernas colocan los controladores HD en diferentes lugares de la memoria, con diferentes IRQ, y cada conjunto de chips se ha vuelto un poco más esotérico porque pueden proporcionar una interfaz mínima a biografías para el arranque, y luego un controlador específico para Windows. Se saltan todas las otras sutilezas de la interfaz que se considerarían compatibles con otros controladores porque es más caro ser compatible.
Puede encontrar que en el nivel del controlador dentro de Windows tendrá métodos para acceder directamente a los sectores de unidades (o pseudo directamente), pero de nuevo, es probable que estén muy bien protegidos debido a los problemas de virus antes mencionados.
¡Buena suerte!