estructura NET_PNP_EVENT (netpnp.h)

La estructura de NET_PNP_EVENT describe un evento de Plug and Play de red (PnP), un evento PnP de NDIS o un evento de administración de energía.

Sintaxis

typedef struct _NET_PNP_EVENT {
  NET_PNP_EVENT_CODE NetEvent;
  PVOID              Buffer;
  ULONG              BufferLength;
  ULONG_PTR          NdisReserved[4];
  ULONG_PTR          TransportReserved[4];
  ULONG_PTR          TdiReserved[4];
  ULONG_PTR          TdiClientReserved[4];
} NET_PNP_EVENT, *PNET_PNP_EVENT;

Miembros

NetEvent

Código de evento que describe el evento como uno de los siguientes:

NetEventSetPower

Indica que el administrador de energía ha enviado una solicitud Set Power, que especifica una transición a un estado de alimentación del sistema. NDIS convierte este estado en un estado de alimentación del dispositivo adecuado para el dispositivo.

Para obtener más información, vea la sección Comentarios.

NetEventQueryPower

Indica que el administrador de energía ha enviado una solicitud de Power Query, que solicita una transición a un estado de energía del sistema. NDIS convierte este estado en un estado de alimentación del dispositivo adecuado para el dispositivo.

Para obtener más información, vea la sección Comentarios.

NetEventQueryRemoveDevice

Indica que el Administrador de PnP ha enviado una solicitud de quitar dispositivo de consulta. El Administrador de PnP envía esta solicitud para consultar si se puede quitar un dispositivo sin interrumpir las operaciones.

NetEventCancelRemoveDevice

Indica que el Administrador de PnP ha enviado una solicitud Cancelar quitar dispositivo. El Administrador de PnP envía esta solicitud para cancelar la eliminación de un dispositivo después de que el Administrador de PnP envíe una solicitud de eliminación de dispositivo de consulta.

NetEventReconfigure

Indica que la configuración ha cambiado para un componente de red. Por ejemplo, si un usuario, a través de la carpeta Network and Dial-up Connections, cambia la dirección IP de TCP/IP, NDIS indica el evento NetEventReconfigure al protocolo TCP/IP. Además, un controlador intermedio normalmente usa este evento como desencadenador para llamar a . Función NdisIMInitializeDeviceInstanceEx e inicia sus miniportes virtuales. Para obtener más información sobre NetEventReconfigure, vea NetEventIMReEnableDevice.

NetEventBindList

Indica a un controlador de protocolo que se ha reconfigurado el orden de procesamiento de la lista de enlace. Esta lista indica un orden relativo que se aplica a los enlaces al procesar, por ejemplo, una solicitud de usuario que se puede enrutar a uno de varios enlaces. El búfer que se pasa con este evento contiene una lista de nombres de dispositivo con formato de cadenas Unicode terminadas en null. El formato de cada nombre de dispositivo es idéntico al miembro AdapterName que se pasa a una llamada a la función ProtocolBindAdapterEx .

NetEventBindsComplete

Indica que un controlador de protocolo está enlazado a todas las NIC a las que puede enlazar. NDIS no indicará más NIC al protocolo a menos que se conecte una NIC PnP al sistema.

NetEventPnPCapabilities

Indica que el usuario ha habilitado o deshabilitado las funcionalidades de reactivación del adaptador subyacente. (El parámetro ProtocolBindingContext especifica el enlace que se pasa a la función ProtocolNetPnPEvent ).

NetEventPause

Indica que el enlace de protocolo especificado debe especificar el estado de pausa. El enlace escribirá el estado Pausado después de que NDIS haya completado todas las solicitudes de envío pendientes para el enlace.

NetEventRestart

Indica que el enlace de protocolo especificado ha entrado en el estado De reinicio. Una vez que el controlador de protocolo esté listo para reanudar las operaciones de envío y recepción del enlace, el enlace entra en estado En ejecución.

NetEventPortActivation

Indica la activación de una lista de puertos asociados al enlace especificado.

NetEventPortDeactivation

