Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las pruebas PnP de Device Fundamentals obligan a un controlador a manejar casi todos los IRP de PnP; sin embargo, hay tres áreas que se enfatizan específicamente la eliminación, el reequilibrio y la eliminación sorpresa. La prueba PnP proporciona un mecanismo para probar cada uno de estos por separado o para probarlos todos juntos (es decir, como 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 de PNP
Las pruebas Plug and Play (PnP) ejecutan varias trayectorias de código relacionadas con el PnP en los componentes del controlador y en modo de usuario. Las pruebas de PnP deben ejecutarse con Driver Verifier habilitado en la computadora de prueba. Para obtener información sobre cómo habilitar Driver Verifier, consulte Propiedades de Comprobador de controladores para proyectos de controlador.
Prueba | Descripción |
---|---|
Deshabilitar la compatibilidad con pruebas de dispositivos mejoradas (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: - véase Parámetros de prueba de los fundamentos del dispositivo DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO IOType |
PNP (deshabilitar y habilitar) reinicio con IO antes y después. |
Esta prueba realiza la deshabilitación o habilitación básica de PnP y E/S en dispositivos con un reinicio del sistema. Binario de prueba: Devfund_PNP_DisableEnable_Reboot_With_IO_BeforeAndAfter.wsc Método de prueba: PNP_DisableEnable_Reboot_With_IO_Before_And_After Parámetros: - véase Parámetros de prueba de los fundamentos del dispositivo DQ IOPeriod |
PNP (desactivar y activar) con E/S antes y después |
Esta prueba realiza la E/S y la desactivación/activación básica de PnP en los dispositivos. Esta prueba hace lo siguiente:
Binario de prueba: Devfund_PNP_DisableEnable_With_IO_BeforeAndAfter.wsc Método de prueba: PNP_DisableEnable_With_IO_Before_And_After Parámetros: - véase Parámetros de prueba de los fundamentos del dispositivo DQ IOPeriod |
Prueba de cancelación de la eliminación del dispositivo PNP |
Esta prueba utiliza 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. Binario de prueba: Devfund_PnPDTest.dll Método de prueba: PNPCancelRemoveDevice Parámetros: - véase Parámetros de prueba de los fundamentos del dispositivo DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
Prueba de cancelación de la detención del dispositivo PNP |
Esta prueba utiliza 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, vea Acerca de las pruebas de reequilibrio. Binario de prueba: Devfund_PnPDTest.dll Método de prueba: PNPCancelStopDevice Parámetros: - véase Parámetros de prueba de los fundamentos del dispositivo DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
Prueba de eliminación de dispositivo DIF PNP |
Esta prueba usa la API SetupDi para enviar una solicitud de DIF_REMOVE para que los instaladores quiten el dispositivo. Binario de prueba: Devfund_PnPDTest.dll Método de prueba: PNPDIFRemoveAndRescanParentDevice Parámetros: - véase Parámetros de prueba de los fundamentos del dispositivo DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
Prueba de desactivación y activación de dispositivos PNP |
Esta prueba deshabilita y habilita los dispositivos de destino. Binario de prueba: Devfund_PnPDTest.dll Método de prueba: PNPDisableAndEnableDevice Parámetros: - véase Parámetros de prueba de los fundamentos del dispositivo DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO IOType |
Prueba de reequilibrio de error de reinicio del dispositivo PNP |
Esta prueba utiliza el controlador de filtro EDT para intentar enviar IRP_MN_STOP_DEVICE a las pilas de dispositivos de destino. A continuación, el controlador de filtro EDT falla las solicitudes IRP_MN_START_DEVICE (que siguen a las solicitudes IRP_MN_STOP_DEVICE) para desencadenar la eliminación por sorpresa de los dispositivos de destino. Para obtener más información, vea Acerca de las pruebas de reequilibrio. Binario de prueba: Devfund_PnPDTest.dll Método de prueba: PNPTryStopDeviceAndFailRestart Parámetros: - véase Parámetros de prueba de los fundamentos del dispositivo DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
Prueba de dispositivo PNP de reequilibrio de solicitud de nuevos recursos |
Esta prueba utiliza 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, vea Acerca de las pruebas de reequilibrio. Binario de prueba: Devfund_PnPDTest.dll Método de prueba: PNPTryStopDeviceRequestNewResourcesAndRestartDevice Parámetros: - véase Parámetros de prueba de los fundamentos del dispositivo DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
Prueba de eliminación de dispositivo PNP |
Esta prueba hace que se envíen IRP_MN_QUERY_REMOVE_DEVICE e IRP_MN_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. Binario de prueba: Devfund_PnPDTest.dll Método de prueba: PNPRemoveAndRestartDevice Parámetros: - véase Parámetros de prueba de los fundamentos del dispositivo DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
Prueba de dispositivo de parada (reequilibrio) PNP |
Esta prueba utiliza 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, vea Acerca de las pruebas de reequilibrio. Binario de prueba: Devfund_PnPDTest.dll Método de prueba: PNPTryStopAndRestartDevice Parámetros: - véase Parámetros de prueba de los fundamentos del dispositivo DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
Prueba de eliminación de restablecimiento de dispositivo PNP |
Esta prueba utiliza el controlador de filtro EDT para enviar IRP_MN_SURPRISE_REMOVAL a las pilas de dispositivos de destino. Para obtener más información, consulte Acerca de la prueba Surprise Removal. Binario de prueba: Devfund_PnPDTest.dll Método de prueba: PNPSurpriseRemoveAndRestartDevice Parámetros: - véase Parámetros de prueba de los fundamentos del dispositivo DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
Acerca de las pruebas de eliminación de dispositivos
- Prueba de eliminación de dispositivo PNP
- Prueba de cancelación de la eliminación del dispositivo PNP
La prueba de eliminación de dispositivo abarca IRP_MN_QUERY_REMOVE_DEVICE, IRP_MN_CANCEL_REMOVE_DEVICE e IRP_MN_REMOVE_DEVICE.
La prueba intenta instalar su controlador de filtro superior en la pila del dispositivo de destino. Este intento resulta en una solicitud de eliminación IRP.
Si esta solicitud de eliminación IRP falla, la prueba reinicia el ordenador para obtener el controlador de filtro en la pila de dispositivos. Si no se veta la solicitud de eliminación, la pila de dispositivos se eliminará y se reiniciará con el controlador de filtro en ella.
La prueba, mediante el uso de las API de configuración, hace que se envíe una solicitud de eliminación de IRP de a la pila de dispositivos. El controlador de filtro falla esta solicitud de eliminación, por lo que se envía una cancelación-eliminación de IRP. El controlador del filtro afirmará que la cancelación-eliminación fue exitosa.
A continuación, la aplicación de prueba llama al instalador de clase adecuado y a los co-instaladores registrados para deshabilitar, habilitar, quitar o volver a enumerar el dispositivo (esto prueba el manejo por parte de la clase y los co-instaladores de 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 preliminar de eliminación. Si esa solicitud es vetada, el dispositivo no se quitará. Puede optar por rechazar una solicitud de eliminación cuando sea apropiado, como mientras transmite vídeo en una cámara USB o si el dispositivo de destino está en la ruta de arranque o de paginación. Recuerde que, en general, no es una buena práctica rechazar todas las solicitudes de eliminación. Fallar todas las solicitudes de remoción no garantizará que el controlador nunca recibirá una remoción porque un IRP de remoción aún será emitido después de una remoción sorpresa, o si alguien en la pila de dispositivos falla un IRP de inicio.
Acerca de la prueba de eliminación por sorpresa
- Prueba de eliminación de restablecimiento de dispositivo PNP
La prueba de remoción por 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 es activado por la aplicación de prueba, el controlador de filtro hará que el sistema envíe un IRP_MN_SURPRISE_REMOVAL a la pila de dispositivos, seguido de un IRP_MN_REMOVE_DEVICE. El controlador de filtro afirmará que ambos IRP son completados con éxito por los controladores inferiores.
Una vez completada la prueba de eliminación sorpresa, el dispositivo se desinstalará y se volverá a enumerar, eliminando también el controlador de filtro de la pila.
Acerca de las pruebas de reequilibrio
- Prueba de dispositivo de parada (reequilibrio) PNP
- Prueba de dispositivo PNP de reequilibrio de solicitud de nuevos recursos
- Prueba de reequilibrio de error de reinicio del dispositivo PNP
- Prueba de cancelación de la detención del dispositivo 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 tiene éxito (es decir, si alguien en la pila del dispositivo de destino falló el IRP query-remove), la prueba reinicia el equipo para probar el reequilibrio.
Dependiendo de la prueba de reequilibrio que elija, se producen los siguientes eventos:
Prueba de dispositivo de parada (reequilibrio) PNP Esta prueba inicia un procedimiento de reequilibrado que da como resultado el IRP PnP IRP_MN_QUERY_STOP_DEVICE 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 que están presentes en el árbol de dispositivos con ese nodo de dispositivo como raíz también pasan por el reequilibrio. Y si alguna de las pilas de dispositivos hijas falla en query stop, se abandona todo el procedimiento de reequilibrio. Por lo tanto, los controladores no deben fallar en el query stop sin una razón genuina para hacerlo. Si este fallo ocurre, el PnP manager envía cancel stop (IRP_MN_CANCEL_STOP) a todas las pilas de dispositivos a las que se les ha enviado query stop.
Si todas las pilas de dispositivos implicadas pasan query stop, la prueba continúa con el reequilibrio y envía los IRP_MN_QUERY_RESOURCE_REQUIREMENTS e IRP_MN_FILTER_RESOURCE_REQUIREMENTS IRPS para conocer la necesidad de recursos 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 recursos, el propio gestor PnP envía una cancelación de parada (IRP_MN_CANCEL_STOP_DEVICE) como optimización.
Si el dispositivo realmente consume recursos, el procedimiento de reequilibrio se completa con los IRPs IRP_MN_STOP_DEVICE e IRP_MN_START_DEVICE.
Con esta opción, los recursos del dispositivo no cambian.
Prueba de cancelación de la detención del dispositivo PNP: Esta prueba inicia un procedimiento de reequilibrio, pero el controlador de filtro falla deliberadamente el IRP de parada de consulta. El orden de los IRPs se parece a IRP_MN_QUERY_STOP_DEVICE (que es fallado por el conductor del filtro mientras que viene para arriba, causando una cancelación del reequilibrio) y IRP_MN_CANCEL_STOP_DEVICE.
Con esta opción, los recursos del dispositivo no cambian
Prueba de dispositivo PNP de reequilibrio de solicitud de nuevos recursos Esta prueba inicia un rebalanceo y también manipula el requerimiento de recursos del dispositivo para maximizar las posibilidades de que realmente nuevos recursos sean asignados al dispositivo. Esta opción también ayuda a un dispositivo sin recursos a pasar por el procedimiento de reequilibrio completo:
En primer lugar, se inicia el reequilibrio simple, lo que provoca los siguientes IRP:
- IRP_MN_QUERY_STOP_DEVICE (asumiendo que este IRP es pasado por todos los controladores. La prueba ya cubrió el caso donde este IRP es fallado).
- 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 recurso, 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 a 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.
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).
Prueba de reequilibrio de error de reinicio del dispositivo PNP Esta prueba inicia un rebalanceo pero cuando el driver del filtro obtiene el arranque después del rebalanceo, deliberadamente lo falla-lo que causa la sorpresa de eliminación IRP seguido por Removal IRP.
Primero, inicia el procedimiento de rebalanceo y se asegura de que el controlador obtenga una parada y un arranque generando un requerimiento de recursos falso para un dispositivo que no consume ningún recurso.
- IRP_MN_QUERY_STOP_DEVICE (asumiendo que este IRP es pasado por todos los controladores. La prueba ya cubrió el caso donde este IRP es fallado).
- IRP_MN_QUERY_RESOURCE_REQUIREMENTS
- IRP_MN_FILTER_RESOURCE_REQUIREMENTS (Si el requerimiento de recursos actual es nulo, el filtro asigna un requerimiento de recursos falso, para que haya una parada y un arranque).
- IRP_MN_STOP_DEVICE
- IRP_MN_START_DEVICE (El filtro falla este IRP mientras sube. Esta acción causa la sorpresa remover IRP).
- IRP_MN_SURPRISE_REMOVAL
- IRP_MN_REMOVE
Después de que la prueba de rebalanceo es completada, el dispositivo será desinstalado y reenumerado, removiendo también el controlador del 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 del Administrador de dispositivos. Para obtener un resumen de los distintos códigos de error del dispositivo, consulte Mensajes de error del Administrador de dispositivos.
Depuración de fallos de instalación mediante los registros de la API de instalación
Los registros de api de instalación (setupapi.app.log y setupapi.dev.log) pueden contener información útil para depurar errores de instalación de controladores registrados por esta prueba. Los registros de api de instalación se pueden encontrar en %windir%directorio \inf\ en el 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 de reinstalación:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup\LogLevel
Temas relacionados
Cómo probar un controlador en tiempo de ejecución mediante Visual Studio
Cómo seleccionar y configurar las pruebas fundamentales del dispositivo
Pruebas de aspectos básicos del dispositivo
Complementos WDTF Simple E/S proporcionados
Cómo probar un controlador en tiempo de ejecución desde la línea de comandos