Compartir a través de


Emisión de indicaciones de estado del motivo de reactivación de NDIS

Si un controlador de minipuerto admite indicaciones de estado del motivo de reactivación NDIS (NDIS_STATUS_PM_WAKE_REASON), debe generar esta indicación de estado inmediatamente después de que el adaptador de red genere un evento de reactivación y el adaptador se reanude a un estado de energía completa.

Nota La compatibilidad con las indicaciones de estado del motivo de reactivación NDIS es opcional para los controladores de miniporte de banda ancha móvil (MB).

El controlador de minipuerto se configura con parámetros de administración de energía (PM) a través de una solicitud de conjunto de identificador de objeto (OID) de OID_PM_PARAMETERS. Esta solicitud de OID especifica los parámetros pm a través de una estructura de NDIS_PM_PARAMETERS .

La estructura NDIS_PM_PARAMETERS especifica los parámetros de los siguientes tipos de eventos de reactivación.

Eventos de reactivación de paquetes recibidos
El adaptador de red genera un evento de reactivación si recibe un paquete que coincide con un patrón wake-on-LAN (WOL). Los patrones WOL incluyen lo siguiente:

  • Patrones WOL independientes de medios, como paquetes mágicos o patrones de datos TCP/IP dentro de la carga del paquete. Por ejemplo, la estructura de NDIS_PM_PARAMETERS podría especificar un patrón WOL para un marco TCP SYN.

  • Patrones WOL específicos de medios, como un paquete de identificador de solicitud EAPOL o un mensaje de Servicio de mensajes cortos (SMS) de banda ancha móvil (MB).

  • Patrones comodín que coinciden con un filtro de recepción especificado a través de una solicitud de conjunto de OID de OID_GEN_CURRENT_PACKET_FILTER.

Nota Para este tipo de indicación de estado del motivo de reactivación, el adaptador de red debe poder guardar el paquete recibido. El controlador debe devolver el paquete recibido dentro de la indicación de estado.

Los patrones WOL se especifican a través del miembro EnabledWoLPacketPatterns de la estructura NDIS_PM_PARAMETERS .

Eventos de reactivación específicos de medios
El adaptador de red genera un evento de reactivación debido a un motivo específico del medio, como una desasociación de un punto de acceso 802.11 (AP) o la recepción de un mensaje de servicio de mensajes cortos (SMS) de banda ancha móvil (MB).

Los eventos de reactivación de este tipo se especifican a través del miembro MediaSpecificWakeUpEvents de la estructura NDIS_PM_PARAMETERS .

Eventos de reactivación independientes de medios
El adaptador de red genera un evento de reactivación debido a un motivo independiente del medio, como la conexión de medios o la desconexión.

Los eventos de reactivación de este tipo se especifican a través del miembro WakeUpFlags de la estructura NDIS_PM_PARAMETERS .

Si el adaptador de red generó una señal de reactivación, el controlador de minipuerto debe emitir una indicación de estado NDIS_STATUS_PM_WAKE_REASON . El controlador lo hace mientras controla la solicitud de conjunto de OID de OID_PNP_SET_POWER para la transición del adaptador a un estado de energía completa.

Nota El controlador de minipuerto debe emitir una indicación de estado de NDIS_STATUS_PM_WAKE_REASON antes de emitir una indicación de estado relacionada con el evento de reactivación. Por ejemplo, si el evento de reactivación se debe a un cambio en el estado de conectividad multimedia, el controlador de miniporte debe emitir una indicación de estado de NDIS_STATUS_LINK_STATE después de haber emitido la indicación de estado NDIS_STATUS_PM_WAKE_REASON .

