Conjunto de reglas LocalIrpProcessing (WDM)
Use estas reglas para comprobar que el controlador controla correctamente los paquetes de solicitud de E/S (IRP) creados por el controlador.
En esta sección
Tema | Descripción |
---|---|
La regla IoAllocateComplete especifica que un controlador no debe llamar a IoCompleteRequest si el IRP se creó con IoAllocateIrp. |
|
La regla IoAllocateFree especifica que un controlador debe usar IoFreeIrp solo en irP asignados previamente con IoAllocateIrp. |
|
La regla IoAllocateForward especifica que si una llamada a IoAllocateIrp genera un IRP, el controlador debe establecer una rutina de finalización antes de llamar a IoCallDriver o PoCallDriver. |
|
La regla IoAllocateIrpSignalEventInCompletion especifica que el controlador debe llamar a KeSetEvent en la rutina de finalización cuando se establece la marca Irp-PendingReturned> y la rutina de finalización procesa un IRP asincrónico creado localmente. |
|
La regla IoAllocateIrpSignalEventInCompletion2 especifica que se debe llamar a KeSetEvent en la rutina de finalización cuando se establece la marca Irp-PendingReturned> y la rutina de finalización procesa un IRP asincrónico creado localmente. |
|
La regla IoAllocateIrpSignalEventInCompletion3 especifica que se debe llamar a KeSetEvent en la rutina de finalización cuando se establece la marca Irp-PendingReturned> y la rutina de finalización procesa un IRP asincrónico creado localmente. |
|
La regla IoAllocateIrpSignalEventInCompletionTimeout notifica un defecto si detecta que este controlador esperará indefinidamente hasta que se devuelva el controlador inferior, ya que es necesario indicar el evento de IRP en la rutina de finalización. |
|
La regla IoBuildDeviceControlNoFree especifica que un controlador que llama a IoBuildDeviceIoControlRequest no debe llamar a IoFreeIrp. |
|
La regla IoBuildDeviceControlWait especifica que se debe llamar a la rutina KeWaitForSingleObject si IoCallDriver o PoCallDriver devuelve STATUS_PENDING. |
|
La regla IoBuildDeviceControlWaitTimeout notifica un defecto si detecta que este controlador esperará indefinidamente hasta que se devuelva el controlador inferior, ya que es necesario indicar el evento del IRP en la rutina de finalización. |
|
La regla IoBuildDeviceIoControlSetEvent especifica que un controlador que llama a IoBuildDeviceIoControlRequest no debe llamar a KeSetEvent si el controlador proporciona un puntero a un objeto de evento asignado e inicializado por el autor de la llamada. El controlador no necesita llamar a KeSetEvent para este IRP. |
|
La regla IoBuildFsdComplete especifica que un controlador no debe llamar a IoCompleteRequest si el IRP se creó con IoBuildAsynchronousFsdRequest. |
|
La regla IoBuildFsdForward especifica que se debe establecer una rutina de finalización antes de que un controlador llame a IoCallDriver o PoCallDriver si el IRP se genera mediante una llamada a IoBuildAsynchronousFsdRequest. |
|
La regla IoBuildFsdFree especifica que un controlador debe usar IoFreeIrp solo en irP asignados previamente con IoBuildAsynchronousFsdRequest. |
|
La regla IoBuildFsdIrpSignalEventInCompletion especifica que el controlador debe llamar a KeSetEvent en la rutina de finalización cuando se establece la marca Irp-PendingReturned> y la rutina de finalización procesa un IRP asincrónico creado localmente. |
|
La regla IoBuildFsdIrpSignalEventInCompletion2 especifica que se debe llamar a KeSetEvent en la rutina de finalización cuando se establece la marca Irp-PendingReturned> y la rutina de finalización procesa un IRP asincrónico creado localmente. |
|
La regla IoBuildFsdIrpSignalEventInCompletion3 especifica que se debe llamar a KeSetEvent en la rutina de finalización cuando se establece la marca Irp-PendingReturned> y la rutina de finalización procesa un IRP asincrónico creado localmente. |
|
La regla IoBuildFsdIrpSignalEventInCompletionTimeout notifica un defecto cuando el controlador espera indefinidamente hasta que se devuelve el controlador inferior, ya que es necesario indicar el evento del IRP en la rutina de finalización. |
|
La regla IoBuildSynchronousFsdRequestNoFree especifica que un controlador que llama a IoBuildSynchronousFsdRequest no debe llamar a IoFreeIrp. |
|
La regla IoBuildSynchronousFsdRequestWait especifica que se debe llamar a KeWaitForSingleObject en caso de que IoCallDriver o PoCallDriver devuelva STATUS_PENDING. |
|
La regla IoBuildSynchronousFsdRequestWaitTimeout notifica un defecto si detecta que este controlador esperará indefinidamente hasta que se devuelva el controlador inferior, ya que es necesario indicar el evento del IRP en la rutina de finalización. |
|
La regla RequestedPowerIrp especifica que el controlador llama a PoRequestPowerIrp con la |
Para seleccionar el conjunto de reglas LocalIrpProcessing
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 LocalIrpProcessing.
Para seleccionar el conjunto de reglas predeterminado en una ventana del símbolo del sistema para desarrolladores de Visual Studio, especifique LocalIrpProcessing.sdv con la opción /check . Por ejemplo:
msbuild /t:sdv /p:Inputs="/check:LocalIrpProcessing.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).