Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
Warnung C28168: Die Verteilerfunktion weist keine _Dispatch_type_ Anmerkung auf, die diesem Verteilertabelleneintrag entspricht.
Diese Warnung unterstützt statische Treiberüberprüfung, indem überprüft wird, ob jede der Verteilertabelle zugewiesene Funktion mit einer oder mehreren _Dispatch_type_ Anmerkungen kommentiert wird, die die Arten von Verteilervorgängen angeben, die von dieser Funktion ausgeführt werden. Das Codeanalysetool meldet diesen Fehler, wenn die Anmerkungen in der Funktion nicht mit dem Verteilertabelleneingabeplatz übereinstimmen.
Dieser Fehler kann korrigiert werden, indem der Funktion entweder eine _Dispatch_type_ Anmerkung hinzugefügt oder der verwendete Verteilertabelleneintrag korrigiert wird.
Beispiel
Im folgenden Codebeispiel wird diese Warnung generiert.
DRIVER_DISPATCH SampleCreate;
...
pDo->MajorFunction[IRP_MJ_CREATE] = SampleCreate;
...
Im folgenden Codebeispiel wird diese Warnung vermieden.
_Dispatch_type_(IRP_MJ_CREATE) DRIVER_DISPATCH SampleCreate;
...
pDo->MajorFunction[IRP_MJ_CREATE] = SampleCreate;
...
Kommentare
Unter bestimmten Umständen müssen Sie diese Warnung möglicherweise unterdrücken. Es gibt einige Treiber, z. B. Filtertreiber, die Verteilerroutinen innerhalb einer Schleife registrieren können, nachdem sie andere direkt registriert haben.
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;
}
In diesem Beispiel wird die funktion DispatchPassIrp ordnungsgemäß mit den folgenden Anmerkungen deklariert:
__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;
In dieser Situation meldet das Codeanalysetool diesen Fehler:
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.
Diese Verwendung einer Schleife in der Verteilertabelle ist in einigen Filtertreibern üblich. In diesem Fall kann die Fehlermeldung ignoriert werden, da dies eine Einschränkung der statischen Analyse ist. Das Codeanalysetool meldet diesen Fehler, wenn die Anmerkungen in der Funktion nicht mit dem Verteilertabelleneingabeplatz übereinstimmen. In diesem Fall meldet das Codeanalysetool eine unzulässige Zuordnung (die später rückgängig gemacht wird). Es gibt jedoch keine Möglichkeit für ein statisches Tool zu wissen, dass ein illegaler Zustand später rückgängig gemacht wird. Wenn Sie wissen, dass Sie eine Aufgabe auf diese Weise vornehmen und sie später beheben, können Sie die Warnung unterdrücken.