Funzione DbgPrintEx (wdm.h)
La routine DbgPrintEx invia una stringa al debugger del kernel se vengono soddisfatte le condizioni specificate.
Sintassi
NTSYSAPI ULONG DbgPrintEx(
[in] ULONG ComponentId,
[in] ULONG Level,
[in] PCSTR Format,
...
);
Parametri
[in] ComponentId
Specifica il componente che chiama questa routine. Deve essere uno degli ID filtro dei nomi del componente definiti nel file di intestazione 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
Specifica la gravità del messaggio inviato. Può trattarsi di qualsiasi intero a 32 bit. I valori compresi tra 0 e 31 (inclusi) vengono trattati in modo diverso rispetto ai valori compresi tra 32 e 0xFFFFFFFF. Per informazioni dettagliate, vedere Lettura e filtro dei messaggi di debug.
[in] Format
Specifica un puntatore alla stringa di formato da stampare. La stringa Formato supporta la maggior parte dei campi di specifica del formato di tipo printf. Tuttavia, i codici di formato Unicode (%C, %S, %lc, %ls, %wc, %ws e %wZ) possono essere usati solo con IRQL = PASSIVE_LEVEL. La routine DbgPrintEx non supporta alcun tipo a virgola mobile (%f, %e, %E, %g, %G, %a o %A).
...
Specifica gli argomenti per la stringa di formato, come in printf.
Valore restituito
In caso di esito positivo, DbgPrintEx restituisce il codice NTSTATUS STATUS_SUCCESS; in caso contrario, restituisce il codice di errore appropriato.
Commenti
Solo i driver in modalità kernel possono chiamare la routine DbgPrintEx .
DbgPrint e DbgPrintEx possono essere chiamati in IRQL<=DIRQL. Tuttavia, i codici di formato Unicode (%wc e %ws) possono essere usati solo in IRQL = PASSIVE_LEVEL. Inoltre, poiché il debugger usa interrupt interprocessi (IPI) per comunicare con altri processori, la chiamata a DbgPrint in IRQL>DIRQL può causare deadlock.
DbgPrintEx passa la stringa specificata al debugger del kernel o non esegue alcuna operazione, a seconda dei valori di ComponentId, Level e delle maschere di filtro dei componenti corrispondenti. Per informazioni dettagliate, vedere Lettura e filtro dei messaggi di debug.
A meno che non sia assolutamente necessario, non è consigliabile ottenere una stringa dall'input dell'utente o da un altro processo e passarla a DbgPrintEx. Se si usa una stringa che non è stata creata, è necessario verificare che si tratta di una stringa di formato valida e che i codici di formato corrispondano all'elenco di argomenti di 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 massimo per la dimensione della stringa Format o il numero di argomenti. Tuttavia, qualsiasi singola chiamata a DbgPrintEx trasmetterà solo 512 byte di informazioni. Esiste anche un limite alle dimensioni del buffer DbgPrint. Per informazioni dettagliate , vedere Buffer DbgPrint e debugger .
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Disponibile in Microsoft Windows XP e versioni successive. |
Piattaforma di destinazione | Universale |
Intestazione | wdm.h (include Wdm.h) |
Libreria | NtDll.lib (modalità utente); NtosKrnl.lib (modalità kernel) |
DLL | NtDll.dll (modalità utente); NtosKrnl.exe (modalità kernel) |
IRQL | <= DIRQL (vedere la sezione Commenti) |