Conjunto de reglas de advertencia (KMDF)
Use estas reglas para comprobar que el controlador puede procesar correctamente los IRP en varios contextos y sigue los procedimientos recomendados de Microsoft.
En esta sección
Tema | Descripción |
---|---|
La regla DeferredRequestCompleted especifica que si una solicitud de E/S presentada a la cola de E/S predeterminada de un controlador no se completa en la función de devolución de llamada, pero se aplaza para su procesamiento posterior, la solicitud debe completarse en una función de devolución de llamada de procesamiento diferida, a menos que se reenvíe y entregue la solicitud al marco, o a menos que se llame al método WdfRequestStopAcknowledge . |
|
La regla DriverAttributeChanged especifica que un controlador no debe cambiar el nivel de ejecución ni el ámbito de sincronización de un controlador KMDF. |
|
La regla DrvAckIoStop comprueba que el controlador es consciente de las solicitudes pendientes mientras su cola administrada por energía se apaga y el controlador reconoce, completa o cancela las solicitudes pendientes en consecuencia. En el caso de solicitudes de E/S autoadministradas, el controlador también debe controlar correctamente estas solicitudes desde su función EvtDeviceSelfManagedIoSuspend . Un controlador que no puede controlar estas solicitudes durante un apagado provocaría la comprobación de errores 0x9F: DRIVER_POWER_STATE_FAILURE. |
|
La regla EvtIoResumeGetParam especifica que no se llama a WdfRequestGetParameters dentro de la función de devolución de llamada EvtIoResumeGetParam . |
|
La regla EvtIoStopGetParam comprueba que no se llama a WdfRequestGetParameters dentro de la devolución de llamada EvtIoStop . |
|
La regla EvtIoStopResume especifica que si un controlador registra una función de devolución de llamada EvtIoStop y, a continuación, llama a WdfRequestStopAcknowledge con el parámetro Requeue igual a FALSE, el controlador debe registrar una función de devolución de llamada EvtIoResume . El marco entrega solicitudes a la función de devolución de llamada EvtIoResume cuando el dispositivo vuelve a entrar en el estado D0. |
|
La regla EvtSurpriseRemoveNoRequestComplete especifica que los controladores WDF no deben completar las solicitudes de la devolución de llamada EvtDeviceSurpriseRemoval , sino que se deben usar funciones de devolución de llamada de E/S autoadministradas. La devolución de llamada EvtDeviceSurpriseRemoval no se sincroniza con la ruta de alimentación. |
|
La regla FDOPowerPolicyOwnerAPI especifica que si un controlador de FDO renuncia a la propiedad de la directiva de energía, los métodos WdfDeviceInitSetPowerPolicyEventCallbacks, WdfDeviceAssignS0IdleSettings y WdfDeviceAssignSxWakeSettings solo se pueden llamar en las rutas de ejecución donde el controlador es propietario de la directiva de energía. SDV emite una advertencia para esta regla. |
|
La regla NoCancelFromEvtSurpriseRemove especifica que los controladores WDF no deben cancelar las solicitudes de la función de devolución de llamada EvtDeviceSurpriseRemoval , sino que se deben usar funciones de devolución de llamada de E/S autoadministradas. La función de devolución de llamada EvtDeviceSurpriseRemoval no está sincronizada con la ruta de alimentación. |
|
La regla PagedCodeAtD0 especifica que un controlador no debe marcar el código como paginable dentro de las funciones de devolución de llamada que se encuentran en la ruta de acceso de código de encendido. |
|
La regla ParentObjectCheck especifica que el controlador debe llamar a WdfMemoryCreate especificando un objeto primario mediante una estructura de WDF_OBJECT_ATTRIBUTES . Si el controlador no establece un objeto primario para el objeto de memoria del marco, el marco establece el controlador como el elemento primario predeterminado, de modo que, a menos que el controlador elimine explícitamente el objeto de memoria del marco, permanecerá en la memoria hasta que el objeto de controlador se descargue. |
|
La regla ReqNotCanceledLocal especifica que si una solicitud marcada como cancelable se completa en una función de devolución de llamada de cola de E/S predeterminada, se debe llamar al método WdfRequestUnmarkCancelable en la solicitud de E/S antes de finalizar. La solicitud de E/S debe completarse, a menos que se cancele la solicitud antes de llamar a WdfRequestUnmarkCancelable. |
|
La regla ReqSendFail especifica que un controlador debe establecer el estado de finalización correcto en los casos en los que el método WdfRequestSend podría producir un error. |
|
La regla RequestCompletedLocal especifica que si no se completa una solicitud de E/S en ninguna de las funciones de devolución de llamada EvtIoDefault, EvtIoRead, EvtIoWrite, EvtIoDeviceControl y EvtIoInternalDeviceControl y si no se llamó a WdfRequestMarkCancelable en la solicitud dentro de la función de devolución de llamada, podría haber un problema con la finalización de solicitudes en el código del controlador. |
|
Si el controlador cliente llama a WdfUsbTargetDeviceCreateWithParameters y especifica la versión del contrato de cliente USBD_CLIENT_CONTRACT_VERSION_602 en la estructura de WDF_USB_DEVICE_CREATE_CONFIG (para usar las nuevas funcionalidades de la pila de controladores USB para Windows 8), los DDIs que usan un URB solo usarían internamente el contexto URB si se aplica alguna de las condiciones previas siguientes: |
|
La regla SyncReqSend especifica que todas las solicitudes de envío sincrónicas se realizan mediante métodos de interfaz de controlador de dispositivo KMDF específicos sincrónicas y que los métodos tienen establecido un valor de tiempo de espera distinto de cero. |
|
La regla SyncReqSend2 especifica que las solicitudes sincrónicas que envían tienen establecido un valor de tiempo de espera distinto de cero. |
Para seleccionar el conjunto de reglas de advertencia
Seleccione el proyecto de controlador (.vcxProj) en Microsoft Visual Studio. En el menú Controlador , haga clic en Iniciar comprobador de controladores estáticos....
Haga clic en la pestaña Reglas . En Conjuntos de reglas, seleccione Advertencia.
Para seleccionar el conjunto de reglas predeterminado en una ventana del símbolo del sistema para desarrolladores de Visual Studio, especifique Warning.sdv con la opción /check . Por ejemplo:
msbuild /t:sdv /p:Inputs="/check:Warning.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 comprobadores de controladores estáticos (MSBuild).