Dichiarazione di funzioni tramite tipi di ruolo di funzione per i driver KMDF

Per consentire a SDV di analizzare un driver KMDF, è necessario dichiarare le funzioni usando le dichiarazioni del tipo di ruolo della funzione per KMDF. I tipi di ruolo funzione sono definiti in Wdf.h e in altri file di intestazione KMDF inclusi in Wdf.h. Per l'elenco dei tipi di ruolo della funzione e delle funzioni di callback degli eventi corrispondenti, vedere Dichiarazioni di funzioni KMDF di Verifica driver statico.

Ogni funzione di callback dell'evento in un driver KMDF deve essere dichiarata specificando il tipo di ruolo corrispondente.

Ad esempio, l'esempio di codice seguente mostra la dichiarazione del tipo di ruolo della funzione per la funzione di callback EvtDriverDeviceAdd . 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 della funzione.

L'elenco seguente deriva 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 le dichiarazioni del 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 Code Analysis driver per verificare le dichiarazioni di funzione

Per determinare se il codice sorgente è preparato, eseguire Code Analysis for Drivers. Code Analysis per i driver verifica la presenza di dichiarazioni di tipi di ruolo di funzione e consente di identificare le dichiarazioni di funzione che potrebbero essere state perse o avvisare l'utente quando i parametri della definizione della funzione non corrispondono a quelli nel tipo di ruolo della funzione.

Parametri di funzione e tipi di ruolo di funzione

Come richiesto nel linguaggio di programmazione C, i tipi di parametro utilizzati 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 della funzione per l'analisi e ignora le funzioni le cui firme non corrispondono.

Ad esempio, è necessario dichiarare una routine EvtDriverDeviceAdd usando il EVT_WDF_DRIVER_DEVICE_ADD di ruolo della funzione.

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 routine EvtDriverDeviceAdd per la sintassi).

NTSTATUS
 myEvtDriverDeviceAdd (
  WDFDRIVER Driver,
 PWDFDEVICE_INIT DeviceInit
 )
{
}