Funzione KeRegisterBugCheckCallback (wdm.h)
La routine KeRegisterBugCheckCallback registra una routine BugCheckCallback , che viene eseguita quando il sistema operativo genera un controllo di bug.
Sintassi
BOOLEAN KeRegisterBugCheckCallback(
[out] PKBUGCHECK_CALLBACK_RECORD CallbackRecord,
[in] PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine,
[in, optional] PVOID Buffer,
[in] ULONG Length,
[in] PUCHAR Component
);
Parametri
[out] CallbackRecord
Puntatore a un record di callback inizializzato in precedenza da KeInitializeCallbackRecord, per cui il chiamante fornisce archiviazione non con pagine.
[in] CallbackRoutine
Puntatore alla funzione di callback fornita dal driver KBUGCHECK_CALLBACK_ROUTINE.
[in, optional] Buffer
Puntatore a un buffer fornito dal chiamante, che deve essere in memoria residente, ad esempio pool non di pagina.
[in] Length
Specifica le dimensioni in byte del buffer allocato dal chiamante.
[in] Component
Puntatore a una stringa ANSI con terminazione null che identifica il chiamante. Questa stringa contiene in genere il nome del driver del dispositivo o eventualmente del dispositivo.
Valore restituito
KeRegisterBugCheckCallback restituisce TRUE se la routine fornita dal chiamante viene aggiunta correttamente al set di callback di controllo dei bug registrati; in caso contrario, restituisce FALSE.
Commenti
La routine KeRegisterBugCheckCallback registra una routine BugCheckCallback, il tipo più semplice di routine di callback di controllo bug.
Per registrare altri tipi di callback di controllo dei bug, ad esempio KbCallbackDumpIo e KbCallbackAddPages, usare invece la routine KeRegisterBugCheckReasonCallback .
La routine BugCheckCallback viene eseguita quando il sistema genera un controllo di bug. Un driver può usare la routine per reimpostare il dispositivo in uno stato noto. Per altre informazioni, vedere BugCheckCallback.
I driver possono usare la routine KeDeregisterBugCheckCallback per rimuovere il callback. Qualsiasi driver che può essere scaricato deve rimuovere tutti i callback nella routine di scaricamento .
La stringa Componente viene usata per identificare il driver durante il debug di dump di arresto anomalo. Per visualizzare i dati di dump di arresto anomalo corrispondenti a qualsiasi stringa componente specificata, è possibile usare l'estensione del debugger !bugdump . È anche possibile eseguire il debug della routine di callback del bug. Per informazioni sui debugger e sulle estensioni del debugger, vedere Debug di Windows.
Implementazione
Per definire una routine di callback BugCheckCallback, è prima necessario specificare una dichiarazione di funzione che identifica il tipo di routine di callback che si sta definendo. Windows fornisce un set di tipi di funzione di callback per i driver. La dichiarazione di una funzione usando i tipi di funzione di callback consente l'analisi del codice per i driver, il verifica driver statico (SDV) e altri strumenti di verifica trovano errori.
Ad esempio, per definire una routine di callback BugCheckCallback denominata MyBugCheckCallback, usare il tipo di KBUGCHECK_CALLBACK_ROUTINE come illustrato in questo esempio di codice:
KBUGCHECK_CALLBACK_ROUTINE MyBugCheckCallback;
Implementare quindi la routine di callback come indicato di seguito:
_Use_decl_annotations_
VOID
MyBugCheckCallback(
PVOID Buffer,
ULONG Length
)
{
// Function body
}
Il tipo di funzione KBUGCHECK_CALLBACK_ROUTINE è definito nel file di intestazione Wdm.h.
Per identificare in modo più accurato gli errori quando si eseguono gli strumenti di analisi del codice, assicurarsi di aggiungere l'oggetto _Use_decl_annotations_ annotation
alla definizione della funzione. L'annotazione Use_decl_annotations garantisce che vengano usate le annotazioni applicate al tipo di funzione KBUGCHECK_CALLBACK_ROUTINE nel file di intestazione. Per altre informazioni sui requisiti per le dichiarazioni di funzione, vedere Dichiarazione di funzioni tramite tipi di ruolo per i driver WDM. Per informazioni su Use_decl_annotations, vedere Annotazione del comportamento della funzione.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Disponibile a partire da Windows 2000. |
Piattaforma di destinazione | Universale |
Intestazione | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Libreria | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | Qualsiasi livello |