Indica la desactivación de una lista de puertos asociados al enlace especificado.

NetEventIMReEnableDevice

Indica que la configuración ha cambiado para un miniporte virtual de un controlador intermedio NDIS 6.0 o posterior. NetEventIMReEnableDevice es similar al evento NetEventReconfigure , salvo que el controlador intermedio recibe este evento para un único miniport virtual y el evento NetEventReconfigure se aplica a todos los miniportes virtuales del controlador intermedio. Por ejemplo, un controlador intermedio recibe el evento NetEventIMReEnableDevice cuando un usuario deshabilita y, a continuación, habilita un único miniporte virtual desde el Administrador de dispositivos u otro origen. Para obtener ejemplos de administración intermedia de energía del controlador, consulte el ejemplo de controlador intermedio muX NDIS y notificar al controlador object disponible en el repositorio de ejemplos de controladores de Windows en GitHub.

NetEventNDKEnable

Indica que el kernel directo de red (NDK) está habilitado actualmente.

NetEventNDKDisable

Indica que NDK está deshabilitado actualmente.

NetEventFilterPreDetach

Indica que un filtro está a punto de desasociar, de modo que el filtro pueda realizar cualquier limpieza necesaria que no sea posible en el controlador FilterDetach (porque las rutas de acceso de OID e indicación están cerradas en ese momento).

NetEventBindFailed

Indica que se ha producido un error de evento de enlace.

NetEventSwitchActivate

Indica que el conmutador extensible de Hyper-V ha completado la activación y las extensiones de conmutador ahora pueden consultar de forma segura la configuración del conmutador adicional. La indicación solo se usa en la pila de conmutadores extensibles de Hyper-V, emitida por la miniporte de extensión. Consulte Consulta de la configuración de conmutador extensible de Hyper-V y NDIS_SWITCH_PARAMETERS para obtener más información.

NetEventInhibitBindsAbove

Evento sincrónico que impide que otros filtros y protocolos se enlacen al adaptador de miniport. Los filtros o protocolos enlazados previamente se desenlazará antes de que se complete el evento. A continuación se indican las reglas de uso.

  • Evite dejar el adaptador de minipuerto en estado de inhibición, durante más de 1000 milisegundos.
  • Este evento solo se puede emitir después de que se inicie MiniportInitializeEx y no se debe emitir después de que MiniportHaltEx devuelva.
  • Este evento solo se puede emitir cuando el adaptador de miniporte está en un estado D0.
  • Dado que este evento está bloqueando, no debería emitirse por ningún contexto que provocara un interbloqueo.
  • Los bloqueos no deben mantenerse durante la emisión de este evento.
  • Este evento debe emitirse en PASSIVE_LEVEL.
Este evento está disponible a partir de la versión 6.50 de NDIS y debe usarse con la versión V2 o posterior de NET_PNP_EVENT. Opcionalmente, este evento puede ser emitido por un controlador de minipuerto. Los protocolos y filtros no pueden recibir este evento ni emitirlo.

NetEventAllowBindsAbove

Evento asincrónico que invierte los efectos de NetEventInhibitBindsAbove. A continuación se indican las reglas de uso.

  • Este evento solo se puede emitir después de que se inicie MiniportInitializeEx y no se debe emitir después de que MiniportHaltEx devuelva.
  • Este evento solo se puede emitir cuando el adaptador de miniporte está en un estado D0.
  • Los bloqueos no deben mantenerse durante la emisión de este evento.
  • Este evento debe emitirse en PASSIVE_LEVEL.
Este evento está disponible a partir de la versión 6.50 de NDIS y debe usarse con la versión V2 o posterior de NET_PNP_EVENT. Opcionalmente, este evento puede ser emitido por un controlador de minipuerto. Los protocolos y filtros no pueden recibir este evento ni emitirlo.

NetEventRequirePause

