Inicialización de un controlador de filtro
La inicialización del controlador de filtro se produce inmediatamente después de que el sistema cargue el controlador. Los controladores de filtro se cargan como servicios del sistema. El sistema puede cargar los controladores de filtro en cualquier momento antes, durante o después de la carga de los controladores de minipuerto. NDIS puede conectar un módulo de filtro a un adaptador de minipuerto después de que un adaptador de miniporte del tipo admitido por el controlador de filtro esté disponible y se complete la inicialización del controlador de filtro.
Mientras se inicia una pila de controladores, el sistema carga los controladores de filtro si aún no están cargados. Para obtener más información sobre cómo iniciar una pila de controladores que incluye módulos de filtro, consulte Inicio de una pila de controladores.
Después de que se cargue un controlador de filtro, el sistema llama a la rutina DriverEntry del controlador.
El sistema pasa dos argumentos a DriverEntry:
Puntero al objeto de controlador, creado por el sistema de E/S.
Puntero a la ruta de acceso del Registro, que especifica dónde se almacenan los parámetros específicos del controlador.
DriverEntry devuelve STATUS_SUCCESS, o su NDIS_STATUS_SUCCESS equivalente, si el controlador se registró correctamente como controlador de filtro NDIS. Si DriverEntry produce un error en la inicialización mediante la propagación de un estado de error devuelto por una función NdisXxx o por una rutina de soporte técnico en modo kernel, el controlador no permanecerá cargado. DriverEntry debe ejecutarse sincrónicamente; es decir, no puede devolver STATUS_PENDING ni su NDIS_STATUS_PENDING equivalente.
El controlador de filtro pasa el objeto de controlador a la función NdisFRegisterFilterDriver cuando se registra con NDIS como controlador de filtro. El controlador puede usar la ruta de acceso del Registro para obtener información de configuración. Para obtener más información sobre cómo acceder a la información de configuración del controlador de filtro, vea Obtener acceso a la información de configuración de un controlador de filtro.
Un controlador de filtro llama a NdisFRegisterFilterDriver desde su rutina DriverEntry . Los controladores de filtro exportan un conjunto de funciones FilterXxx pasando una estructura de NDIS_FILTER_DRIVER_CHARACTERISTICS a NdisFRegisterFilterDriver en el parámetro FilterCharacteristics .
La estructura NDIS_FILTER_DRIVER_CHARACTERISTICS especifica los puntos de entrada para las funciones FilterXxx obligatorias y opcionales. Se pueden omitir algunas funciones opcionales. Para obtener más información sobre cómo omitir funciones, vea Modo de omisión de datos.
Los controladores que llaman a NdisFRegisterFilterDriver deben estar preparados para una llamada inmediata a cualquiera de sus funciones FilterXxx .
La estructura NDIS_FILTER_DRIVER_CHARACTERISTICS especifica los puntos de entrada para estas funciones FilterXxx obligatorias:
La estructura NDIS_FILTER_DRIVER_CHARACTERISTICS especifica los puntos de entrada de estos opcionales y no modificables en tiempo de ejecución, funciones FilterXxx :
FilterCancelSendNetBufferLists
La estructura NDIS_FILTER_DRIVER_CHARACTERISTICS especifica los puntos de entrada predeterminados para estos opcionales y modificables en tiempo de ejecución, funciones FilterXxx :
FilterSendNetBufferListsComplete
Las cuatro funciones anteriores también se definen en la estructura NDIS_FILTER_PARTIAL_CHARACTERISTICS . Esta estructura especifica las funciones que se pueden cambiar en tiempo de ejecución mediante una llamada a la función NdisSetOptionalHandlers desde la función FilterSetModuleOptions . Si un controlador de filtro cambiará estas características parciales en tiempo de ejecución, debe proporcionar el punto de entrada para FilterSetModuleOptions. Las características parciales pueden ser diferentes para cada módulo de filtro. Para obtener más información, consulte Inicio de un módulo de filtro.
NDIS llama a la función FilterSetOptions dentro del contexto de la llamada a NdisFRegisterFilterDriver. FilterSetOptions registra servicios opcionales con NDIS. Para obtener más información, vea Configuring Optional Filter Driver Services.
Si la llamada a NdisFRegisterFilterDriver se realiza correctamente, NDIS rellena la variable en NdisFilterDriverHandle con un identificador de controlador de filtro. El controlador de filtro guarda este identificador y, posteriormente, pasa este identificador a funciones NDIS, como NdisFDeregisterFilterDriver, que requieren un controlador de filtro como parámetro de entrada. Cuando el controlador se descarga, debe llamar a la función NdisFDeregisterFilterDriver para liberar los recursos del controlador asignados por NdisFRegisterFilterDriver.
Una vez devuelto FilterSetOptions , los módulos de filtro se encuentran en estado Desasociado . NDIS puede llamar a la función FilterAttach del controlador de filtro en cualquier momento después de que se devuelva la llamada a FilterSetOptions . El controlador realiza la inicialización específica del módulo de filtro en la función FilterAttach . Para obtener más información sobre cómo adjuntar un módulo de filtro a una pila de controladores, consulte Asociación de un módulo de filtro.
Un controlador de filtro también realiza cualquier otra inicialización específica del controlador que requiera en DriverEntry. El controlador de filtro debe liberar los recursos específicos del controlador que asigna en su rutina FilterDriverUnload . Para obtener más información, vea Descargar un controlador de filtro.