Compartir a través de


Registro de controladores e Inicio/Detención del control

Cuando se inicia el sistema operativo, Windows carga RDBSS y los controladores de minidirector de red en función de la configuración del registro. Para un controlador minidirector de red monolítico, que está vinculado estáticamente con rdbsslib.lib, el controlador debe llamar a la rutina RxDriverEntry desde su rutina DriverEntry para inicializar la copia de la biblioteca RDBSSLIB vinculada con el controlador de red. En este caso, se debe llamar a la rutina RxDriverEntry antes de que se llame y use cualquier otra rutina RDBSS. En el caso de un controlador minidirector de red no monolítico (el redirector de SMB de Microsoft), el controlador de dispositivo rdbss.sys se inicializa en su propia rutina DriverEntry cuando se carga.

Un minidirector de red se registra con RDBSS cuando el kernel carga el controlador y anula el registro con RDBSS cuando se descarga el controlador. Un minidirector de red informa a RDBSS de que se ha cargado llamando a RxRegisterMinirdr, la rutina de registro exportada desde RDBSS. Como parte de este proceso de registro, el minidirector de red pasa un parámetro a RxRegisterMinirdr que es un puntero a una estructura grande, MINIRDR_DISPATCH. Esta estructura contiene información de configuración para el minidirector de red y una tabla de distribución de punteros a rutinas de devolución de llamada implementadas por el controlador de kernel minidirector de red. RDBSS realiza llamadas al controlador minidirector de red mediante esta lista de rutinas de devolución de llamada.

La rutina RxRegisterMinirdr establece todas las rutinas de distribución del controlador del minidirector de red para que apunten a la rutina de distribución RDBSS de nivel superior, RxFsdDispatch. Un minidirector de red puede invalidar este comportamiento guardando sus propios puntos de entrada y reescribiendo el envío del controlador con sus propios puntos de entrada después de la llamada a RxRegisterMinirdr devuelve o estableciendo un parámetro especial al llamar a RxRegisterMinirdr.

El controlador minidirector de red no inicia realmente la operación hasta que recibe una llamada a su rutina MRxStart , una de las rutinas de devolución de llamada pasadas en la estructura de MINIRDR_DISPATCH. La rutina de devolución de llamada MrxStart debe implementarse mediante el controlador mini-redirector de red si desea recibir rutinas de devolución de llamada para las operaciones a menos que el minidirector de red conserve sus propios puntos de entrada de envío del controlador. De lo contrario, RDBSS solo permitirá los siguientes paquetes de solicitud de E/S al controlador hasta que MrxStart se devuelva correctamente:

  • Las solicitudes IRP para el dispositivo crean y las operaciones de dispositivo en las que FileObject-FileName.Length> en IRPSP es cero y FileObject-RelatedFileObject> es NULL.

Para cualquier otra solicitud IRP, la rutina de distribución rdBSS RxFsdDispatch devolverá un estado de STATUS_REDIRECTOR_NOT_STARTED.

La rutina de distribución de RDBSS también producirá un error en las solicitudes de los siguientes paquetes de solicitud de E/S:

  • IRP_MJ_CREATE_MAILSLOT

  • IRP_MJ_CREATE_NAMED_PIPE

RdBSS llama a la rutina de devolución de llamada MrxStart implementada por el minidirector de red cuando se llama a la rutina RxStartMinirdr . La rutina RDBSS RxStartMinirdr suele llamarse como resultado de una solicitud de código de control del sistema de archivos (FSCTL) o código de control de E/S (IOCTL) desde una aplicación o servicio en modo de usuario para iniciar el minidirector de red. La llamada a RxStartMinirdr no se puede realizar desde la rutina DriverEntry del minidirector de red después de una llamada correcta a RxRegisterMinirdr, ya que algunos de los procesos iniciales requieren que se complete la inicialización del controlador. Una vez recibida la llamada RxStartMinirdr , RDBSS completa el proceso de inicio llamando a la rutina MrxStart del minidirector de red. Si la llamada a MrxStart devuelve éxito, RDBSS establece el estado interno del minidirector en RDBSS en RDBSS_STARTED.