Se debe pausar un evento sincrónico que indique los protocolos y filtros, incluido el adaptador de miniporte. Se garantiza que los protocolos y los filtros y el adaptador de minipuerto se pausan cuando se devuelve la rutina NdisMNetPnPEvent . A continuación se indican las reglas de uso.

  • Evite retrasar los eventos NetEventAllowStart y NetEventRequirePause durante más de 1000 milisegundos para evitar retrasos en las aplicaciones de usuario.
  • Este evento solo se puede emitir después de que se inicie MiniportInitializeEx y no se debe emitir después de que MiniportHaltEx devuelva.
  • No hay ninguna garantía de que NDIS llame a MiniportPause una vez emitido este evento. En concreto, si el adaptador de minipuerto ya está en pausa, NDIS no introducirá un bucle adicional de pausa de inicio. Esto significa que la cantidad de veces que se llama a MiniportPause no es mayor que, menor o igual que la cantidad que se emite este evento.
  • Dado que este evento está bloqueando, no debería emitirse por ningún contexto que provocara un interbloqueo.
  • Los bloqueos no deben mantenerse al emitir este evento.
Este evento está disponible a partir de la versión 6.50 de NDIS y debe usarse con la versión V2 o posterior de NET_PNP_EVENT. Este evento puede ser emitido opcionalmente por un controlador de minipuerto. Los protocolos y filtros no pueden recibir este evento ni emitirlo.

NetEventAllowStart

No es necesario pausar un evento asincrónico que indique los protocolos y filtros, incluido el adaptador de minipuerto. A continuación se indican las reglas de uso. No hay ningún estado de pausa garantizado para ningún controlador de los protocolos y filtros después de que se devuelva la rutina NdisMNetPnPEvent .

  • Este evento solo se puede emitir después de que se inicie MiniportInitializeEx y no se debe emitir después de que MiniportHaltEx devuelva.
  • Dado que este evento está bloqueando, no debería emitirse por ningún contexto que provocara un interbloqueo.
  • Los bloqueos no deben mantenerse al emitir este evento.
Este evento está disponible a partir de la versión 6.50 de NDIS y debe usarse con la versión V2 o posterior de NET_PNP_EVENT. Este evento puede ser emitido opcionalmente por un controlador de minipuerto. Los protocolos y filtros no pueden recibir este evento ni emitirlo.

Buffer

Dirección de un búfer que contiene información específica del evento indicado en el miembro NetEvent . Para cada tipo de evento, el búfer contiene la siguiente información:

NetEventSetPower

El búfer contiene el estado de alimentación del dispositivo al que realiza la transición el dispositivo.

Cuando NDIS llama a la función ProtocolNetPnPEvent de un controlador de protocolo, el estado del dispositivo es NDIS_DEVICE_POWER_STATE, que puede ser uno de los siguientes valores:

NdisDeviceStateUnspecified

El dispositivo de red no admite la administración de energía.

NdisDeviceStateD0

El estado totalmente alimentado, en el que el dispositivo ofrece una funcionalidad y un rendimiento completos.

NdisDeviceStateD1

Un estado de baja potencia, en el que el dispositivo no respeta las solicitudes de transmisión del host, los datos recibidos por el dispositivo no se transfieren a la memoria del host y no se pueden producir interrupciones. Es posible que se pierda algún contexto del dispositivo. En función de las funcionalidades de la NIC y su controlador de minipuerto, es posible que el dispositivo pueda generar una señal de reactivación.

NdisDeviceStateD2

Un estado de baja potencia similar a NdisDeviceStateD1, salvo que se ahorra más potencia y menos contexto y se requiere más tiempo para realizar la transición al estado totalmente alimentado.

NdisDeviceStateD3

Estado apagado, en el que la alimentación se ha quitado completamente del dispositivo.

En el caso de los controladores de protocolo, NdisDeviceStateD0 significa que la NIC está totalmente encendida y está disponible para las operaciones normales. Cualquier otro estado de dispositivo significa que el dispositivo no está totalmente encendido y no está disponible para enviar y recibir datos de red.

NetEventQueryPower

