windows winapi shutdown reboot

¿Cómo puedo obtener el último motivo de reinicio de Windows?



winapi shutdown (2)

Me gustaría saber cuál es la función de API de Windows (si existe) que proporciona información sobre la última fuente de reinicio de Windows. Hay tres causas principales posibles:

  1. La computadora se estrelló en una pantalla azul
  2. Un usuario o un programa se apaga / reinicia la computadora
  3. Una potencia perdida

Cuantos más detalles puedo obtener, mejor. Sin embargo, necesito saber al menos qué motivo es de los principales.

Necesito apoyar Windows Vista y Windows 7.

Responder:

Parece que no hay una API directa para obtener esa información. En cambio, tenemos que cosechar el registro de eventos de Windows. La información de reinicio del sistema se encuentra en el Visor de eventos / Registros de Windows / Sistema. Aquí está la diversa información provista por los identificadores de eventos:

  • 6005: inicio de Windows
  • 6006: cierre de Windows (correctamente)
  • 6008: cierre de Windows (inesperadamente)

Todavía no entiendo la diferencia entre la pérdida de energía y el bloqueo del sistema, pero es un buen comienzo.


Echa un vistazo a la API de registro de eventos . Caso a) (pantalla azul, el usuario cortó el cable de alimentación o cuelgue el sistema) hace que una nota (''el sistema no se apagó correctamente'' o algo así) se deje en el registro de eventos ''Sistema'' la próxima vez que se reinicie el sistema correctamente. Debería poder acceder a él programáticamente usando la API anterior (sinceramente, nunca lo he usado, pero debería funcionar).


Este article explica en detalle cómo encontrar el motivo de la última puesta en marcha / apagado. En mi caso, esto se debió a que Windows SCCM empujó las actualizaciones aunque lo tenía deshabilitado localmente. Visita el artículo para más detalles con imágenes. Como referencia, aquí están los pasos de copiar / pegar desde el sitio web:

  1. Presione las teclas de Windows + R para abrir el cuadro de diálogo Ejecutar, escriba eventvwr.msc y presione Entrar.

  2. Si UAC lo solicita, haga clic / toque Sí (Windows 7/8) o Continuar (Vista).

  3. En el panel izquierdo del Visor de eventos, haga doble clic / toque en Registros de Windows para expandirlo, haga clic en Sistema para seleccionarlo, luego haga clic derecho en Sistema y haga clic / toque en Filtrar registro actual.

  4. Realice los pasos 5 o 6 a continuación para conocer los eventos de apagado que le gustaría ver.

  5. Para ver las fechas y horas de todas las paradas de usuario de la computadora

    A) Haga clic / toque en la flecha desplegable a la derecha de las fuentes del evento, marque la casilla USER32 y haga clic / toque en el campo.

    B) En el campo, escriba 1074, luego haga clic / toque OK.

    C) Esto le dará una lista de apagado (apagado) y reinicie el tipo de evento de apagado en la parte superior del panel central en el Visor de eventos.

    D) Puede desplazarse por estos eventos enumerados para encontrar los eventos con apagado como Tipo de apagado. Notará la fecha y la hora, y qué usuario fue responsable de apagar la computadora por evento de apagado enumerado.

    E) Vaya al paso 7.

  6. Para ver las fechas y horas de todas las paradas imprevistas de la computadora

    A) En el campo, escriba 6008, luego haga clic / toque Aceptar.

    B) Esto le dará una lista de eventos de apagado inesperados en la parte superior del panel central en el Visor de eventos. Puede desplazarse por estos eventos enumerados para ver la fecha y la hora de cada uno.

  7. Cuando termine, puede cerrar el Visor de eventos.