Compartir a través de


Pruebas PnP (aspectos básicos del dispositivo)

Las pruebas PnP de Los aspectos básicos del dispositivo obligan a un controlador a controlar casi todos los IRP de PnP; sin embargo, hay tres áreas que están estresadas específicamente: eliminación, reequilibrio y eliminación sorpresa. La prueba PnP proporciona un mecanismo para probar cada uno de ellos por separado o para probarlos todos juntos (es decir, como una prueba de esfuerzo). Esta prueba de PnP se realiza mediante una combinación de llamadas API en modo de usuario (a través de la aplicación de prueba) y llamadas API en modo kernel (a través de un controlador de filtro superior).

Pruebas PNP

Las pruebas de Plug and Play (PnP) ejecutan varias rutas de código relacionadas con PnP en los componentes de controlador y modo de usuario. Las pruebas PnP deben ejecutarse con el comprobador de controladores habilitado en el equipo de prueba. Para obtener información sobre cómo habilitar el comprobador de controladores, vea Propiedades del comprobador de controladores para proyectos de controladores.

Prueba Descripción

Deshabilitación de la compatibilidad con pruebas mejoradas de dispositivos (EDT)

Esta prueba desinstala el controlador de filtro de prueba (msdmfilt.sys) como filtro superior en los dispositivos especificados mediante el parámetro DQ. Este filtro de prueba se instala como parte de la ejecución de pruebas en esta categoría de prueba.

Parámetros: : consulte Parámetros de prueba de los aspectos básicos del dispositivo.

DQ

TestCycles

DoSimpleIO

IOPeriod

DoConcurrentIO

IOType

PNP (deshabilitar y habilitar) reiniciar con E/S antes y después

Esta prueba realiza la deshabilitación/habilitación básica de PnP y E/S en dispositivos con un reinicio del sistema.

Prueba binaria: Devfund_PNP_DisableEnable_Reboot_With_IO_BeforeAndAfter.wsc

Método de prueba: PNP_DisableEnable_Reboot_With_IO_Before_And_After

Parámetros: : consulte Parámetros de prueba de los aspectos básicos del dispositivo.

DQ

IOPeriod

PNP (deshabilitar y habilitar) con E/S antes y después

Esta prueba realiza E/S y PnP básico deshabilita o habilita en dispositivos.

Esta prueba hace lo siguiente:

  1. Comprueba que no hay ningún dispositivo en los códigos de problema del dispositivo de informes del sistema.
  2. Prueba la E/S en todos los dispositivos del sistema mediante complementos de E/S simples de WDTF. Consulte Complementos de E/S simples de WDTF proporcionados para obtener más información.
  3. Deshabilita y habilita todos los dispositivos del sistema mediante interfaces de acción PnP WDTF, consulte Métodos IWDTFPNPAction2::D isableDevice e IWDTFPNPAction2::EnableDevice para obtener más información.
  4. Comprueba que no hay ningún dispositivo en los códigos de problema del dispositivo de informes del sistema.
  5. Prueba la E/S en todos los dispositivos del sistema mediante complementos de E/S simples de WDTF. Consulte Complementos de E/S simples de WDTF proporcionados para obtener más información.
  6. Repite los pasos entre 3 y 5 varias veces.

Prueba binaria: Devfund_PNP_DisableEnable_With_IO_BeforeAndAfter.wsc

Método de prueba: PNP_DisableEnable_With_IO_Before_And_After

Parámetros: : consulte Parámetros de prueba de los aspectos básicos del dispositivo.

DQ

IOPeriod

Prueba de eliminación de dispositivo de cancelación de PNP

Esta prueba usa el controlador de filtro EDT para enviar IRP_MN_CANCEL_REMOVE_DEVICE a las pilas de dispositivos de destino.

Para obtener más información, consulte Acerca de las pruebas de eliminación de dispositivos.

Prueba binaria: Devfund_PnPDTest.dll

Método de prueba: PNPCancelRemoveDevice

Parámetros: : consulte Parámetros de prueba de los aspectos básicos del dispositivo.

DQ

