Deklarieren von Funktionen mithilfe von Funktionsrollentypen für KMDF-Treiber
Damit SDV einen KMDF-Treiber analysieren kann, müssen Sie Ihre Funktionen mithilfe der Funktionsrollentypdeklarationen für KMDF deklarieren. Die Funktionsrollentypen werden in Wdf.h und in anderen KMDF-Headerdateien definiert, die in Wdf.h enthalten sind. Eine Liste der Funktionsrollentypen und der zugehörigen Ereignisrückruffunktionen finden Sie unter KMDF-Funktionsdeklarationen der Statischen Treiberüberprüfung.
Jede Ereignisrückruffunktion in einem KMDF-Treiber muss durch Angabe des entsprechenden Rollentyps deklariert werden.
Das folgende Codebeispiel zeigt beispielsweise die Funktionsrollentypdeklaration für die Rückruffunktion EvtDriverDeviceAdd . In diesem Beispiel wird die Rückruffunktion myDriver_EvtDriverDeviceAdd aufgerufen. Der Funktionsrollentyp ist EVT_WDF_DRIVER_DEVICE_ADD.
EVT_WDF_DRIVER_DEVICE_ADD myDriver_EvtDriverDeviceAdd;
Wenn eine Rückruffunktion über eine Funktionsprototypdeklaration verfügt, müssen Sie den Funktionsprototyp durch die Funktionsrollentypdeklaration ersetzen.
Die folgende Auflistung stammt aus der Headerdatei Fail_Driver6.h. Die zugehörigen Funktionen werden in FailDriver6.c deklariert.
/*++
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;
Nachdem Sie Ihre Treiberrückruffunktionen mithilfe von Rollentypdeklarationen deklariert haben, können Sie den Treiber überprüfen. Beim Überprüfen des Treibers wird die Datei "Sdv-map.h" erstellt, die Sie untersuchen können, um festzustellen, ob die Einstiegspunkte korrekt identifiziert wurden.
Ausführen der Codeanalyse für Treiber zum Überprüfen der Funktionsdeklarationen
Führen Sie die Codeanalyse für Treiber aus, um zu ermitteln, ob der Quellcode vorbereitet ist. Die Codeanalyse für Treiber sucht nach Funktionsrollentypdeklarationen und kann dabei helfen, Funktionsdeklarationen zu identifizieren, die möglicherweise verpasst wurden, oder Sie warnen, wenn die Parameter der Funktionsdefinition nicht mit denen im Funktionsrollentyp übereinstimmen.
Funktionsparameter und Funktionsrollentypen
Wie in der Programmiersprache C erforderlich, müssen die Parametertypen, die Sie in der Funktionsdefinition verwenden, mit den Parametertypen des Funktionsprototyps oder in diesem Fall dem Funktionsrollentyp übereinstimmen. SDV hängt von den Funktionssignaturen für die Analyse ab und ignoriert Funktionen, deren Signaturen nicht übereinstimmen.
Sie sollten beispielsweise eine EvtDriverDeviceAdd-Routine mit dem Funktionsrollentyp EVT_WDF_DRIVER_DEVICE_ADD deklarieren.
EVT_WDF_DRIVER_DEVICE_ADD myEvtDriverDeviceAdd;
Wenn Sie die Funktion myEvtDriverDeviceAdd implementieren, müssen die Parametertypen mit denen übereinstimmen, die von EVT_WDF_DRIVER_DEVICE_ADD verwendet werden, nämlich WDFDRIVER und PWDFDEVICE_INIT (Syntax finden Sie unter EvtDriverDeviceAdd-Routine ).
NTSTATUS
myEvtDriverDeviceAdd (
WDFDRIVER Driver,
PWDFDEVICE_INIT DeviceInit
)
{
}