Compartir a través de


Código paginable y descartable en un controlador de protocolo

Los desarrolladores de controladores deben designar el código como paginable siempre que sea posible, liberando espacio del sistema para el código que debe ser residente en memoria. Puede marcar las funciones como paginables con la macro NDIS_PAGEABLE_FUNCTION . Las características de IRQL, administración de recursos y otras características de una función podrían prohibir que la función se pueda paginar.

Cada función ProtocolXxx se ejecuta en un IRQL en el intervalo de PASSIVE_LEVEL a DISPATCH_LEVEL. Las funciones que se ejecutan exclusivamente en IRQL = PASSIVE_LEVEL deben marcarse como paginables.

Una función de controlador que se ejecuta en IRQL = PASSIVE_LEVEL se puede paginar siempre que no llame a ni se llame a ninguna función que se ejecute en IRQL >= DISPATCH_LEVEL, como una función que adquiere un bloqueo de número. La adquisición de un bloqueo de número hace que el IRQL del subproceso de adquisición se genere en DISPATCH_LEVEL. Una función de controlador, como ProtocolBindAdapterEx, que se ejecuta en IRQL = PASSIVE_LEVEL no debe llamar a ninguna función NdisXxx que se ejecute en IRQL >= DISPATCH_LEVEL si esa función del controlador está marcada como código paginable. Para obtener más información sobre irQL para cada función NdisXxx , vea Funciones de biblioteca de NDIS.

La función DriverEntry de controladores de protocolo NDIS, así como el código al que se llama solo desde DriverEntry, se debe especificar como código de solo inicialización, mediante la macro NDIS_INIT_FUNCTION . Se supone que el código identificado con esta macro se ejecuta una sola vez en el tiempo de inicialización del sistema y, como resultado, se asigna solo durante ese tiempo. Después de que una función marcada como de solo inicialización devuelva, se descarta.