2008-09-02 23 views
7

Necesito modificar el MBR de Windows, y realmente me gustaría hacerlo desde Windows.Modificar el MBR de 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?

Editar de 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.

Corregir antes de dirigirse 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 información. 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á.

P.S. para Cd-MaN. Según tengo entendido, la información que proporcione no es del todo correcta. Para Vista, creo que puede escribir en un volumen si los sectores que se escriben son sectores de arranque. Ver http://support.microsoft.com/kb/942448

Respuesta

4

La modificación del gestor de arranque es mala, mala idea. Éstos son sólo algunos de los posibles pifias:

  • será potencialmente matar a los productos de cifrado de disco completo (TrueCrypt, PGP, BitLocker de Vista, etc)
  • será potencialmente tropezar a los productos AV (usuarios asustar)
  • será potencialmente matar escenarios booting complicados (cargadores de arranque encadenado, etc.)
  • que acabará con la cadena de confianza al utilizar el módulo TPM (porque comprueba el MBR para el cambio antes de ejecutarlo)
  • acceso directo a disco es no permitido desde Vista (solo con controladores)

Alternativas (como la modificación del registro de hardware durante el inicio de Windows a través de un controlador que se configura para cargar en el arranque o después de que Windows se haya iniciado) realmente deberían considerarse. Si la modificación es tan simple como escribir a un puerto, es decir: existe

OUT AX, BL 

continuación, los conductores de todas las versiones de la ventana que se puede hacer esto (lectura/escritura de un valor de/a un puerto determinado) que puede ser llamado desde el modo de usuario.

+0

Cada programador de código de sector de inicio debe conocer la lista de posibles problemas. ¡Gracias! –

+1

y diría que estos inconvenientes se aplican para ganar 'fdisk/mbr' de win 9x y' fixmbr' de xx. Muy pocos tienen cifrado de disco completo. Disparar un AV no es una preocupación si el MBR está dañado, o si no lo está. La mayoría de las personas no tienen escenarios de arranque complicados y, si lo hicieran, estoy seguro de que si alguna vez necesitaron reparar su MBR, entonces fdisk/mbr o fixmbr no causarán más estragos de los que tienen. – barlop

5

Una vez que se inicia el sistema operativo, el MBR suele estar protegido por virus, este es uno de los trucos de virus más antiguos de 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 forma parte del sistema de archivos, pero existe en una ubicación específica en el disco duro.

Debido a eso, se limita a la escritura de bajo nivel (la mayoría de los programas implementan esto en el ensamblaje) o el código C se dirige a DOS de 16 bits.

La mayoría de estos programas usan el BIOS interface (13h, creo) 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 a los sectores de unidades directamente (o pseudo directamente), pero una vez más, es probable que estén muy bien protegidos debido a los problemas de virus antes mencionados.

¡Buena suerte!

2

¿Tal vez un escenario de arranque PXE podría ayudarlo? 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.

Cuestiones relacionadas