Controladores miniport NDIS deserializados
Todos los controladores NDIS 6.0 y posteriores se deserializan.
Un controlador de miniporte NDIS deserializado serializa el funcionamiento de sus propias funciones MiniportXxx y pone en cola internamente todas las solicitudes de envío en lugar de confiar en NDIS para realizar estas funciones. Como resultado, un controlador de miniporte deserializado puede lograr un rendimiento dúplex completo significativamente mejor que un controlador de minipuerto serializado.
El modelo de controlador deserializado es el modelo predeterminado para los controladores de minipuerto de NDIS. Los controladores de minipuerto orientados a la conexión, así como los controladores de minipuerto con un borde inferior de WDM, deben ser controladores deserializados. Al escribir un nuevo controlador de miniporte NDIS, debe escribir un controlador deserializado. Si es posible, también debe migrar controladores anteriores a NDIS 6.0 o posterior. Para obtener más información sobre la portabilidad de controladores, consulte:
- Portabilidad de controladores NDIS 5.x a NDIS 6.0
- Portabilidad de controladores NDIS 6.x a NDIS 6.20
- Portabilidad de controladores NDIS 6.x a NDIS 6.30
Un controlador de miniporte deserializado debe cumplir los siguientes requisitos cuando interactúa con NDIS:
Un controlador de miniporte deserializado debe identificarse como tal para NDIS durante la inicialización.
Un controlador de miniporte deserializado debe completar todas las solicitudes de envío de forma asincrónica. Para completar una solicitud de envío, los controladores de miniporte NDIS 6.0 y posteriores sin conexión llaman a la función NdisMSendNetBufferListsComplete . Los controladores de miniporte orientados a la conexión NDIS 6.0 y versiones posteriores llaman a la función NdisMCoSendNetBufferListsComplete .
Un controlador de miniport deserializado que admite NDIS 6.0 o posterior establece el miembro Status de la estructura de NET_BUFFER_LIST que pasará a NdisMSendNetBufferListsComplete.
Si un controlador de miniporte deserializado no puede completar inmediatamente las solicitudes de envío, no puede devolver las solicitudes a NDIS para volver a poner en cola. En su lugar, el controlador de miniporte debe enviar solicitudes internamente hasta que haya suficientes recursos disponibles para transmitir los datos.
Un controlador de miniporte deserializado no debe examinar las estructuras que pasa a NDIS en indicaciones de recepción hasta después de que el NDIS los devuelva. NDIS devuelve NET_BUFFER_LIST estructuras a la función MiniportReturnNetBufferLists del controlador miniporte.
Un controlador de miniporte deserializado debe cumplir los siguientes requisitos internos del controlador:
Un controlador de miniporte deserializado debe proteger sus colas de búfer de red con bloqueos de número. Un controlador de miniporte deserializado también debe proteger su estado compartido frente al acceso simultáneo mediante sus propias funciones MiniportXxx .
Las funciones MiniportXxx del controlador miniporte deserializado se pueden ejecutar en IRQL <= DISPATCH_LEVEL. Por lo tanto, el escritor de controladores no puede suponer que se llamará a las funciones MiniportXxx en la secuencia en la que procesan las solicitudes. Una función MiniportXxx puede reemplazar otra función MiniportXxx que se ejecuta en un IRQL inferior.
Un controlador de minipuerto deserializado es responsable de la administración de colas de búferes de red. Cuando el controlador de miniporte experimenta un problema de recursos, no puede devolver solicitudes de envío a NDIS para volver a poner en cola. En su lugar, el controlador de minipuerto debe poner en cola internamente todas las solicitudes de envío hasta que haya suficientes recursos disponibles para enviar los datos.
Un controlador de miniporte deserializado debe completar las solicitudes de envío en el orden determinado por el protocolo.
Para obtener más información sobre los requisitos de envío y recepción de controladores NDIS, consulte Operaciones de envío y recepción.
Tenga en cuenta que un controlador de miniporte deserializado normalmente completa las solicitudes de envío en orden determinado por protocolo. Sin embargo, un controlador de minipuerto que admita la prioridad del paquete (por ejemplo, IEEE 802.1p) puede reordenar las solicitudes de envío en función de la información de prioridad.