Función RxStopMinirdr (mrx.h)
Se llama a RxStopMinirdr para detener un minidirector de red que se ha iniciado anteriormente. Como parte de RxStopMinirdr, RDBSS también anulará el registro del controlador mini-redirector de red como proveedor de convención de nomenclatura universal (UNC) con el proveedor unc múltiple (MUP) si el controlador indica compatibilidad con nombres UNC.
Sintaxis
NTSTATUS RxStopMinirdr(
[in] IN PRX_CONTEXT RxContext,
[out] OUT PBOOLEAN PostToFsp
);
Parámetros
[in] RxContext
Puntero a la estructura RX_CONTEXT que se va a usar para obtener el objeto de dispositivo y determinar si se trata de un proceso del sistema de archivos.
[out] PostToFsp
Puntero a un valor lógico que se establece en TRUE al devolver si el proceso del sistema de archivos debe publicar la solicitud para su posterior procesamiento.
Valor devuelto
RxStopMinirdr devuelve STATUS_SUCCESS si la secuencia de detención se realizó correctamente o uno de los siguientes valores de error:
Código devuelto | Descripción |
---|---|
STATUS_PENDING | La secuencia de detención para RDBSS y miniireccionadores de red debe completarse en el contexto del proceso del sistema de archivos. Si la llamada a RxStopMinirdr procede de un proceso diferente (por ejemplo, una solicitud en modo de usuario), la solicitud se publicará para su procesamiento posterior y se devolverá STATUS_PENDING. Este error también se puede devolver si no se pueden adquirir determinados bloqueos RDBSS internos sin esperar. |
STATUS_REDIRECTOR_HAS_OPEN_HANDLES | El minidirector de red tiene identificadores abiertos y no se puede detener en este momento. |
STATUS_REDIRECTOR_STOPPED | El minidirector de red ya estaba detenido. |
Comentarios
Cuando se emite una solicitud de detención a RDBSS, puede haber solicitudes en curso en RDBSS. Algunas de las solicitudes se pueden cancelar mientras se deben procesar las solicitudes restantes para completarse.
Hay una serie de estrategias que se pueden emplear para cerrar RDBSS. Actualmente, se emplea el enfoque más conservador. La cancelación de esas operaciones que se pueden cancelar y la operación de detención se mantiene hasta que las solicitudes restantes se ejecutan hasta su finalización.
Normalmente, se llama a RDBSS RxStopMinirdr como resultado de una solicitud FSCTL o IOCTL de una aplicación o servicio en modo de usuario para detener el minidirector de red, aunque esta llamada también se podría realizar desde el minidirector de red o como parte del procesamiento de apagado por el sistema operativo.
Una vez que se emite una llamada a RxStopMinirdr , las únicas operaciones permitidas por RDBSS y pasadas al minidirector de red son solicitudes para los siguientes paquetes de solicitud de E/S:
- IRP_MJ_CLEANUP
- IRP_MJ_CLOSE
La secuencia de detención para RDBSS y el minidirector de red deben completarse en el contexto del proceso del sistema de archivos. Si la llamada a RxStopMinirdr procede de un proceso diferente (por ejemplo, una solicitud en modo de usuario), la solicitud debe publicarse para su procesamiento posterior y se devolverá STATUS_PENDING. En este caso, el identificador de usuario efectivo (el identificador de inicio de sesión) del autor de la llamada se guarda en el miembro FsdUid del parámetro RxContext . Además, si no se pueden obtener determinados bloqueos RDBSS internos sin esperar, se devuelve STATUS_PENDING y PostToFsp se establece en TRUE. Cuando se devuelve STATUS_PENDING, rxStopMinirdr se publicará para su posterior procesamiento por un proceso del sistema de archivos y se completará.
Si un minidirector de red indica compatibilidad con UNC al registrarse con RDBSS (el parámetro Controls en RxRegisterMinirdr), RxStopMinirdr intentará anular el registro de DeviceName del minidirector de red como proveedor UNC con MUP (llama a FsRtlDeregisterUncProvider en nombre del minidirector de red). RxStopMinirdr también anula el registro del sistema de archivos con el administrador de E/S (llama a IoUnregisterFileSystem) en nombre del minidirector de red).
La rutina RxStopMinirdr llama a la rutina de devolución de llamada MrxStop minidirector de red si se implementa esta rutina. Si no quedan FCB activos, se devuelve STATUS_SUCCESS. Si hay algunos FCB activos restantes, se devuelve STATUS_REDIRECTOR_HAS_OPEN_HANDLES. En cualquier caso, el distribuidor RDBSS para el redirector se activa y el estado interno del minidirector de red en RDBSS se establece en RDBSS_STARTABLE.
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Escritorio |
Encabezado | mrx.h (incluya Mrx.h) |
IRQL | <= APC_LEVEL |