Registro previo de MSI-X
Para admitir el cambio de afinidades de interrupción para MSI-X o para quitar recursos de interrupción de mensajes, un controlador de miniporte debe establecer una función de filtro de requisitos de recursos. Este paso previo al registro se produce antes de que NDIS llame a la función MiniportInitializeEx .
Para establecer una función de filtro de requisitos de recursos, el controlador de minipuerto debe proporcionar una función MiniportSetOptions . Cuando el controlador de minipuerto llama a la función NdisMRegisterMiniportDriver desde la rutina DriverEntry , el controlador pasa el punto de entrada para MiniportSetOptions en la estructura NDIS_MINIPORT_DRIVER_CHARACTERISTICS . NDIS llama a la función MiniportSetOptions en el contexto de NdisMRegisterMiniportDriver.
Desde MiniportSetOptions, el controlador de miniporta llama a la función NdisSetOptionalHandlers y especifica una estructura NDIS_MINIPORT_PNP_CHARACTERISTICS . Esta estructura define los puntos de entrada de las funciones MiniportAddDevice, MiniportRemoveDevice, MiniportStartDevice y MiniportFilterResourceRequirements .
Cuando NDIS recibe una solicitud de complemento del dispositivo del administrador de Plug and Play (PnP), NDIS llama a la función MiniportAddDevice del controlador de miniporte. El identificador que NDIS pasa a MiniportAddDevice en el parámetro MiniportAdapterHandle es el identificador que NDIS pasa más adelante a la función MiniportInitializeEx .
En MiniportAddDevice, el controlador inicializa una estructura NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES y pasa esta estructura a la función NdisMSetMiniportAttributes . La estructura NDIS_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES contiene el miembro MiniportAddDeviceContext que es un identificador de un área de contexto asignada por el controlador de miniporte para el dispositivo. Más adelante, NDIS proporciona este identificador de contexto a las funciones MiniportRemoveDevice, MiniportFilterResourceRequirements, MiniportStartDevice y MiniportInitializeEx . Para MiniportInitializeEx, el identificador de contexto se pasa en el miembro MiniportAddDeviceContext de la estructura NDIS_MINIPORT_INIT_PARAMETERS a la que apunta el parámetro MiniportInitParameters .
Después de que NDIS llama a MiniportAddDevice y MiniportAddDevice devuelve NDIS_STATUS_SUCCESS, NDIS llama a la función MiniportFilterResourceRequirements cada vez que recibe el paquete de solicitud de E/S de IRP_MN_FILTER_RESOURCE_REQUIREMENTS (IRP). MiniportFilterResourceRequirements puede cambiar la afinidad de interrupción para cada mensaje MSI-X, agregar recursos de interrupción de mensaje o quitar recursos de interrupción de mensajes si el controlador se registrará para interrupciones basadas en línea en la función MiniportInitializeEx . Para obtener más información sobre cómo establecer una directiva de afinidad de interrupción, consulte Filtrado de recursos MSI-X.
Cuando NDIS recibe una solicitud de eliminación de dispositivo del administrador de PnP, NDIS llama a la función MiniportRemoveDevice del controlador de miniporte. La función MiniportRemoveDevice debe deshacer las operaciones que realizó la función MiniportAddDevice .