Código paginável e descartado em um driver de protocolo
Os desenvolvedores de driver devem designar o código como paginável sempre que possível, liberando espaço do sistema para código que deve ser residente em memória. Você pode marcar funções como pagináveis com a macro NDIS_PAGEABLE_FUNCTION . O IRQL, os recursos de gerenciamento de recursos e outras características de uma função podem proibir que a função seja paginável.
Cada função ProtocolXxx é executada em um IRQL no intervalo de PASSIVE_LEVEL a DISPATCH_LEVEL. As funções executadas exclusivamente em IRQL = PASSIVE_LEVEL devem ser marcadas como pagináveis.
Uma função de driver que é executada em IRQL = PASSIVE_LEVEL pode ser tornada paginável, desde que não chame nem seja chamada por qualquer função executada em IRQL >= DISPATCH_LEVEL , como uma função que adquire um bloqueio de rotação. Adquirir um bloqueio de rotação faz com que o IRQL do thread de aquisição seja elevado para DISPATCH_LEVEL. Uma função de driver, como ProtocolBindAdapterEx, que é executada em IRQL = PASSIVE_LEVEL não deve chamar nenhuma função NdisXxx executada em IRQL >= DISPATCH_LEVEL se essa função de driver estiver marcada como código paginável. Para obter mais informações sobre o IRQL para cada função NdisXxx , consulte Funções da biblioteca NDIS.
A função DriverEntry dos drivers de protocolo NDIS, bem como o código chamado somente de DriverEntry, deve ser especificada como código somente de inicialização, usando a macro NDIS_INIT_FUNCTION . Supõe-se que o código identificado com essa macro seja executado apenas uma vez no momento da inicialização do sistema e, como resultado, é mapeado somente durante esse período. Depois que uma função marcada como somente inicialização retorna, ela é descartada.