Controlador de detención del controlador de miniporte
Un controlador de minipuerto NDIS debe proporcionar una función MiniportHaltEx a NdisMRegisterMiniportDriver.
MiniportHaltEx debe deshacer todo lo que MiniportInitializeEx hizo. Por ejemplo, el controlador de minipuerto NDIS podría:
Puertos libres. (Para obtener más información, consulte Liberar un puerto NDIS).
Libere todos los recursos de hardware que MiniportInitializeEx ha reclamado.
Libere recursos de interrupción mediante una llamada a NdisMDeregisterInterruptEx.
Libere cualquier memoria asignada por MiniportInitializeEx .
Detenga la NIC, a menos que la función MiniportShutdownEx ya haya restaurado la NIC a su estado inicial.
En el diagrama siguiente se muestra cómo descargar un controlador de minipuerto.
MiniportHaltEx debe completar las operaciones necesarias para descargar el controlador antes de volver. Si el controlador de minipuerto tiene indicaciones de recepción pendientes (es decir, datos de red recibidos que ha indicado hasta NDIS pero que NDIS aún no ha devuelto), MiniportHaltEx no debe devolver hasta que dichos datos se devuelvan a la función MiniportReturnNetBufferLists del controlador de miniport.
En la ilustración anterior se muestra un conjunto de llamadas que podría realizar una función MiniportHaltEx . Estas llamadas son solo un subconjunto de las llamadas que se pueden realizar. El conjunto real de llamadas depende de las acciones anteriores del controlador de minipuerto. El controlador de minipuerto puede realizar estas mismas llamadas en MiniportInitializeEx si no puede inicializar correctamente el adaptador de red debido a problemas de hardware o porque no puede adquirir un recurso que necesite. En tal caso, MiniportInitializeEx debe descargar el controlador deshabilite sus acciones anteriores. De lo contrario, MiniportHaltEx deshacerá las acciones de MiniportInitializeEx.
En la lista siguiente se describen las llamadas necesarias para invertir determinadas acciones que el controlador de miniporte podría realizar:
Si el controlador de miniporte registró una interrupción, debe llamar a NdisMDeregisterInterruptEx.
Si el controlador de minipuerto configura un temporizador o temporizador, debe llamar a NdisCancelTimerObject para cada temporizador que creó. Si se produce un error en una llamada a NdisCancelTimerObject , es posible que el temporizador ya se haya activado. En este caso, el controlador de minipuerto debe esperar a que se complete el controlador del temporizador antes de volver de MiniportHaltEx.
Si el controlador de minipuerto asignó cualquier memoria con NdisAllocateMemoryWithTagPriority, debe llamar a NdisFreeMemory para liberar esa memoria.
Si el controlador de minipuerto asignó memoria con NdisMAllocateSharedMemory o NdisMAllocateSharedMemoryAsyncEx, debe llamar a NdisMFreeSharedMemory para liberar esa memoria.
Si el controlador de miniporte asignado e inicializado almacenamiento para un grupo de descriptores de paquetes con NdisAllocateNetBufferPool, debe llamar a NdisFreeNetBufferPool para liberar ese almacenamiento.
Si el controlador de minipuerto ha asignado o reservado recursos de hardware, se deben devolver. Por ejemplo, si el controlador de minipuerto ha asignado un intervalo de puertos de E/S en una NIC, debe liberar los puertos mediante una llamada a NdisMDeregisterIoPortRange.
Temas relacionados
Estados del adaptador de un controlador miniporte
Detener un adaptador de minipuerto
Estados y operaciones del adaptador de miniporte
Funciones de restablecimiento y detención del controlador de miniporte