Condividi tramite


Funzione vDbgPrintEx (wdm.h)

La routine vDbgPrintEx invia una stringa al debugger del kernel se vengono soddisfatte determinate condizioni.

Sintassi

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

Parametri

[in] ComponentId

Componente che chiama questa routine. Questo parametro deve essere uno degli ID del filtro dei nomi del componente definiti in Dpfilter.h. Per evitare di combinare l'output del driver con l'output dei componenti di Windows, è consigliabile usare solo i valori seguenti per ComponentId:

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

[in] Level

Gravità del messaggio inviato. Questo parametro può essere qualsiasi intero a 32 bit. I valori compresi tra 0 e 31 (inclusivi) vengono trattati in modo diverso rispetto ai valori compresi tra 32 e 0xFFFFFFFF. Per altre informazioni sul modo in cui vengono trattati i valori, vedere Lettura e filtro dei messaggi di debug.

[in] Format

Puntatore alla stringa di formato da stampare. La stringa Formato supporta la maggior parte dei codici di formattazione in stile printf. È tuttavia possibile usare i codici di formato Unicode (%C, %S, %lc, %ls, %wc, %ws e %wZ) solo con IRQL = PASSIVE_LEVEL. La routine vDbgPrintEx non supporta alcun tipo a virgola mobile (%f, %e, %E, %g, %G, %a o %A).

[in] arglist

Elenco di argomenti per la stringa di formato. La routine vDbgPrintEx usa questo elenco nello stesso modo in cui vprintf esegue.

Valore restituito

vDbgPrintEx restituisce STATUS_SUCCESS se l'operazione ha esito positivo. In caso contrario, questa routine restituisce il codice di errore appropriato.

Commenti

Solo i driver in modalità kernel possono chiamare la routine vDbgPrintEx .

VDbgPrintEx può essere chiamato in IRQL = DIRQL <. Tuttavia, è possibile usare codici di formato Unicode (%wc e %ws) solo in IRQL = PASSIVE_LEVEL. Inoltre, poiché il debugger usa interruzioni interprocesso (IPIs) per comunicare con altri processori, chiamando vDbgPrintEx in IRQL DIRQL > può causare deadlock.

vDbgPrintEx passa la stringa creata al debugger del kernel o non fa nulla, a seconda dei valori di ComponentId, Level e delle maschere di filtro dei componenti corrispondenti. Per altre informazioni sulle operazioni di vDbgPrintEx , vedere Lettura e filtro dei messaggi di debug.

A meno che non sia assolutamente necessario, non è necessario ottenere una stringa dall'input utente o da un altro processo e passarlo a vDbgPrintEx. Se si usa una stringa che non è stata creata, è necessario verificare che questa stringa sia una stringa di formato valida e che i codici di formato corrispondano all'elenco di argomenti in tipo e quantità. La procedura consigliata per la codifica è che tutte le stringhe di formato siano statiche e definite in fase di compilazione.

Non esiste alcun limite superiore alle dimensioni della stringa Format o al numero di argomenti nell'elenco arglist . Tuttavia, qualsiasi singola chiamata a vDbgPrintEx trasmetterà solo 512 byte di informazioni.

Esiste anche un limite alle dimensioni del buffer usato dal debugger. Per altre informazioni su questo limite, vedere Il buffer DbgPrint e il debugger.

Questa routine è definita in Wdm.h. Gli ID filtro dei componenti sono definiti in Dpfilter.h.

Requisiti

Requisito Valore
Client minimo supportato Disponibile in Microsoft Windows XP e versioni successive del sistema operativo.
Piattaforma di destinazione Universale
Intestazione wdm.h (include Dpfilter.h, Wdm.h, Ntddk.h, Ndis.h)
Libreria NtDll.lib (modalità utente); NtosKrnl.lib (modalità kernel)
DLL NtDll.dll (modalità utente); NtosKrnl.exe (modalità kernel)
IRQL <= DIRQL (vedere sezione Commenti)

Vedi anche

DbgPrintEx