Compartir a través de


Función vDbgPrintEx (wdm.h)

La rutina vDbgPrintEx envía una cadena al depurador de kernel si se cumplen ciertas condiciones.

Sintaxis

NTSYSAPI ULONG vDbgPrintEx(
  [in] ULONG   ComponentId,
  [in] ULONG   Level,
  [in] PCCH    Format,
  [in] va_list arglist
);

Parámetros

[in] ComponentId

Componente que llama a esta rutina. Este parámetro debe ser uno de los identificadores de filtro de nombre de componente definidos en Dpfilter.h. Para evitar mezclar la salida del controlador con la salida de los componentes de Windows, solo debe usar los siguientes valores para ComponentId:

  • DPFLTR_IHVVIDEO_ID
  • DPFLTR_IHVAUDIO_ID
  • DPFLTR_IHVNETWORK_ID
  • DPFLTR_IHVSTREAMING_ID
  • DPFLTR_IHVBUS_ID
  • DPFLTR_IHVDRIVER_ID

[in] Level

Gravedad del mensaje que se envía. Este parámetro puede ser cualquier entero de 32 bits. Los valores entre 0 y 31 (inclusive) se tratan de forma diferente a los valores entre 32 y 0xFFFFFFFF. Para obtener más información sobre cómo se tratan los valores, vea Lectura y filtrado de mensajes de depuración.

[in] Format

Puntero a la cadena de formato que se va a imprimir. La cadena Format admite la mayoría de los códigos de formato de estilo printf. Sin embargo, puede usar los códigos de formato Unicode (%C, %S, %lc, %ls, %wc, %ws y %wZ) solo con IRQL = PASSIVE_LEVEL. La rutina vDbgPrintEx no admite ninguno de los tipos de punto flotante (%f, %e, %E, %g, %G, %a o %A).

[in] arglist

Lista de argumentos para la cadena de formato. La rutina vDbgPrintEx usa esta lista de la misma manera que vprintf .

Valor devuelto

vDbgPrintEx devuelve STATUS_SUCCESS si la operación se realiza correctamente. De lo contrario, esta rutina devuelve el código de error adecuado.

Comentarios

Solo los controladores en modo kernel pueden llamar a la rutina vDbgPrintEx .

Se puede llamar a vDbgPrintEx en IRQL <= DIRQL. Sin embargo, solo puede usar códigos de formato Unicode (%wc y %ws) en IRQL = PASSIVE_LEVEL. Además, dado que el depurador usa interrupciones de interproceso (IP) para comunicarse con otros procesadores, llamar a vDbgPrintEx en IRQL > DIRQL puede provocar interbloqueos.

vDbgPrintEx pasa la cadena que crea al depurador de kernel o no hace nada en absoluto, en función de los valores de ComponentId, Level y las máscaras de filtro de componente correspondientes. Para obtener más información sobre lo que hace vDbgPrintEx , consulte Lectura y filtrado de mensajes de depuración.

A menos que sea absolutamente necesario, no debe obtener una cadena de la entrada del usuario u otro proceso y pasarla a vDbgPrintEx. Si usa una cadena que no creó, debe comprobar que esta cadena es una cadena de formato válida y que los códigos de formato coinciden con la lista de argumentos en tipo y cantidad. El procedimiento de codificación recomendado es que todas las cadenas de formato sean estáticas y definidas en tiempo de compilación.

No hay ningún límite superior para el tamaño de la cadena Format o el número de argumentos de la lista arglist . Sin embargo, cualquier llamada única a vDbgPrintEx transmitirá solo 512 bytes de información.

También hay un límite para el tamaño del búfer que usa el depurador. Para obtener más información sobre este límite, vea El búfer dbgPrint y el depurador.

Esta rutina se define en Wdm.h. Los identificadores de filtro de componentes se definen en Dpfilter.h.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible en Microsoft Windows XP y versiones posteriores del sistema operativo.
Plataforma de destino Universal
Encabezado wdm.h (include Dpfilter.h, Wdm.h, Ntddk.h, Ndis.h)
Library NtDll.lib (modo de usuario); NtosKrnl.lib (modo kernel)
Archivo DLL NtDll.dll (modo de usuario); NtosKrnl.exe (modo kernel)
IRQL <= DIRQL (consulte la sección Comentarios)

Consulte también

DbgPrintEx