TestCycles

DoSimpleIO

IOPeriod

DoConcurrentIO

Prueba de cancelación del dispositivo de cancelación de PNP

Esta prueba usa el controlador de filtro EDT para enviar IRP_MN_CANCEL_STOP_DEVICE a las pilas de dispositivos de destino.

Para obtener más información, consulte Acerca de las pruebas de reequilibrio.

Prueba binaria: Devfund_PnPDTest.dll

Método de prueba: PNPCancelStopDevice

Parámetros: : consulte Parámetros de prueba de los aspectos básicos del dispositivo.

DQ

TestCycles

DoSimpleIO

IOPeriod

DoConcurrentIO

Prueba de eliminación de dispositivos de PNP DIF

Esta prueba usa la API setupDi para enviar una solicitud de DIF_REMOVE para que los instaladores quiten el dispositivo.

Prueba binaria: Devfund_PnPDTest.dll

Método de prueba: PNPDIFRemoveAndRescanParentDevice

Parámetros: : consulte Parámetros de prueba de los aspectos básicos del dispositivo.

DQ

TestCycles

DoSimpleIO

IOPeriod

DoConcurrentIO

PNP Disable and Enable Device test

Esta prueba deshabilita y habilita los dispositivos de destino.

Prueba binaria: Devfund_PnPDTest.dll

Método de prueba: PNPDisableAndEnableDevice

Parámetros: : consulte Parámetros de prueba de los aspectos básicos del dispositivo.

DQ

TestCycles

DoSimpleIO

IOPeriod

DoConcurrentIO

IOType

Prueba del dispositivo de reequilibrio de reequilibrio de PNP

Esta prueba usa el controlador de filtro EDT para intentar enviar IRP_MN_STOP_DEVICE a las pilas de dispositivos de destino. A continuación, se produce un error en el controlador de filtro EDT IRP_MN_START_DEVICE solicitudes (que siguen IRP_MN_STOP_DEVICE solicitudes) para desencadenar la eliminación sorpresa de los dispositivos de destino.

Para obtener más información, consulte Acerca de las pruebas de reequilibrio.

Prueba binaria: Devfund_PnPDTest.dll

Método de prueba: PNPTryStopDeviceAndFailRestart

Parámetros: : consulte Parámetros de prueba de los aspectos básicos del dispositivo.

DQ

TestCycles

DoSimpleIO

IOPeriod

DoConcurrentIO

Prueba de nuevo dispositivo de solicitud de reequilibrio de PNP

Esta prueba usa el controlador de filtro EDT para intentar enviar IRP_MN_STOP_DEVICE a las pilas de dispositivos de destino. También manipula los requisitos de recursos de los dispositivos para maximizar las posibilidades de que se asignen nuevos recursos a los dispositivos.

Para obtener más información, consulte Acerca de las pruebas de reequilibrio.

Prueba binaria: Devfund_PnPDTest.dll

Método de prueba: PNPTryStopDeviceRequestNewResourcesAndRestartDevice

Parámetros: : consulte Parámetros de prueba de los aspectos básicos del dispositivo.

DQ

TestCycles

DoSimpleIO

IOPeriod

DoConcurrentIO

Prueba de eliminación de dispositivos PNP

Esta prueba hace que IRP_MN_QUERY_REMOVE_DEVICE y IRP_MN_REMOVE_DEVICE se envíen a las pilas de dispositivos de destino.

Para obtener más información, consulte Acerca de las pruebas de eliminación de dispositivos.

Prueba binaria: Devfund_PnPDTest.dll

Método de prueba: PNPRemoveAndRestartDevice

Parámetros: : consulte Parámetros de prueba de los aspectos básicos del dispositivo.

DQ

TestCycles

DoSimpleIO

IOPeriod

DoConcurrentIO

Prueba de dispositivo de detención de PNP (reequilibrio)

Esta prueba usa el controlador de filtro EDT para intentar enviar IRP_MN_STOP_DEVICE a las pilas de dispositivos de destino.

Para obtener más información, consulte Acerca de las pruebas de reequilibrio.

