Aracılığıyla paylaş


C28168

uyarı C28168: Dispatch işlevinin bu dağıtım tablosu girişiyle eşleşen bir _Dispatch_type_ ek açıklaması yok

Bu uyarı, dağıtım tablosuna atanan her işlevin, bu işlev tarafından gerçekleştirilen dağıtım işlemlerinin türlerini gösteren bir veya daha fazla _Dispatch_type_ ek açıklamasıyla ek açıklama eklendiğini denetleyerek statik sürücü doğrulayıcı destekler. Kod Çözümleme aracı, işlevdeki ek açıklamalar gönderme tablosu giriş yuvasıyla eşleşmediğinde bu hatayı bildirir.

Bu hata, işleve bir _Dispatch_type_ ek açıklaması eklenerek veya kullanılan dağıtım tablosu girişi düzeltilerek düzeltilebilir.

Örneği

Aşağıdaki kod örneği bu uyarıyı oluşturur.

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

Aşağıdaki kod örneği bu uyarıyı önler.

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

açıklamaları

Bazı durumlarda bu uyarıyı gizlemeniz gerekebilir. Örneğin filtre sürücüleri gibi bazı sürücüler, diğerlerini doğrudan kaydettikten sonra dağıtım yordamlarını bir döngü içinde kaydedebilir.

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;
    }

Bu örnekte, DispatchPassIrp işlevi aşağıdaki ek açıklamalarla doğru şekilde bildirilir:

__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;

Bu durumda Kod Analizi aracı şu hatayı bildirir:

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.

Dağıtım tablosundaki bir döngünün bu kullanımı bazı filtre sürücülerinde yaygındır. Bu durumda, statik analizin bir sınırlaması olduğundan hata iletisi yoksayılabilir. Kod Çözümleme aracı, işlevdeki ek açıklamalar gönderme tablosu giriş yuvasıyla eşleşmediğinde bu hatayı bildirir. Bu durumda, Kod Analizi aracı geçersiz bir atama bildirir (daha sonra geri alınır). Ancak, statik bir aracın yasa dışı bir durumun daha sonra geri alınacağını bilmesinin hiçbir yolu yoktur. Ödevleri bu şekilde oluşturup daha sonra düzelttiğinizi biliyorsanız uyarıyı gizleyebilirsiniz.