Conjunto de reglas RequestProcessing (KMDF)
Use estas reglas para comprobar que el controlador se completa o cancela correctamente los paquetes de solicitud de E/S (IRP).
En esta sección
Tema | Descripción |
---|---|
La regla ChangeQueueState especifica que el controlador WDF no intenta cambiar el estado de la cola de subprocesos simultáneos o no llama al estado cambiando los DDIs uno después de otro desde dentro del mismo subproceso. Las funciones de devolución de llamada que cambian el estado de la cola son WdfIoQueueStopSynchronously,WdfIoQueuePurge,WdfIoQueuePurgeSynchronously, WdfIoQueueDrain, WdfIoQueueDrainSynchronously, WdfIoQueueStopAndPurge y WdfIoQueueStopAndPurgeSynchronously. Si se llama a estos DDIs cuando un cambio de estado de cola ya está en curso, hará que un equipo se bloquee o deje de responder. |
|
La regla CompleteCanceledReq especifica que si la solicitud ya se ha cancelado, la solicitud ya no es válida y el controlador no debe completarla. Aunque el controlador desmarca una solicitud que se marcó previamente como cancelable, debe comprobar que la solicitud aún no se ha cancelado. Si el controlador no realiza esta comprobación, es posible que el controlador complete una solicitud que se haya liberado. |
|
La regla DoubleCompletion especifica que los controladores no deben completar una solicitud de E/S dos veces. No se debe llamar a los métodos siguientes dos veces en una fila para la misma solicitud: WdfRequestComplete, WdfRequestCompleteWithInformation, WdfRequestCompleteWithPriorityBoost. |
|
La regla DoubleCompletionLocal especifica que los controladores no deben completar una solicitud de E/S dos veces. |
|
La regla EvtIoStopCancel especifica que dentro de la función de devolución de llamada EvtIoStop , el controlador llama a uno de los métodos siguientes para las solicitudes de E/S que no se pueden cancelar. |
|
La regla EvtIoStopCompleteOrStopAck especifica que dentro de la función de devolución de llamada EvtIoStop , el controlador llama a uno de los métodos siguientes para cada solicitud de E/S presentada por el marco. Si esto no se hace, el controlador podría impedir que el sistema entre en otro estado de potencia inferior. |
|
La regla EvtSurpriseRemoveNoSuspendQueue especifica que los controladores de WDF no deben purgar, detener o purgar la cola 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 FileObjectConfigured especifica que una llamada al método WdfRequestGetFileObject está precedida por una llamada a WdfDeviceInitSetFileObjectConfig. |
|
La regla InternalIoctlReqs especifica que las solicitudes IOCTL internas no se pasan a interfaces de controlador de dispositivo (DDIs) de envío de solicitudes KMDF inapropiadas. |
|
La regla InvalidReqAccess especifica que no se tiene acceso a las solicitudes una vez completadas o canceladas. Esta regla puede superponerse con otras reglas, como las reglas que comprueban la finalización doble o las reglas que comprueban si hay solicitudes se han marcado como cancelables dos veces. |
|
La regla InvalidReqAccessLocal especifica que no se tiene acceso a las solicitudes creadas localmente una vez completadas o canceladas. Esta regla puede superponerse con otras reglas, como las reglas que comprueban la finalización doble o las reglas que comprueban si hay solicitudes se han marcado como cancelables dos veces. |
|
La regla IoctlReqs especifica que las solicitudes IOCTL no deben pasarse a una solicitud KMDF inapropiada ni enviar interfaces de controlador de dispositivo (DDIs). |
|
La regla MarkCancOnCancReqLocal especifica que el método WdfRequestMarkCancelable no se puede llamar dos veces consecutivas en la misma solicitud de E/S. |
|
La regla NoIoQueuePurgeSynchronously comprueba que los controladores de WDF no llaman a las funciones WdfIoQueueStopSynchronously, WdfIoQueueDrainSynchronously, WdfIoQueueStopAndPurgeSynchronously o WdfIoQueuePurgeSynchronously desde las siguientes funciones de devolución de llamada del objeto de cola evtIO: |
|
La regla OutputBufferAPI especifica que los DDIs correctos para la recuperación del búfer se usan en la función de devolución de llamada EvtIoWrite . Dentro de la función de devolución de llamada EvtIoWrite , no se puede llamar a las siguientes DDIs para la recuperación del búfer: |
|
La regla ReadReqs especifica que las solicitudes de lectura no se pasan a métodos KMDF inadecuados. |
|
La regla ReqCompletionRoutine especifica que se debe establecer una rutina de finalización antes de enviar una solicitud a un destino de E/S. |
|
La regla ReqDelete especifica que las solicitudes creadas por el controlador no se pasan a las funciones WdfRequestCompleteXxx . En su lugar, la solicitud debe eliminarse tras la finalización. |
|
La regla ReqIsCancOnCancReq especifica que solo se puede llamar al método WdfRequestIsCanceled en una solicitud que no está marcada como cancelable. |
|
La regla ReqMarkCancelableSend especifica que las solicitudes reenviadas por el controlador no se marcan como cancelables llamando a WdfRequestMarkCancelable. |
|
La regla DeferredRequestCompleted especifica que, para un controlador que no sea de filtro, se debe completar cada solicitud presentada a la cola de E/S predeterminada del controlador, a menos que se aplaza o reenvíe la solicitud, o si se llama a WdfRequestStopAcknowledge . |
|
La regla RequestFormattedValid especifica que el controlador da formato a todas las solicitudes, excepto una solicitud de WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET, antes de enviarlos a un destino de E/S. |
|
La regla RequestGetStatusValid que especifica que se debe llamar a WdfRequestGetStatus para una solicitud en una de las situaciones siguientes:
|
|
La regla RequestSendAndForgetNoFormatting comprueba que el controlador no da formato a una solicitud mediante las funciones de formato de destino de E/S antes de enviarlo a un destino de E/S con la opción de envío WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET. |
|
La regla RequestSendAndForgetNoFormatting2 comprueba que el controlador no da formato a una solicitud mediante las funciones de formato de destino de E/S antes de enviarlo a un destino de E/S con la opción de envío WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET. |
|
La regla StopAckWithinEvtIoStop especifica que la función WdfRequestStopAcknowledge solo se llama desde dentro de la función de devolución de llamada EvtIoStop . |
|
La regla WdfIoQueueFindRequestFailed especifica que WdfIoQueueRetrieveFoundRequest o WdfObjectDereference solo se debe llamar después de que WdfIoQueueFindRequestFailed devuelva STATUS_SUCCESS. |
|
La regla WdfIoQueueRetrieveFoundRequest especifica que se llama al método WdfIoQueueRetrieveFoundRequest solo después de llamar a WdfIoQueueFindRequest y se devuelve STATUS_SUCCESS y no se llama a WdfObjectDereference en la misma solicitud. |
|
La regla WdfIoQueueRetrieveNextRequest especifica que no se llama a WdfIoQueueRetrieveNextRequest después de llamar a WdfIoQueueFindRequest . |
|
La regla WriteReqs especifica que una solicitud de escritura no se pasa a métodos KMDF inadecuados. |
Para seleccionar el conjunto de reglas RequestProcessing
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 RequestProcessing.
Para seleccionar el conjunto de reglas predeterminado en una ventana del símbolo del sistema para desarrolladores de Visual Studio, especifique RequestProcessing.sdv con la opción /check . Por ejemplo:
msbuild /t:sdv /p:Inputs="/check:RequestProcessing.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).