Prueba binaria: Devfund_PnPDTest.dll

Método de prueba: PNPTryStopAndRestartDevice

Parámetros: : consulte Parámetros de prueba de los aspectos básicos del dispositivo.

DQ

TestCycles

DoSimpleIO

IOPeriod

DoConcurrentIO

Prueba de eliminación de dispositivo sorpresa de PNP

Esta prueba usa el controlador de filtro EDT para enviar IRP_MN_SURPRISE_REMOVAL a las pilas de dispositivos de destino.

Para obtener más información, vea Acerca de la prueba de eliminación sorpresa.

Prueba binaria: Devfund_PnPDTest.dll

Método de prueba: PNPSurpriseRemoveAndRestartDevice

Parámetros: : consulte Parámetros de prueba de los aspectos básicos del dispositivo.

DQ

TestCycles

DoSimpleIO

IOPeriod

DoConcurrentIO

Acerca de las pruebas de eliminación de dispositivos

  • Prueba de eliminación de dispositivos PNP
  • Prueba de eliminación de dispositivo de cancelación de PNP

La prueba de eliminación de dispositivos abarca IRP_MN_QUERY_REMOVE_DEVICE, IRP_MN_CANCEL_REMOVE_DEVICE y IRP_MN_REMOVE_DEVICE.

La prueba intenta instalar su controlador de filtro superior en la pila de dispositivos de destino. Este intento da como resultado una irP de eliminación de consultas.

Si se produce un error en este IRP de eliminación de consultas, la prueba reinicia el equipo para obtener el controlador de filtro en la pila de dispositivos. Si la solicitud de eliminación no se ve, se quitará la pila del dispositivo y se reiniciará con el controlador de filtro en la pila del dispositivo.

La prueba, mediante las API de configuración, hace que se envíe un IRP de eliminación de consultas a la pila de dispositivos. El controlador de filtro produce un error en esta solicitud de eliminación, por lo que se envía un IRP cancel-remove. El controlador de filtro afirmará que la cancelación-eliminación se realizó correctamente.

A continuación, la aplicación de prueba llama al instalador de clase adecuado y a los coinserdores registrados para deshabilitar o habilitar o quitar o volver a enumerar el dispositivo (esto prueba la clase y los coinstitulos que controlan DIF_PROPERTYCHANGE con DICS_DISABLE, DICS_ENABLE y DICS_PROPCHANGE). Al recibir IRP_MN_REMOVE_DEVICE, el controlador de filtro afirmará que los controladores inferiores lo completaron correctamente.

Cada uno de estos pasos implica una solicitud de eliminación preliminar. Si esa solicitud se ve vete, no se quitará el dispositivo. Puede optar por vetar una solicitud de eliminación cuando corresponda, como al transmitir vídeo en una cámara USB o si el dispositivo de destino está en la ruta de acceso de arranque o paginación. Recuerde que, por lo general, no se recomienda realizar errores en todas las solicitudes de eliminación. Si se produce un error en todas las solicitudes de eliminación, no se garantiza que el controlador nunca reciba una eliminación porque se seguirá emitiendo un IRP después de una eliminación sorpresa o si alguien de la pila del dispositivo produce un error en el IRP de inicio.

Acerca de la prueba de eliminación sorpresa

  • Prueba de eliminación de dispositivo sorpresa de PNP

La prueba de eliminación sorpresa abarca IRP_MN_SURPRISE_REMOVAL seguido de IRP_MN_REMOVE_DEVICE.

Al igual que con las pruebas anteriores, la aplicación de prueba intentará agregar un filtro superior a la pila de dispositivos de destino y, a continuación, reiniciará la pila. Si este intento no se realiza correctamente, la prueba reinicia el equipo.

Cuando la aplicación de prueba la desencadena, el controlador de filtro hará que el sistema envíe una IRP_MN_SURPRISE_REMOVAL a la pila del dispositivo, seguida de un IRP_MN_REMOVE_DEVICE. El controlador de filtro afirmará que ambos IRP se completan correctamente mediante controladores inferiores.

