Compartir a través de


Controlador de detención del controlador de miniporte

Un controlador de miniporte NDIS debe proporcionar una función MiniportHaltEx a NdisMRegisterMiniportDriver.

MiniportHaltEx debe deshacer todo lo que MiniportInitializeEx hizo. Por ejemplo, el controlador de miniporte NDIS podría:

En el diagrama siguiente se muestra la descarga de un controlador de miniport.

Diagrama que ilustra el proceso de descarga de un controlador de miniporte.

MiniportHaltEx debe completar las operaciones necesarias para descargar el controlador antes de volver. Si el controlador de miniporte tiene indicaciones de recepción pendientes (es decir, los datos de red recibidos que ha indicado hasta NDIS, pero que NDIS aún no ha devuelto), MiniportHaltEx no debe devolverse 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 miniport. El controlador de miniport 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 al deshacer sus acciones previas. 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 miniport configura uno o más temporizadores, 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 miniport debe esperar a que se complete el manejador del temporizador antes de volver de MiniportHaltEx.

  • Si el controlador de miniporta asignó cualquier memoria con NdisAllocateMemoryWithTagPriority, debe llamar a NdisFreeMemory para liberar esa memoria.

  • Si el controlador de miniporta asignó cualquier memoria con NdisMAllocateSharedMemory o NdisMAllocateSharedMemoryAsyncEx, debe llamar a NdisMFreeSharedMemory para liberar esa memoria.

  • Si el controlador de miniporte asignó e inicializó el almacenamiento para un grupo de descriptores de paquetes con NdisAllocateNetBufferPool, debe llamar a NdisFreeNetBufferPool para liberar ese almacenamiento.

  • Si el controlador de miniporte ha asignado o reservado recursos de hardware, se deben devolver. Por ejemplo, si el controlador de miniporte ha asignado un intervalo de puertos de E/S en una NIC, debe liberar los puertos llamando a NdisMDeregisterIoPortRange.

Estados del adaptador de un controlador de minipuerto

liberar un puerto NDIS

detener un adaptador de miniportar

de operaciones y estados del adaptador de miniporte

Funciones de restablecimiento y detención del controlador de miniporte