Compartir a través de


KBUGCHECK_CALLBACK_ROUTINE función de devolución de llamada (wdm.h)

La rutina BugCheckCallback se ejecuta cada vez que el sistema emite una comprobación de errores.

La función de devolución de llamada KBUGCHECK_REASON_CALLBACK_ROUTINE ofrece más funcionalidad que esta devolución de llamada anterior.

Sintaxis

KBUGCHECK_CALLBACK_ROUTINE KbugcheckCallbackRoutine;

void KbugcheckCallbackRoutine(
  [in] IN PVOID Buffer,
  [in] IN ULONG Length
)
{...}

Parámetros

[in] Buffer

Puntero al búfer que se especificó cuando se registró la devolución de llamada.

[in] Length

Especifica la longitud, en bytes, del búfer al que apunta el parámetro Buffer .

Valor devuelto

None

Observaciones

Los controladores pueden proporcionar un BugCheckCallback que restablezca el dispositivo a un estado conocido si el sistema emite una comprobación de errores.

Use KeRegisterBugCheckCallback para registrar una rutina BugCheckCallback . Posteriormente, un controlador puede quitar la devolución de llamada mediante la rutina KeDeregisterBugCheckCallback . Si el controlador se puede descargar, debe quitar las devoluciones de llamada registradas en su rutina De descarga .

Una rutina BugCheckCallback está fuertemente restringida en las acciones que puede realizar. Para obtener más información, vea Escribir una rutina de devolución de llamada de comprobación de errores. La rutina puede usar de forma segura las rutinas READ_PORT_XXX, READ_REGISTER_XXX, WRITE_PORT_XXX y WRITE_REGISTER_XXX para interactuar con el dispositivo.

Los controladores que requieren una interacción más sofisticada con el sistema, ya que emite una comprobación de errores, pueden implementar rutinas KbCallbackDumpIo o KbCallbackSecondaryDumpData.

Tenga en cuenta que a partir de los sistemas operativos Windows XP SP1 y Windows Server 2003, las rutinas BugCheckCallback se ejecutan después de que ya se haya escrito el archivo de volcado de memoria del sistema. (En versiones anteriores de Windows, las rutinas se ejecutan antes de que se escriba el archivo de volcado de memoria). Por lo tanto, los datos almacenados en el búfer especificado por el parámetro Buffer no aparecerán en el archivo de volcado de memoria. En su lugar, los controladores necesarios para escribir datos en el archivo de volcado de memoria implementan una rutina KbCallbackSecondaryDumpData. (En versiones anteriores de Windows, los datos escritos en buffer aparecen en el archivo de volcado de memoria).

Ejemplos

Para definir una rutina de devolución de llamada BugCheckCallback , primero debe proporcionar una declaración de función que identifique el tipo de rutina de devolución de llamada que está definiendo. Windows proporciona un conjunto de tipos de función de devolución de llamada para controladores. Declarar una función mediante los tipos de función de devolución de llamada ayuda a Code Analysis for Drivers, Static Driver Verifier (SDV) y otras herramientas de comprobación encuentran errores y es un requisito para escribir controladores para el sistema operativo Windows.

Por ejemplo, para definir una rutina de devolución de llamada BugCheckCallback denominada MyBugCheckCallback, use el tipo de KBUGCHECK_CALLBACK_ROUTINE como se muestra en este ejemplo de código:

KBUGCHECK_CALLBACK_ROUTINE MyBugCheckCallback;

A continuación, implemente la rutina de devolución de llamada de la siguiente manera:

_Use_decl_annotations_
VOID
  MyBugCheckCallback(
    PVOID  Buffer,
    ULONG  Length
    )
  {
      // Function body
  }

El tipo de función KBUGCHECK_CALLBACK_ROUTINE se define en el archivo de encabezado Wdm.h. Para identificar con más precisión los errores al ejecutar las herramientas de análisis de código, asegúrese de agregar la anotación Use_decl_annotations a la definición de función. La anotación Use_decl_annotations garantiza que se usen las anotaciones que se aplican al tipo de función KBUGCHECK_CALLBACK_ROUTINE en el archivo de encabezado. Para obtener más información sobre los requisitos de las declaraciones de función, vea Declarar funciones mediante tipos de roles de función para controladores WDM. Para obtener información sobre Use_decl_annotations, consulte Anotación del comportamiento de la función.

Requisitos

Requisito Value
Plataforma de destino Escritorio
Encabezado wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
IRQL Se llama en HIGH_LEVEL.

Consulte también

Escribir una rutina de devolución de llamada de comprobación de errores

KeDeregisterBugCheckCallback

KeRegisterBugCheckCallback