Megosztás:


Függvények deklarálása függvényszerepkör-típusok használatával KMDF-illesztőprogramokhoz

Ahhoz, hogy az SDV elemezhessen egy KMDF-illesztőt, deklarálnia kell a függvényeket a KMDF függvényszerepkör-típus deklarációival. A függvényszerepkör-típusok a Wdf.h-ban és a Wdf.h-ban található egyéb KMDF-fejlécfájlokban vannak definiálva. A függvényszerepkör-típusok és a hozzájuk tartozó eseményvisszahívási függvények listáját a Static Driver Verifier KMDF-függvénydeklarációkcímű témakörben találja.

A KMDF-illesztőprogram minden eseményvisszahívási függvényét deklarálni kell a megfelelő szerepkörtípus megadásával.

Az alábbi példakód például a EvtDriverDeviceAdd visszahívási függvény függvényszerepkör-deklarációját mutatja be. Ebben a példában a visszahívási függvény neve myDriver_EvtDriverDeviceAdd. A függvényszerepkör típusa EVT_WDF_DRIVER_DEVICE_ADD.

EVT_WDF_DRIVER_DEVICE_ADD myDriver_EvtDriverDeviceAdd;

Ha a visszahívási függvény rendelkezik függvény-prototípus deklarációval, a függvény prototípusát le kell cserélnie a függvényszerepkör-típus deklarációra.

Az alábbi lista a Fail_Driver6.h fejlécfájlból származik. A kapcsolódó függvények deklarálva vannak a FailDriver6.c fájlban.

/*++

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;

Miután deklarálta az illesztőprogram visszahívási függvényeit szerepkörtípus-deklarációkkal, át is vizsgálhatja az illesztővezetőt . Az illesztőprogram vizsgálata létrehozza az Sdv-map.h fájlt, amelyet megvizsgálva megállapíthatja, hogy a belépési pontok helyesen lettek-e azonosítva.

Kódelemzés futtatása illesztőprogramokhoz a függvénydeklarációk ellenőrzéséhez

Annak megállapításához, hogy a forráskód készen áll-e, futtassa az illesztőprogram kódelemzéseparancsot. Az illesztőprogramok kódelemzése ellenőrzi a függvényszerepkör-deklarációkat, és segíthet azonosítani azokat a függvénydeklarációkat, amelyek esetleg kimaradtak, vagy figyelmeztetik, ha a függvénydefiníció paraméterei nem egyeznek a függvényszerepkör típusában szereplőkkel.

függvényparaméterek és függvényszerepkör-típusok

A C programozási nyelvben szükség szerint a függvénydefinícióban használt paramétertípusoknak meg kell egyezniük a függvény prototípusának paramétertípusával, vagy ebben az esetben a függvényszerepkör típusával. Az SDV az elemzéshez használt függvény-aláírásoktól függ, és figyelmen kívül hagyja azokat a függvényeket, amelyek aláírásai nem egyeznek.

Például deklarálnia kell egy EvtDriverDeviceAdd rutint a EVT_WDF_DRIVER_DEVICE_ADD függvényszerepkör típusával.

EVT_WDF_DRIVER_DEVICE_ADD myEvtDriverDeviceAdd;

A myEvtDriverDeviceAdd függvény implementálásakor a paramétertípusoknak meg kell egyeznie a EVT_WDF_DRIVER_DEVICE_ADD által használtakkal, nevezetesen a WDFDRIVER és a PWDFDEVICE_INIT (a szintaxishoz lásd EvtDriverDeviceAdd rutint).

NTSTATUS
 myEvtDriverDeviceAdd (
  WDFDRIVER Driver,
 PWDFDEVICE_INIT DeviceInit
 )
{
}