RDBSS exporta una rutina , RxSetDomainForMailslotBroadcast, para establecer el dominio para las difusiones de mailslot. Esta rutina se usa durante el registro si el minidirector de red admite mailslots.

Una rutina de conveniencia, __RxFillAndInstallFastIoDispatch, exportada por RDBSS se puede usar para copiar todos los punteros rutinarios de controlador IRP_MJ_XXX para controlar el procesamiento de solicitudes de E/S a los vectores de envío de E/S rápido comparables, pero esta rutina solo funciona para controladores no monolíticos.

RDBSS también exporta rutinas para notificar a RDBSS que el minidirector de red está iniciando o deteniendo. Estas llamadas se usan si un minidirector de red incluye un servicio de administración en modo de usuario o una aplicación de utilidad que inicia y detiene el redirector. Este servicio o aplicación en modo de usuario puede enviar solicitudes FSCTL o IOCTL personalizadas al controlador minidirector de red para indicar que debe iniciarse o detenerse. El redirector puede llamar a las rutinas RDBSS RxStartMinirdr o RxStopMinirdr para notificar a RDBSS que inicien o detengan este minidirector de red.

En la tabla siguiente se enumeran los registros de controladores RDBSS y las rutinas de control start/stop.

Rutina Descripción

RxDriverEntry

Una minidirectora de red monolítica llama a esta rutina desde su rutina DriverEntry para inicializar RDBSS.

En el caso de los controladores no monolíticos, esta rutina de inicialización es equivalente a la rutina DriverEntry del controlador de dispositivo rbss.sys.

RxRegisterMinirdr

Un controlador minidirector de red llama a esta rutina para registrar el controlador con RDBSS, que agrega la información de registro a una tabla de registro interna. RDBSS también compila un objeto de dispositivo para el minidirector de red.

RxSetDomainForMailslotBroadcast

Un controlador minidirector de red llama a esta rutina para establecer el dominio utilizado para las difusiones de mailslot, si el controlador admite mailslots.

RxStartMinirdr

Esta rutina inicia un minidirector de red que llamó para registrarse. RDBSS también registrará el controlador minidirector de red como proveedor UNC con el MUP si el controlador indica compatibilidad con nombres UNC.

RxStopMinirdr

Esta rutina detiene un controlador minidirector de red. Un controlador detenido ya no recibirá nuevos comandos, excepto las solicitudes IOCTL o FSCTL.

RxpUnregisterMinirdr

Un controlador minidirector de red llama a esta rutina para anular el registro del controlador con RDBSS y quitar la información de registro de la tabla de registro interna de RDBSS.

RxUnregisterMinirdr

Esta rutina es una función insertada definida en rxstruc.h a la que llama un controlador minidirector de red para anular el registro del controlador con RDBSS y quitar la información de registro de la tabla de registro interna de RDBSS. La función insertada RxUnregisterMinirdr llama internamente a RxpUnregisterMinirdr.

__RxFillAndInstallFastIoDispatch

Esta rutina rellena un vector de distribución de E/S rápido para que sea idéntico al vector de E/S de envío normal y lo instala en el objeto de controlador asociado al objeto de dispositivo pasado.

La macro siguiente se define en el archivo de encabezado mrx.h que llama a una de estas rutinas. Esta macro se usa normalmente en lugar de llamar directamente a la rutina __RxFillAndInstallFastIoDispatch .

Macro Descripción

RxFillAndInstallFastIoDispatch(__devobj, __fastiodisp)

Esta macro llama a __RxFillAndInstallFastIoDispatchpara rellenar un vector de distribución de E/S rápido para que sea idéntico al vector de E/S de envío normal y lo instala en el objeto de controlador asociado al objeto de dispositivo pasado.