Activación de un puerto NDIS

Después de que un controlador de minipuerto asigne correctamente un puerto NDIS y antes de usar el número de puerto en las funciones NDIS, el controlador debe activar el puerto. Para activar el puerto, el controlador de minipuerto envía un evento de activación de puerto Plug and Play (PnP) a NDIS. Para enviar el evento PnP de activación del puerto, los controladores de minipuerto usan el código de evento PnP de NetEventPortActivation en la llamada a la función NdisMNetPnPEvent .

Para activar los puertos, el controlador de minipuerto debe establecer los miembros de la estructura NET_PNP_EVENT_NOTIFICATION en la que apunta el parámetro NetPnPEvent de NdisMNetPnPEvent de la siguiente manera:

Númerodepuerto
Puerto de origen de la notificación de eventos. Establezca este miembro en cero porque los números de puerto se proporcionan en el miembro Buffer de la estructura que especifica el miembro NetPnPEvent .

NetPnPEvent
Estructura NET_PNP_EVENT que describe el evento de activación del puerto. Establezca los miembros de esta estructura de la siguiente manera:

NetEvent
Código de evento que describe el evento. Establezca este miembro en NetEventPortActivation.

Búfer
Puntero a una lista vinculada de estructuras de NDIS_PORT . El miembro Next de las estructuras de NDIS_PORT apunta a la siguiente estructura de NDIS_PORT de la lista.

BufferLength
Número de bytes especificados en Buffer . Establezca BufferLength en el tamaño de las estructuras de NDIS_PORT.

Otros miembros
Establezca los miembros restantes de NET_PNP_EVENT en NULL.

El controlador de minipuerto enumera los puertos que han cambiado los estados de inactivos a activos en una lista vinculada de estructuras de NDIS_PORT . Sin embargo, si el puerto predeterminado de un adaptador de minipuerto es el destino de un evento PnP de NetEventPortActivation , el puerto predeterminado debe ser el único puerto de la lista.

Cuando el controlador de minipuerto notifica a NDIS la activación de un puerto (y posiblemente antes de que se devuelva esta llamada de notificación), el controlador de miniporte debe estar listo para controlar las solicitudes de envío y las solicitudes OID asociadas al puerto. Los controladores de minipuerto no deben usar el número de puerto de un puerto recién activado en estado ni recibir indicaciones hasta que se devuelva la llamada a NdisMNetPnPEvent .

NDIS no notifica a los controladores sobre cómo se activan los puertos activados hasta que el puerto predeterminado está activo. Cuando NDIS llama a la función ProtocolBindAdapterEx de un controlador de protocolo, NDIS proporciona una lista de todos los puertos activos actualmente en el miembro ActivePorts de la estructura NDIS_BIND_PARAMETERS a la que apunta el parámetro BindParameters . Cuando un controlador de minipuerto activa nuevos puertos, NDIS notifica a todos los controladores de protocolo que están enlazados al controlador de minipuerto con el evento PnP NetEventPortActivation . Para obtener más información sobre cómo controlar estos eventos de activación de puerto en un controlador de protocolo, consulte Control del evento PnP de activación de puerto.

Antes de que un controlador de minipuerto asigne un puerto NDIS, el controlador debe llamar a la función NdisMSetMiniportAttributes para establecer los atributos de registro en la estructura de NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES . Los controladores de minipuerto pueden controlar la activación del puerto predeterminado estableciendo la marca de atributo NDIS_MINIPORT_CONTROLS_DEFAULT_PORT cuando llaman a NdisMSetMiniportAttributes. Si un controlador de minipuerto asume la responsabilidad de activar el puerto predeterminado, NDIS no inicia el enlace entre el adaptador de miniporte y los controladores que se sobreponen hasta que el controlador de minipuerto activa el puerto predeterminado con el evento PnP de activación del puerto.

Todos los puertos especificados por la lista vinculada de NDIS_PORT estructuras deben estar en el estado asignado. Un controlador de minipuerto no debe intentar activar un puerto que ya está activo; Si el controlador intenta activar un puerto activo, NDIS trata la situación como un error de activación del puerto.

Si NDIS no puede activar ningún puerto de la lista, se produce un error en la llamada a NdisMNetPnPEvent y ninguno de los puertos de la lista cambia el estado al estado activado. Si NDIS no puede activar los puertos porque algunos de los puertos no existen, NdisMNetPnPEvent devuelve un valor devuelto NDIS_STATUS_INVALID_PORT. Si NDIS no puede activar los puertos porque algunos de los puertos no están en el estado asignado, NdisMNetPnPEvent devuelve un valor devuelto NDIS_STATUS_INVALID_PORT_STATE.

Una vez que se ha activado correctamente un puerto, el puerto está en estado activado. Los controladores de minipuerto pueden indicar los datos recibidos y el estado de un puerto en estado activado.

NDIS pasa el estado de autenticación del puerto predeterminado a la función MiniportInitializeEx en el miembro DefaultPortAuthStates de la estructura NDIS_MINIPORT_INIT_PARAMETERS . Si un controlador de minipuerto controla el puerto predeterminado, cuando el controlador de minipuerto activa el puerto predeterminado, puede activar el puerto predeterminado mediante la configuración de autenticación predeterminada. Para usar la configuración de autenticación predeterminada, establezca la marca NDIS_PORT_CHAR_USE_DEFAULT_AUTH_SETTINGS en el miembro Flags de NDIS_PORT_CHARACTERISTICS estructura. Los controladores de minipuerto pueden usar la marca NDIS_PORT_CHAR_USE_DEFAULT_AUTH_SETTINGS para los puertos que asignan y activan. En el caso de activación, NDIS asigna los estados de autenticación predeterminados al puerto recién activado y omite los estados de autenticación que se pasan a NdisMNetPnPEvent para el evento NetEventPortActivation .

Para obtener más información sobre cómo controlar el puerto predeterminado y asignar puertos, consulte Asignación de puertos NDIS.