Nota
L'accés a aquesta pàgina requereix autorització. Pots provar d'iniciar sessió o canviar de directori.
L'accés a aquesta pàgina requereix autorització. Pots provar de canviar directoris.
advertencia C28168: la función dispatch no tiene una anotación _Dispatch_type_ que coincida con esta entrada de tabla de distribución
Esta advertencia admite comprobador de controladores estáticos comprobando que cada función asignada a la tabla de distribución se anota con una o varias anotaciones _Dispatch_type_ que indican los tipos de operaciones de distribución realizadas por esa función. La herramienta Análisis de código notifica este error cuando las anotaciones de la función no coinciden con la ranura de entrada de la tabla de distribución.
Este defecto se puede corregir agregando una anotación _Dispatch_type_ a la función o corrigiendo la entrada de la tabla de distribución que se está usando.
Ejemplo de
El ejemplo de código siguiente genera esta advertencia.
DRIVER_DISPATCH SampleCreate;
...
pDo->MajorFunction[IRP_MJ_CREATE] = SampleCreate;
...
En el ejemplo de código siguiente se evita esta advertencia.
_Dispatch_type_(IRP_MJ_CREATE) DRIVER_DISPATCH SampleCreate;
...
pDo->MajorFunction[IRP_MJ_CREATE] = SampleCreate;
...
comentarios de
En algunas circunstancias, es posible que tenga que suprimir esta advertencia. Hay algunos controladores, por ejemplo, controladores de filtro, que pueden registrar rutinas de distribución dentro de un bucle, después de que hayan registrado otros directamente.
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;
}
En este ejemplo, la función DispatchPassIrp se declara correctamente con las siguientes anotaciones:
__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;
En esta situación, la herramienta Análisis de código notifica este error:
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.
Este uso de un bucle en la tabla de distribución es común en algunos controladores de filtro. En esta situación, se puede omitir el mensaje de error, ya que se trata de una limitación del análisis estático. La herramienta Análisis de código notifica este error cuando las anotaciones de la función no coinciden con la ranura de entrada de la tabla de distribución. En este caso, la herramienta Análisis de código notifica una asignación no válida (que se deshace más adelante). Sin embargo, no hay forma de que una herramienta estática sepa que un estado no válido se deshacerá más adelante. Si sabe que va a realizar asignaciones de esta manera y corregirlas más adelante, puede suprimir la advertencia.