El búfer contiene el estado de alimentación del dispositivo que se solicita para el dispositivo. El estado del dispositivo es NDIS_DEVICE_POWER_STATE (que se describe en la descripción del valor NetEventSetPower ).

NetEventQueryRemoveDevice

El contenido del búfer es NULL.

NetEventCancelRemoveDevice

El contenido del búfer es NULL.

NetEventReconfigure

El búfer puede contener datos específicos del protocolo. El controlador de protocolo es responsable de validar estos datos.

NetEventBindList

El búfer contiene una lista de enlaces revisada para el componente de red que el NET_PNP_EVENT_NOTIFICATION estructura a la que se pasa. La lista de enlaces, que es una serie de cadenas Unicode terminadas en NULL, tiene un formato REG_MULTI_SZ. Cada una de las cadenas es un nombre de adaptador. Los clientes de TDI enlazados a un protocolo usan esta lista de enlaces para reordenar sus enlaces. El controlador de protocolo es responsable de validar esta lista.

NetEventBindsComplete

El contenido del búfer es NULL.

NetEventPnPCapabilities

El búfer es un ULONG que contiene una máscara de bits. Cuando la marca NDIS_DEVICE_WAKE_UP_ENABLE se establece en la máscara de bits, se habilitan las funcionalidades de reactivación de la NIC. De lo contrario, las funcionalidades de reactivación de la NIC están deshabilitadas. (El enlace se especifica mediante el parámetro ProtocolBindingContext que se pasa a ProtocolNetPnPEvent). Cuando se establece en cero, esta marca indica que las funcionalidades de reactivación de la NIC están deshabilitadas.

NetEventPause

El búfer contiene un NDIS_PROTOCOL_PAUSE_PARAMETERS estructura.

NetEventRestart

El búfer puede contener NULL o un NDIS_PROTOCOL_RESTART_PARAMETERS estructura. NDIS proporciona un puntero a una estructura NDIS_RESTART_ATTRIBUTES en el miembro RestartAttributes de la estructura NDIS_PROTOCOL_RESTART_PARAMETERS.

Nota Si el búfer es NULL, los atributos de reinicio no han cambiado desde el reinicio anterior.
 

NetEventPortActivation

El búfer contiene la primera entrada de una lista de estructuras de NDIS_PORT que identifican los puertos que activará NDIS. Puede usar el miembro Next de la estructura NDIS_PORT para obtener la siguiente estructura de la lista.

NetEventPortDeactivation

El búfer contiene una matriz de números de puerto, de tipo NDIS_PORT_NUMBER (definido como ULONG), que identifican los puertos NDIS que NDIS desactivará. Para calcular el número de elementos de la matriz, divida el valor del miembro BufferLength , que se encuentra en la estructura NET_PNP_EVENT que se especifica en el miembro NetPnPEvent de NET_PNP_EVENT_NOTIFICATION, por sizeof(NDIS_PORT_NUMBER).

NetEventIMReEnableDevice

El búfer contiene un puntero a una variable de tipo NDIS_STRING que contiene una cadena Unicode terminada en null que asigna un nombre al objeto de dispositivo de un miniport virtual para el dispositivo que se está habilitando. La cadena es un nombre de ruta de acceso completo, por ejemplo, \Device\DeviceName.

NetEventNDKEnable

El miembro Buffer es NULL.

NetEventNDKDisable

El miembro Buffer es NULL.

NetEventFilterPreDetach

El miembro Buffer es NULL.

NetEventBindFailed

El búfer contiene una estructura NDIS_BIND_FAILED_NOTIFICATION .

NetEventSwitchActivate

El contenido del búfer es NULL.

NetEventAllowBindsAbove

El contenido del búfer es NULL.

NetEventInhibitBindsAbove

El contenido del búfer es NULL.

NetEventAllowStart

El contenido del búfer es NULL.

NetEventRequirePause

El contenido del búfer es NULL.

BufferLength

Número de bytes de información específica del evento en buffer.

NdisReserved[4]

Un área reservada para el uso de NDIS.

TransportReserved[4]

Área reservada para el conductor de transporte.