Una vez completada la prueba de eliminación sorpresa, el dispositivo se desinstalará y volverá a enumerar, lo que también quitará el controlador de filtro de la pila.

Acerca de las pruebas de reequilibrio

  • Prueba de dispositivo de detención de PNP (reequilibrio)
  • Prueba de nuevo dispositivo de solicitud de reequilibrio de PNP
  • Prueba del dispositivo de reequilibrio de reequilibrio de PNP
  • Prueba de cancelación del dispositivo de cancelación de PNP

Al igual que con la prueba de eliminación, la aplicación de prueba intenta agregar un filtro superior a la pila de dispositivos de destino y, a continuación, reiniciar la pila de dispositivos mediante SetupDiCallClassInstaller con DIF_PROPERTYCHANGE. Si este intento no se realiza correctamente (es decir, si alguien de la pila de dispositivos de destino produjo un error en el IRP de eliminación de consultas), la prueba reinicia el equipo para probar el reequilibrio.

Dependiendo de la prueba de reequilibrio que elija, se producen los siguientes eventos:

  1. Prueba de dispositivo de detención de PNP (reequilibrio) Esta prueba inicia un procedimiento de reequilibrio que da como resultado el IRP_MN_QUERY_STOP_DEVICE IRP de PnP al controlador del dispositivo.

    Si algún controlador de la pila produce un error en este IRP, se abandona el procedimiento de reequilibrio. Tenga en cuenta que en Windows Vista, hay compatibilidad con el reequilibrio de varios niveles. Si se inicia un reequilibrio en un nodo de dispositivo no hoja, todas las pilas de dispositivos presentes en el árbol de dispositivos con ese nodo de dispositivo, ya que la raíz también pasa por reequilibrar. Y si alguna de las pilas de dispositivos secundarios produce un error en la detención de la consulta, se abandona todo el procedimiento de reequilibrio. Por lo tanto, los controladores no deben producir errores en la consulta sin un motivo genuino para hacerlo. Si se produce este error, el administrador de PnP envía la detención de cancelación (IRP_MN_CANCEL_STOP) a todas las pilas de dispositivos que se han enviado para detener la consulta.

    Si todas las pilas de dispositivos implicadas pasan la detención de consultas, la prueba continúa con el reequilibrio y envía el IRP_MN_QUERY_RESOURCE_REQUIREMENTS y IRP_MN_FILTER_RESOURCE_REQUIREMENTS IRPS para encontrar el requisito de recurso de los dispositivos.

    Después de este punto, dos rutas de acceso diferentes son posibles en función de si el dispositivo de destino consume recursos o no:

    • Si el dispositivo no consume ningún recurso, el propio administrador de PnP envía una detención de cancelación (IRP_MN_CANCEL_STOP_DEVICE) como una optimización.

      Si el dispositivo realmente consume recursos, el procedimiento de reequilibrio se completa con el IRP_MN_STOP_DEVICE y IRP_MN_START_DEVICE IRP.

    Con esta opción, los recursos del dispositivo no cambian.

  2. Prueba de cancelación del dispositivo de cancelación de PNP: esta prueba inicia un procedimiento de reequilibrio, pero el controlador de filtro produce deliberadamente un error en la consulta para detener IRP. El orden de los IRP es similar a IRP_MN_QUERY_STOP_DEVICE (que el controlador de filtro produce un error al llegar, lo que provoca una cancelación del reequilibrio) y IRP_MN_CANCEL_STOP_DEVICE.

    Con esta opción, los recursos del dispositivo no cambian.

  3. Prueba de nuevo dispositivo de solicitud de reequilibrio de PNP Esta prueba inicia un reequilibrio y también manipula el requisito de recursos del dispositivo para maximizar las posibilidades de que realmente se asignen nuevos recursos al dispositivo. Esta opción también ayuda a un dispositivo sin recursos a pasar por el procedimiento de reequilibrio completo:

    1. En primer lugar, se inicia el reequilibrio simple, lo que provoca los siguientes IRP:

      • IRP_MN_QUERY_STOP_DEVICE (suponiendo que todos los controladores pasan este IRP. La prueba ya ha tratado el caso en el que se produce un error en este IRP).
      • IRP_MN_QUERY_RESOURCE_REQUIREMENTS
      • IRP_MN_FILTER_RESOURCE_REQUIREMENTS. En respuesta a este IRP, al subir, el controlador de filtro toma medidas en función de si el dispositivo consume recursos o no:
        • Si el dispositivo no tiene ningún requisito de recursos, el filtro asigna un recurso falso.
        • Si el dispositivo tiene un requisito de recursos, intenta reestructurar la lista de requisitos de recursos de forma que maximice la probabilidad de cambiar la asignación actual. Por ejemplo, si un dispositivo necesita 2 bytes de memoria en cualquier lugar entre 00 y FF y actualmente está asignado 3A-3B, modifique de modo que el nuevo requisito de recurso (en orden de preferencia) tenga el aspecto 00-39 o 3C-FF o 3A-3B. Del mismo modo, si la lista de requisitos de recursos de dispositivo tiene requisitos alternativos, cambiará su orden para que el requisito alternativo se muestre anteriormente en la lista.
    2. Ahora el dispositivo siempre debe completar el procedimiento de reequilibrio.

      IRP_MN_STOP_DEVICE

      IRP_MN_START_DEVICE (los nuevos recursos asignados. Si se crearon requisitos falsos, enmascara los nuevos recursos de los controladores reales).

  4. Prueba de reinicio del dispositivo de reequilibrio de PNP Esta prueba inicia un reequilibrio, pero cuando el controlador de filtro obtiene el inicio después del reequilibrio, se produce deliberadamente un error, lo que provoca la eliminación sorpresa IRP seguido de IrP de eliminación.

    En primer lugar, inicia el procedimiento de reequilibrio y se asegura de que el controlador obtiene una detención y un inicio mediante la generación de un requisito de recursos falsos para un dispositivo que no consume ningún recurso.

    • IRP_MN_QUERY_STOP_DEVICE (suponiendo que todos los controladores pasen este IRP. La prueba ya ha cubierto el caso en el que se produce un error en este IRP).
    • IRP_MN_QUERY_RESOURCE_REQUIREMENTS
    • IRP_MN_FILTER_RESOURCE_REQUIREMENTS (si el requisito real de recursos es nulo, filtre asigne requisitos de recursos falsos, por lo que hay una detención y un inicio).
    • IRP_MN_STOP_DEVICE
    • IRP_MN_START_DEVICE (el filtro produce un error en este IRP mientras sube. Esta acción hace que la sorpresa quite IRP).
    • IRP_MN_SURPRISE_REMOVAL
    • IRP_MN_REMOVE

    Una vez completada la prueba de reequilibrio, el dispositivo se desinstalará y volverá a enumerar, lo que también quitará el controlador de filtro de la pila.

Códigos de error del dispositivo

Si la prueba proporciona un mensaje de error que indica que el estado del dispositivo no es correcto, puede obtener más información sobre el estado del dispositivo a través de Administrador de dispositivos. Para obtener un resumen de los distintos códigos de error del dispositivo, consulte Administrador de dispositivos Mensajes de error.

Depuración de errores de instalación mediante los registros de la API de instalación

Los registros de la API de instalación (setupapi.app.log y setupapi.dev.log) pueden contener información útil para depurar los errores de instalación del controlador registrados por esta prueba. Los registros de la API de instalación se pueden encontrar en el directorio %windir%\inf\ del sistema de prueba.

Para aumentar el nivel de detalle y la utilidad potencial de estos registros, establezca la siguiente clave del Registro en 0x2000FFFF antes de ejecutar la prueba Reinstalar:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup\LogLevel

Cómo probar un controlador en tiempo de ejecución mediante Visual Studio

Cómo seleccionar y configurar las pruebas de aspectos básicos del dispositivo

Pruebas básicas de dispositivos

Complementos de E/S simples WDTF proporcionados

Cómo probar un controlador en tiempo de ejecución desde un símbolo del sistema