Dichiarazione di funzioni tramite tipi di ruolo per i driver KMDF
Per abilitare SDV per analizzare un driver KMDF, è necessario dichiarare le funzioni usando le dichiarazioni di tipo di ruolo della funzione per KMDF. I tipi di ruolo della funzione sono definiti in Wdf.h e in altri file di intestazione KMDF inclusi in Wdf.h. Per l'elenco dei tipi di ruolo di funzione e delle relative funzioni di callback evento corrispondenti, vedere Dichiarazioni di funzione di controllo del driver statico.
Ogni funzione di callback evento in un driver KMDF deve essere dichiarata specificando il tipo di ruolo corrispondente.
Nell'esempio di codice seguente, ad esempio, viene illustrata la dichiarazione del tipo di ruolo della funzione per la funzione EvtDriverDeviceAdd callback. In questo esempio la funzione di callback viene chiamata myDriver_EvtDriverDeviceAdd. Il tipo di ruolo della funzione è EVT_WDF_DRIVER_DEVICE_ADD.
EVT_WDF_DRIVER_DEVICE_ADD myDriver_EvtDriverDeviceAdd;
Se una funzione di callback ha una dichiarazione di prototipo di funzione, è necessario sostituire il prototipo di funzione con la dichiarazione del tipo di ruolo funzione.
L'elenco seguente proviene dal file di intestazione Fail_Driver6.h. Le funzioni correlate vengono dichiarate in FailDriver6.c.
/*++
Copyright (C) Microsoft. All rights reserved.
Module Name:
fail_driver6.h
Environment:
Kernel mode
--*/
#include <NTDDK.h>
#include <wdf.h>
#include "fail_library6.h"
DRIVER_INITIALIZE DriverEntry;
EVT_WDF_DRIVER_DEVICE_ADD EvtDriverDeviceAdd;
EVT_WDF_IO_QUEUE_IO_READ EvtIoRead;
EVT_WDF_IO_QUEUE_IO_WRITE EvtIoWrite;
EVT_WDF_IO_QUEUE_IO_DEVICE_CONTROL EvtIoDeviceControl;
EVT_WDF_DEVICE_CONTEXT_CLEANUP DeviceContextCleanUp;
EVT_WDF_DEVICE_CONTEXT_DESTROY DeviceContextDestroy;
EVT_WDF_IO_QUEUE_CONTEXT_CLEANUP_CALLBACK QueueCleanup;
EVT_WDF_IO_QUEUE_CONTEXT_DESTROY_CALLBACK QueueDestroy;
EVT_WDF_FILE_CONTEXT_CLEANUP_CALLBACK FileContextCleanup;
EVT_WDF_FILE_CONTEXT_DESTROY_CALLBACK FileContextDestroy;
Dopo aver dichiarato le funzioni di callback del driver usando dichiarazioni di tipo di ruolo, è possibile analizzare il driver. L'analisi del driver produce il file Sdv-map.h, che è possibile esaminare per determinare se i punti di ingresso sono stati identificati correttamente.
Esecuzione dell'analisi del codice per i driver per verificare le dichiarazioni di funzione
Per determinare se il codice sorgente è preparato, eseguire Analisi del codice per i driver. Analisi del codice per i driver verifica le dichiarazioni di tipo di ruolo della funzione e consente di identificare le dichiarazioni di funzione che potrebbero non essere state perse o avvisare quando i parametri della definizione della funzione non corrispondono a quelli nel tipo di ruolo della funzione.
Parametri di funzione e tipi di ruolo funzione
Come richiesto nel linguaggio di programmazione C, i tipi di parametri usati nella definizione della funzione devono corrispondere ai tipi di parametro del prototipo di funzione o, in questo caso, al tipo di ruolo della funzione. SDV dipende dalle firme delle funzioni per l'analisi e ignora le funzioni le cui firme non corrispondono.
Ad esempio, è necessario dichiarare una routine EvtDriverDeviceAdd usando il tipo di ruolo di funzione EVT_WDF_DRIVER_DEVICE_ADD.
EVT_WDF_DRIVER_DEVICE_ADD myEvtDriverDeviceAdd;
Quando si implementa la funzione myEvtDriverDeviceAdd, i tipi di parametro devono corrispondere a quelli usati da EVT_WDF_DRIVER_DEVICE_ADD, ovvero WDFDRIVER e PWDFDEVICE_INIT (vedere EvtDriverDeviceAdd routine per la sintassi).
NTSTATUS
myEvtDriverDeviceAdd (
WDFDRIVER Driver,
PWDFDEVICE_INIT DeviceInit
)
{
}