Déclaration de fonctions à l’aide de types de rôles de fonction pour les pilotes KMDF
Pour permettre à SDV d’analyser un pilote KMDF, vous devez déclarer vos fonctions à l’aide des déclarations de type de rôle de fonction pour KMDF. Les types de rôles de fonction sont définis dans Wdf.h et dans d’autres fichiers d’en-tête KMDF inclus dans Wdf.h. Pour obtenir la liste des types de rôles de fonction et leurs fonctions de rappel d’événements correspondantes, consultez Déclarations de fonction KMDF du vérificateur de pilote statique.
Chaque fonction de rappel d’événement dans un pilote KMDF doit être déclarée en spécifiant le type de rôle correspondant.
Par exemple, l’exemple de code suivant montre la déclaration de type de rôle de fonction pour la fonction de rappel EvtDriverDeviceAdd . Dans cet exemple, la fonction de rappel est appelée myDriver_EvtDriverDeviceAdd. Le type de rôle de fonction est EVT_WDF_DRIVER_DEVICE_ADD.
EVT_WDF_DRIVER_DEVICE_ADD myDriver_EvtDriverDeviceAdd;
Si une fonction de rappel a une déclaration de prototype de fonction, vous devez remplacer le prototype de fonction par la déclaration de type de rôle de fonction.
La liste suivante provient du fichier d’en-tête Fail_Driver6.h. Les fonctions associées sont déclarées dans 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;
Une fois que vous avez déclaré vos fonctions de rappel de pilote à l’aide de déclarations de type de rôle, vous pouvez analyser le pilote. L’analyse du pilote génère le fichier Sdv-map.h, que vous pouvez examiner pour déterminer si les points d’entrée ont été correctement identifiés.
Exécution de l’analyse du code pour les pilotes pour vérifier les déclarations de fonction
Pour vous aider à déterminer si le code source est préparé, exécutez Analyse du code pour les pilotes. L’analyse du code pour les pilotes vérifie les déclarations de type de rôle de fonction et peut vous aider à identifier les déclarations de fonction qui peuvent avoir été manquées ou vous avertir lorsque les paramètres de la définition de fonction ne correspondent pas à ceux du type de rôle de fonction.
Paramètres de fonction et types de rôles de fonction
Comme requis dans le langage de programmation C, les types de paramètres que vous utilisez dans la définition de fonction doivent correspondre aux types de paramètres du prototype de fonction, ou dans ce cas, au type de rôle de fonction. SDV dépend des signatures de fonction pour l’analyse et ignore les fonctions dont les signatures ne correspondent pas.
Par exemple, vous devez déclarer une routine EvtDriverDeviceAdd à l’aide du type de rôle de fonction EVT_WDF_DRIVER_DEVICE_ADD.
EVT_WDF_DRIVER_DEVICE_ADD myEvtDriverDeviceAdd;
Lorsque vous implémentez la fonction myEvtDriverDeviceAdd, les types de paramètres doivent correspondre à ceux utilisés par EVT_WDF_DRIVER_DEVICE_ADD, à savoir WDFDRIVER et PWDFDEVICE_INIT (voir EvtDriverDeviceAdd routine pour la syntaxe).
NTSTATUS
myEvtDriverDeviceAdd (
WDFDRIVER Driver,
PWDFDEVICE_INIT DeviceInit
)
{
}