Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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.