Compartir a través de


Pausar un módulo de filtro

Para pausar un módulo de filtro en ejecución, NDIS llama a la función FilterPause del controlador de filtro. El módulo de filtro entra en el estado de pausa al principio de la ejecución en la función FilterPause .

NDIS pausa un módulo de filtro como parte de una operación de Plug and Play para pausar una pila de controladores. Para obtener información general sobre cómo pausar la pila de controladores, consulte Pausar una pila de controladores.

En nombre de un módulo de filtro que se encuentra en estado de pausa , el controlador de filtro:

  • No debe originar ninguna nueva indicación de recepción.

    Para obtener más información sobre las operaciones de envío y recepción, vea Filtrar operaciones de envío y recepción del módulo.

  • Si hay operaciones de recepción que el controlador de filtro originó y que NDIS no se ha completado, el controlador de filtro debe esperar a que NDIS complete dichas operaciones. La operación de pausa no se completa hasta que NDIS llama a la función FilterReturnNetBufferLists para todas estas indicaciones de recepción pendientes.

  • Debe devolver cualquier indicación de recepción pendiente que los controladores subyacentes se originaron en NDIS inmediatamente. La operación de pausa no se completa hasta que el controlador llama a la función NdisFReturnNetBufferLists para estas indicaciones de recepción pendientes. Estas indicaciones de recepción pendientes pueden existir si el controlador pone en cola los búferes que recibe de los controladores subyacentes.

  • Debe devolver nuevas indicaciones de recepción de que los controladores subyacentes se originan en NDIS inmediatamente llamando a la función NdisFReturnNetBufferLists . Si es necesario, el controlador puede copiar indicaciones y ponerlas en cola antes de que las devuelva.

    Nota No se debe llamar a NdisFReturnNetBufferLists para las NBL indicadas con NDIS_RECEIVE_FLAGS_RESOURCES marca establecida en una llamada FilterReceiveNetBufferLists correspondiente. Estos NBL se devuelven a NDIS de forma sincrónica devolviendo de la rutina FilterReceiveNetBufferLists .

  • No se debe originar ninguna nueva solicitud de envío.

  • Si hay operaciones de envío que el controlador de filtro originó y que NDIS no se ha completado, el controlador de filtro debe esperar a que NDIS complete dichas operaciones. La operación de pausa no se completa hasta que NDIS llama a la función FilterSendNetBufferListsComplete para todas esas solicitudes de envío pendientes.

  • Debe devolver todas las solicitudes de envío nuevas realizadas a su función FilterSendNetBufferLists inmediatamente llamando a la función NdisFSendNetBufferListsComplete . El controlador de filtro debe establecer el miembro Status en cada estructura de NET_BUFFER_LIST en NDIS_STATUS_PAUSED.

  • Puede proporcionar indicaciones de estado con la función NdisFIndicateStatus .

    Para obtener más información sobre las indicaciones de estado, vea Filtrar indicaciones de estado del módulo.

  • Debe controlar las indicaciones de estado en su función FilterStatus .

  • Debe controlar las solicitudes de OID en la función FilterOidRequest .

    Para obtener más información sobre las solicitudes de OID, consulte Filtrar solicitudes de OID del módulo.

  • Puede iniciar solicitudes de OID.

  • No debe liberar los recursos asignados por el controlador durante la operación de asociación.

  • Debe cancelar temporizadores, si es necesario para detener las operaciones de envío y recepción.

    Para obtener más información sobre los temporizadores, consulte NDIS 6.0 Timer Services.

Una vez que el controlador de filtro pausa correctamente las operaciones de envío y recepción, debe completar la operación de pausa. El controlador de filtro puede completar la operación de pausa de forma sincrónica o asincrónica devolviendo NDIS_STATUS_SUCCESS o NDIS_STATUS_PENDING respectivamente desde FilterPause.

Si el controlador devuelve NDIS_STATUS_PENDING, debe llamar a la función NdisFPauseComplete una vez completada la operación de pausa.

En nombre de un módulo de filtro que se encuentra en estado Pausado , el controlador de filtro:

  • No debe originar nuevas indicaciones de recepción.

  • Debe devolver nuevas indicaciones de recepción de que los controladores subyacentes se originan en NDIS inmediatamente llamando a la función NdisFReturnNetBufferLists . Si es necesario, el controlador puede copiar indicaciones y ponerlas en cola antes de que las devuelva.

  • No debe originar nuevas solicitudes de envío.

  • Debe devolver todas las solicitudes de envío nuevas realizadas a su función FilterSendNetBufferLists inmediatamente llamando a la función NdisFSendNetBufferListsComplete . El controlador de filtro debe establecer el miembro Status en cada estructura de NET_BUFFER_LIST en NDIS_STATUS_PAUSED.

  • Puede proporcionar indicaciones de estado con la función NdisFIndicateStatus .

  • Debe controlar las indicaciones de estado en su función FilterStatus .

  • Debe controlar las solicitudes de OID en la función FilterOidRequest .

  • Puede iniciar solicitudes de OID.

NDIS no inicia otras operaciones de Plug and Play, como adjuntar, desasociar o reiniciar solicitudes, mientras que el controlador de filtro está en estado de pausa. NDIS puede iniciar solicitudes de desasociación o reinicio después de que un controlador de filtro esté en estado Pausado . Para obtener más información sobre cómo desasociar un módulo de filtro, consulte Desasociación de un módulo de filtro. Para obtener más información sobre cómo reiniciar un módulo de filtro, consulte Inicio de un módulo de filtro.