Compartir a través de


Conjunto de reglas de uso de DDI (NDIS)

Use estas reglas para comprobar que el controlador usa correctamente los DDIs de NDIS.

En esta sección

Tema Descripción

Init_DeRegisterInterrupt

La regla de Init_DeRegisterInterrupt especifica que si se llama a NdisMRegisterInterruptEx al menos una vez durante MPInitilize, se debe llamar a NdisMDeregisterInterruptEx al menos una vez en MPHaltEx.

Init_NdisAllocateIoWorkItem

La regla de Init_NdisAllocateIoWorkItem especifica que si se llama a NdisAllocateIoWorkItem al menos una vez durante MiniportInitializeEx, la función NdisFreeIoWorkItem debe:

Init_RegisterInterrupt

La regla de Init_RegisterInterrupt especifica que el registro de interrupciones, que suele ocurrir durante la inicialización, debe deshacerse si algo va mal en el proceso de inicialización o durante la detención del controlador de miniport.

Si se llama a NdisMRegisterInterruptEx al menos una vez durante MiniportInitializeEx, se debe llamar a la función NdisMDeregisterInterruptEx al menos una vez en MiniportHaltEx.

Init_RegisterSG

La regla Init_RegisterSG especifica que el registro de la lista de dispersión-recolección (SG), que suele ocurrir durante la inicialización, debe deshacerse si algo va mal en el proceso de inicialización o durante la detención del controlador de miniport.

Si se llama a NdisMRegisterScatterGatherDma al menos una vez durante MiniportInitializeEx, se debe llamar a la función NdisMDeregisterScatterGatherDma al menos una vez en MiniportHaltEx.

NdisFDeregisterFilterDriver

Un controlador de filtro debe llamar a NdisFDeregisterFilterDriver desde su rutina FilterDriverUnload .

NdisMDeregisterInterruptEx

Después de que NdisMDeregisterInterruptEx devuelva el control, el controlador de miniport no puede llamar a la función NdisMSynchronizeWithInterruptEx.

NullCheck

La regla NullCheck comprueba que un valor NULL dentro del código del controlador no se desreferencia más adelante en el controlador. Esta regla notifica un defecto si alguna de estas condiciones es cierta:

  • Hay la asignación de un valor NULL que se desreferencia más adelante.
  • Hay un parámetro global o un procedimiento en un controlador que puede ser NULL que se desreferencia más adelante y hay una comprobación explícita en el controlador que sugiere que el valor inicial del puntero puede ser NULL.

Cuando se producen infracciones de la regla NullCheck, las instrucciones de código más relevantes se destacan en el panel de árbol de trazas. Para obtener más información sobre cómo trabajar con la salida del informe, vea Informe de comprobador de controladores estáticos y Descripción del Visor de seguimiento.

Para seleccionar el conjunto de reglas de uso de DDI

  1. Seleccione el proyecto de controlador (.vcxProj) en Microsoft Visual Studio. En el menú Controlador , haga clic en Iniciar comprobador de controladores estáticos....

  2. Haga clic en la pestaña Reglas . En Conjuntos de reglas, seleccione DDIUsage.

    Para seleccionar el conjunto de reglas predeterminado en una ventana del símbolo del sistema de comandos para desarrolladores de Visual Studio, especifique DDIUsage.sdv con la opción /check. Por ejemplo:

    msbuild /t:sdv /p:Inputs="/check:DDIUsage.sdv" mydriver.VcxProj /p:Configuration="Win8 Release" /p:Platform=Win32
    

    Para obtener más información, consulte Uso del comprobador de controladores estáticos para buscar defectos en controladores y comandos de comprobador de controladores estáticos (MSBuild).