2009-03-20 9 views
8

Estoy tratando de hacer un programa que grabe un montón de cosas periódicamente. La razón específica es que si se activan las pantallas azules, un desarrollador puede retroceder y verificar gran parte del entorno y ver qué sucedía en ese momento.Simulando un BlueScreen

Mi problema, ¿es una manera de causar una pantalla azul? Tal vez con una llamada a windowsAPI (¿ZeroMemory quizás?).

Anywhoo, si puede pensar en una forma de causar una pantalla azul en la llamada estaría agradecido.

La computadora en la que estoy probando esto está diseñada para tomar cosas como esta jaja.

por cierto, el idioma que estoy usando es C \ C++. Gracias

+0

¿Cargar un controlador de dispositivo que ejecute rápidamente una instrucción ilegal? – derobert

Respuesta

4

Si mata el proceso de csrs obtendrá una pantalla azul con bastante rapidez.

+0

¿Va a suceder todo el tiempo? ¿O es algo así como un lanzamiento de moneda? –

+0

CSRSS es un proceso crítico: el sistema siempre comprobará las fallas cuando se bloquee. –

+0

Realmente no puedo ver mucha diferencia entre un BSOD falso y matar a csrss ... –

1

Si quiere simular un choque fuerte como una pantalla azul, casi tendrá que tirar del cable de alimentación. No recomendado.

En caso de caída, se perderá todo lo que no se haya guardado en el almacenamiento persistente. Si desea simular un bloqueo para fines de registro, escriba un "interruptor de cierre" en su registrador, que detiene el registro. Ahora puedes simular un bloqueo matando el registro y asegurándote de tener los datos que hubieras querido en caso de una falla real.

+0

Realmente no habrá otros programas ejecutándose en la computadora, excepto los míos, así que no estoy preocupado por la pérdida de datos. Estoy usando esta computadora específicamente para pruebas de estrés. Quiero una pantalla azul real para la precisión. –

12

Se puede configurar una máquina para bloquearse en un golpe de teclado (Ctrl-ScrollLock)

Dado que parece que hay momentos en los que no funciona en algunos sistemas con USB teclados, también puede obtener las herramientas de depuración para Windows, instalar el depurador del kernel y usar el comando ".crash" para forzar una comprobación de errores.

+0

El único inconveniente de esto es que es una pantalla azul "falsa". No me refiero a la falsificación, ya que puedes recuperarte, pero hay una ruta de código en las ventanas que específicamente pantallas azules cuando presionas las teclas, o usa el depurador del kernel, donde matar csrss es en realidad un bloqueo. –

+0

Para la opción de teclado, el bloqueo se produce en un controlador que maneja la interrupción; no se puede obtener nada más determinante que eso. Muy similar para el bloqueo de kd: interrumpa en kd usando Ctrl-C y el sistema puede estar en cualquier estado. El bloqueo de CSRSS en realidad es causado por un código específico en Windows. –

+0

@Michael, es más violento que CSRSS, pero aún así no causa daños en la memoria, etc., por lo que podría ser un poco menos efectivo para las pruebas. Aunque si uno quiere ser realmente violento, desconectarlo es efectivo :) – bdonlan

0

no estoy seguro exactamente lo que sería la prueba. Debido a que su programa se ejecuta periódicamente, seguramente es suficiente verificar que la información se descargue a la frecuencia que usted especifique mientras el sistema se está ejecutando. ¿Estás verificando que la información permanezca después de la pantalla azul? Dependiendo de cómo lo esté descargando (y si está descargando búferes), esto puede no ser necesario.

+0

Estoy tratando de hacer un programa para que los desarrolladores entiendan qué causa las pantallas azules. Funciona almacenando mucha información de tiempo de ejecución en determinados momentos. –

+0

@dafis - mi punto es que el programa almacena información. ya que lo almacena periódicamente, no en el momento de la pantalla azul, debería ser suficiente para probar que la información está almacenada. No estoy seguro de qué beneficio adicional obtendrá al causar la pantalla azul. – tvanfosson

+0

@tvan, ¿quizás quiere ver si la información será útil para identificar la causa de la pantalla azul? – bdonlan

6

Para causar un BSOD, un controlador que se ejecute en modo kernel debe causarlo. Si realmente desea hacer esto, puede escribir un controlador que expone KeBugCheck a modo de usuario.

http://msdn.microsoft.com/en-us/library/ms801640.aspx

Gracias a Andrew a continuación para señalar esta utilidad a cabo:

http://download.sysinternals.com/files/NotMyFault.zip

+1

SysInternals proporciona una utilidad llamada "[NotMyFault] (http://download.sysinternals.com/files/NotMyFault.zip)" que puede generar bloqueos (llamando a 'KeBugCheckEx' y una variedad de otras formas) si no lo hace quiero escribir el tuyo –

1

En primer lugar, me gustaría aconsejarle a utilizar una máquina virtual para probar esta BSOD sucesivamente. Esto le permitirá mantener una copia de seguridad en caso de que el BSOD haga algún daño al sistema. Aquí hay un consejo sobre cómo generar un BSOD simply by pressing CTRL+SCROLLLOCK+SCROLLLOCK.

¿Hay una API de Windows para generar una? No, de acuerdo con this article. Aún así, si llamara a ciertas API con datos no válidos, aún podrían causar un bloqueo dentro del kernel, lo que resultaría en su BSOD.

0

Si no desea escribir el código (controlador, IOCTL ...) puede usar DiskCryptor. Tenga en cuenta que no es necesario encriptar el disco.

sólo tiene que instalar el controlador:

dcinst.exe -setup

y luego generar un BSOD utilizando la consola DC:

dccon.exe -bsod

Cuestiones relacionadas