Megosztás:


C28168

C28168 figyelmeztetés: A diszpécser függvénynek nincs _Dispatch_type_ megjegyzése, amely megfelel a küldési tábla bejegyzésének

Ez a figyelmeztetés támogatja Statikus illesztőprogram-ellenőrző, ha ellenőrzi, hogy a diszpécsertáblához rendelt összes függvény egy vagy több _Dispatch_type_ széljegyzettel van-e megjelölve, amely az adott függvény által végrehajtott kézbesítési műveleteket jelzi. A Kódelemzési eszköz akkor jelenti ezt a hibát, ha a függvény széljegyzetei nem felelnek meg a küldőtábla belépési pontjának.

Ez a hiba kijavítható egy _Dispatch_type_ jegyzet hozzáadásával a függvényhez, vagy a használt feladótábla-bejegyzés kijavításával.

példa

Az alábbi példakód generálja ezt a figyelmeztetést.

DRIVER_DISPATCH SampleCreate;
...
pDo->MajorFunction[IRP_MJ_CREATE] = SampleCreate;
...

Az alábbi példakód elkerüli ezt a figyelmeztetést.

_Dispatch_type_(IRP_MJ_CREATE) DRIVER_DISPATCH SampleCreate;
...
pDo->MajorFunction[IRP_MJ_CREATE] = SampleCreate;
...

megjegyzések

Bizonyos esetekben előfordulhat, hogy el kell tiltania ezt a figyelmeztetést. Vannak olyan illesztőprogramok, például szűrőillesztők, amelyek regisztrálhatják a küldési rutinokat egy hurokban, miután közvetlenül regisztráltak másokat.

DriverObject->MajorFunction[IRP_MJ_CREATE]         = DispatchCreate;
DriverObject->MajorFunction[IRP_MJ_READ]           = DispatchRead;
for (Index = 0; Index <= IRP_MJ_MAXIMUM_FUNCTION; Index++)
    {
            DriverObject->MajorFunction[Index] = DispatchPassIrp;
    }

Ebben a példában a DispatchPassIrp függvény helyesen deklarálva van a következő széljegyzetekkel:

__drv_dispatchType(IRP_MJ_CREATE_NAMED_PIPE)
__drv_dispatchType(IRP_MJ_QUERY_INFORMATION)
// .... 
//  (additional dispatch type annotations) 
// ....
__drv_dispatchType(IRP_MJ_CREATE_NAMED_PIPE)
    DRIVER_DISPATCH DispatchPassIrp;

Ebben a helyzetben a Kódelemzési eszköz a következő hibát jelenti:

The function 'DispatchPassIrp' does not have a _Dispatch_type_ annotation matching dispatch table position 'IRP_MJ_CREATE' (0x00):  This can be  corrected either by adding a _Dispatch_type_ annotation to the function declaration or correcting the dispatch table entry being used.

Egyes szűrőillesztőkben gyakori a hurok használata a diszpécsertáblában. Ebben az esetben a hibaüzenet figyelmen kívül hagyható, mivel ez a statikus elemzés korlátozása. A Kódelemzési eszköz akkor jelenti ezt a hibát, ha a függvény széljegyzetei nem felelnek meg a küldőtábla belépési pontjának. Ebben az esetben a Kódelemzési eszköz illegális hozzárendelést jelent (ez később visszavonva). A statikus eszközök azonban nem tudják, hogy egy illegális állapot később vissza lesz vonva. Ha tudja, hogy így végez feladatokat, és később kijavítja őket, letilthatja a figyelmeztetést.