Cuando el controlador de minipuerto emite la indicación de estado NDIS_STATUS_PM_WAKE_REASON , debe seguir estos pasos:

  1. El controlador de minipuerto debe asignar un búfer lo suficientemente grande como para contener lo siguiente:

    • Estructura NDIS_PM_WAKE_REASON .

    • Estructura de NDIS_PM_WAKE_PACKET junto con el paquete recibido (paquete de reactivación) que provocó que el adaptador de red generara el evento de reactivación.

      Nota El controlador de minipuerto no necesita asignar este espacio de búfer si indica eventos de reactivación específicos de medios o independientes de medios.

  2. El controlador de minipuerto inicializa una estructura NDIS_PM_WAKE_REASON al principio del búfer. El controlador establece el miembro WakeReason en un valor de enumeración NDIS_PM_WAKE_REASON_TYPE que define el tipo del evento de reactivación.

    Por ejemplo, si el controlador de minipuerto indica un evento de reactivación de paquetes recibido, debe establecer el miembro WakeReason en NdisWakeReasonPacket. De lo contrario, el controlador establece el miembro WakeReason en el valor de enumeración que mejor describe el evento de reactivación específico de medios o independiente del medio.

  3. Si el miniportdriver emite una indicación de estado de NDIS_STATUS_PM_WAKE_REASON para un evento de reactivación de paquetes recibido, debe seguir estos pasos:

    1. El controlador de minipuerto establece el miembro InfoBufferOffset en el desplazamiento de una estructura de NDIS_PM_WAKE_PACKET que sigue a la estructura NDIS_PM_WAKE_REASON del búfer.

      Nota El controlador de minipuerto debe alinear el inicio de la estructura de NDIS_PM_WAKE_PACKET en un límite de 64 bits.

    2. El controlador de minipuerto establece el miembro InfoBufferSize en el tamaño de la estructura de NDIS_PM_WAKE_PACKET más el tamaño del paquete que provocó el evento de reactivación.

    3. El controlador de minipuerto inicializa una estructura de NDIS_PM_WAKE_PACKET después de la estructura de NDIS_PM_WAKE_REASON en el búfer.

      El controlador de minipuerto establece los miembros de la estructura NDIS_PM_WAKE_PACKET de la siguiente manera:

      • El miembro PatternId se establece en el identificador del patrón WOL que coincide con el paquete de reactivación. Este identificador se especifica mediante el miembro PatternId de la estructura de NDIS_PM_WOL_PATTERN que se pasa al controlador durante una solicitud de conjunto de OID de OID_PM_ADD_WOL_PATTERN.

      • El miembro PatternFriendlyName se establece en la descripción legible del usuario del patrón de reactivación especificado por el miembro PatternId . Este valor se especifica mediante el miembro FriendlyName de la estructura NDIS_PM_WOL_PATTERN .

        Nota El controlador de minipuerto no necesita inicializar este miembro. NDIS establece el miembro PatternFriendlyName en el valor correcto antes de pasar la estructura de NDIS_PM_WAKE_PACKET a los controladores de exceso.

      • El miembro OriginalPacketSize se establece en la longitud del paquete que recibe el adaptador de red.

      • El miembro SavedPacketSize debe establecerse en la longitud del paquete que se notifica a través de la indicación de estado NDIS_STATUS_PM_WAKE_REASON .

        Nota El valor de este miembro no debe ser mayor que el valor establecido por el controlador de miniporte en el miembro MaxWoLPacketSaveBuffer de la estructura NDIS_PM_CAPABILITIES . El controlador devuelve esta estructura cuando notifica sus funcionalidades de indicación de paquetes de reactivación. Para obtener más información, vea Reporting Wake Reason Status Indication Capabilities.

      • El miembro SavedPacketOffset debe establecerse en el desplazamiento, en unidades de bytes, en el paquete de reactivación que sigue a la estructura NDIS_PM_WAKE_PACKET .

        Nota El controlador de minipuerto debe alinear el inicio del paquete de reactivación en un límite de 64 bits en el búfer.

    4. El miniporte copia el paquete de reactivación en el búfer en el desplazamiento especificado por el miembro SavedPacketOffset .

  4. Si el controlador de minipuerto emite una indicación de estado de NDIS_STATUS_PM_WAKE_REASON para un evento de reactivación específico de medios o independiente del medio, establece los miembros InfoBufferOffset y InfoBufferSize de la estructura de NDIS_PM_WAKE_REASON en cero.

  5. El controlador de minipuerto inicializa una estructura NDIS_STATUS_INDICATION . El controlador establece el miembro StatusCode en NDIS_STATUS_PM_WAKE_REASON. El controlador también establece el miembro StatusBuffer para que apunte al búfer y establece StatusBufferLength en la longitud, en bytes, del búfer.

  6. El controlador de minipuerto llama a NdisMIndicateStatusEx y pasa un puntero a la estructura NDIS_STATUS_INDICATION en el parámetro StatusIndication .

Nota Después de que el controlador de miniporte emite la indicación de estado NDIS_STATUS_PM_WAKE_REASON para un evento de reactivación de paquetes recibido, debe indicar este paquete recibido llamando a NdisMIndicateReceiveNetBufferLists.