TdiReserved[4]

Área reservada para el uso de TDI.

TdiClientReserved[4]

Área reservada para la que usa un cliente TDI.

Comentarios

En NDIS 6.0 y versiones posteriores, cuando el sistema operativo emite un evento PnP del sistema o un evento de administración de energía a un objeto de dispositivo de destino que representa un adaptador de minipuerto, NDIS convierte el evento en un NET_PNP_EVENT_NOTIFICATION estructura. El miembro NetPnPEvent de la estructura NET_PNP_EVENT_NOTIFICATION es una estructura NET_PNP_EVENT .

NDIS pasa un puntero a la estructura NET_PNP_EVENT a cada controlador de protocolo que está enlazado al adaptador de minipuerto mediante una llamada a la función ProtocolNetPnPEvent del controlador de protocolo. El controlador de protocolo debe guardar este puntero, ya que el puntero es un parámetro de entrada para la función NdisCompleteNetPnPEvent , que el controlador llama para completar la llamada a ProtocolNetPnPEvent de forma asincrónica.

NDIS pasa un puntero a la estructura NET_PNP_EVENT a cada controlador de filtro enlazado al adaptador de minipuerto llamando a la función FilterNetPnPEvent del controlador de filtro. El controlador de filtro no tiene que guardar este puntero porque el controlador debe completar la llamada a FilterNetPnPEvent de forma sincrónica.

A partir de NDIS 6.30, el controlador de protocolo o filtro debe seguir estas instrucciones cuando NDIS llama a las funciones ProtocolNetPnPEvent o FilterNetPnPEvent :

  • Si el miembro NetEvent de la estructura de NET_PNP_EVENT se establece en NetEventSetPower, el controlador debe dejar de generar nuevas solicitudes de E/S. Además, el controlador no debe esperar a que se completen las solicitudes de E/S pendientes.

    Después de que el protocolo o el controlador de filtro vuelva de ProtocolNetPnPEvent o FilterNetPnPEvent, NDIS no pausará y reiniciará estos controladores durante las transiciones de estado de energía si se cumplen las condiciones siguientes:

    • El controlador de minipuerto subyacente establece la marca NDIS_MINIPORT_ATTRIBUTES_NO_PAUSE_ON_SUSPEND en la estructura NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES . El controlador pasa un puntero a esta estructura en su llamada a la función NdisMSetMiniportAttributes .
    • Todos los controladores de filtro que están conectados al controlador de minipuerto admiten NDIS 6.30 o versiones posteriores de NDIS.
    • Todos los controladores de protocolo que están enlazados al controlador de minipuerto admiten NDIS 6.30 o versiones posteriores de NDIS.
  • Si el miembro NetEvent de la estructura de NET_PNP_EVENT se establece en NetEventSetPower o NetEventQueryPower, el controlador no debe esperar a que se completen las solicitudes de E/S pendientes.
El miembro NetEvent de la estructura NET_PNP_EVENT identifica el tipo de evento de administración de energía o Plug and Play. El búfer contiene información específica del tipo de evento.

Requisitos

Requisito Value
Cliente mínimo compatible Se admite en NDIS 5.1 y NDIS 6.0 y versiones posteriores. Para obtener más información sobre la versión 5.1 de NDIS de esta estructura, consulte NET_PNP_EVENT (NDIS 5.1).
Encabezado netpnp.h (include Ndis.h, Netpnp.h)

Consulte también

FilterNetPnPEvent

NDIS_BIND_FAILED_NOTIFICATION

NDIS_PORT

NDIS_PROTOCOL_PAUSE_PARAMETERS NDIS_PROTOCOL_RESTART_PARAMETERS

NDIS_RESTART_ATTRIBUTES

NDIS_SWITCH_PARAMETERS

NET_PNP_EVENT_NOTIFICATION

NdisCompleteNetPnPEvent

NdisIMInitializeDeviceInstanceEx

ProtocolBindAdapterEx

ProtocolNetPnPEvent

Consulta de la configuración del conmutador extensible de Hyper-V