Compartilhar via


Função DbgPrintEx (wdm.h)

A rotina DbgPrintEx envia uma cadeia de caracteres para o depurador de kernel se as condições especificadas forem atendidas.

Sintaxe

NTSYSAPI ULONG DbgPrintEx(
  [in] ULONG ComponentId,
  [in] ULONG Level,
  [in] PCSTR Format,
       ...   
);

Parâmetros

[in] ComponentId

Especifica o componente que chama essa rotina. Essa deve ser uma das IDs de filtro de nome do componente definidas no arquivo de cabeçalho Dpfilter.h. Para evitar misturar a saída do driver com a saída dos componentes do Windows, você deve usar apenas os seguintes valores para ComponentId:

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

[in] Level

Especifica a gravidade da mensagem que está sendo enviada. Isso pode ser qualquer inteiro de 32 bits. Os valores entre 0 e 31 (inclusivo) são tratados de forma diferente dos valores entre 32 e 0xFFFFFFFF. Para obter detalhes, consulte Lendo e filtrando mensagens de depuração.

[in] Format

Especifica um ponteiro para a cadeia de caracteres de formato a ser impressa. A cadeia de caracteres Format dá suporte à maioria dos campos de especificação de formato de estilo printf. No entanto, os códigos de formato Unicode (%C, %S, %lc, %ls, %wc, %ws e %wZ) só podem ser usados com IRQL = PASSIVE_LEVEL. A rotina DbgPrintEx não dá suporte a nenhum dos tipos de ponto flutuante (%f, %e, %E, %g, %G, %a ou %A).

...

Especifica argumentos para a cadeia de caracteres de formato, como em printf.

Retornar valor

Se tiver êxito, DbgPrintEx retornará o código NTSTATUS STATUS_SUCCESS; caso contrário, ele retornará o código de erro apropriado.

Comentários

Somente drivers de modo kernel podem chamar a rotina DbgPrintEx .

DbgPrint e DbgPrintEx podem ser chamados em IRQL<=DIRQL. No entanto, os códigos de formato Unicode (%wc e %ws) só podem ser usados em IRQL = PASSIVE_LEVEL. Além disso, como o depurador usa IPIs (interrupções entre processos) para se comunicar com outros processadores, chamar DbgPrint no IRQL>DIRQL pode causar deadlocks.

DbgPrintEx passa a cadeia de caracteres especificada para o depurador de kernel ou não faz nada, dependendo dos valores de ComponentId, Level e as máscaras de filtro de componente correspondentes. Para obter detalhes, consulte Lendo e filtrando mensagens de depuração.

A menos que seja absolutamente necessário, você não deve obter uma cadeia de caracteres da entrada do usuário ou de outro processo e passá-la para DbgPrintEx. Se você usar uma cadeia de caracteres que não criou, deverá verificar se essa é uma cadeia de caracteres de formato válida e se os códigos de formato correspondem à lista de argumentos no tipo e na quantidade. A melhor prática de codificação é que todas as cadeias de caracteres de formato sejam estáticas e definidas em tempo de compilação.

Não há limite superior para o tamanho da cadeia de caracteres Format ou o número de argumentos. No entanto, qualquer chamada única para DbgPrintEx transmitirá apenas 512 bytes de informações. Também há um limite para o tamanho do buffer DbgPrint. Consulte O Buffer DbgPrint e o Depurador para obter detalhes.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível no Microsoft Windows XP e posterior.
Plataforma de Destino Universal
Cabeçalho wdm.h (include Wdm.h)
Biblioteca NtDll.lib (modo de usuário); NtosKrnl.lib (modo kernel)
DLL NtDll.dll (modo de usuário); NtosKrnl.exe (modo kernel)
IRQL <= DIRQL (consulte a seção Comentários)

Confira também

DbgPrint

KdPrint

KdPrintEx

vDbgPrintEx