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.
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.
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.
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.
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.
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.
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
NDIS_PROTOCOL_PAUSE_PARAMETERS NDIS_PROTOCOL_RESTART_PARAMETERS NdisIMInitializeDeviceInstanceExConsulta de la configuración del conmutador extensible de Hyper-V