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) |