Función RxFinalizeNetFcb (rxprocs.h)
RxFinalizeNetFCB finaliza la estructura FCB dada. El autor de la llamada debe tener un bloqueo exclusivo en el NET_ROOT asociado a FCB.
Sintaxis
BOOLEAN RxFinalizeNetFcb(
[out] OUT PFCB ThisFcb,
[in] IN BOOLEAN RecursiveFinalize,
[in] IN BOOLEAN ForceFinalize,
[in] IN LONG ReferenceCount
);
Parámetros
[out] ThisFcb
Puntero a la estructura FCB que se va a finalizar.
[in] RecursiveFinalize
Valor que indica si la finalización se debe realizar de forma recursiva.
[in] ForceFinalize
Valor que indica si se debe forzar la finalización, independientemente del recuento de referencias.
Si este parámetro es FALSE, el miembro NodeReferenceCount del FCB debe ser 1 para que se finalice el FCB.
[in] ReferenceCount
Recuento de referencias del FCB que seguirá permitiendo la finalización forzada.
Valor devuelto
RxFinalizeNetFCB devuelve TRUE si se ha realizado correctamente o FALSE si no se ha producido la finalización:
Comentarios
Normalmente, los controladores de minidirector de red no llaman a la rutina RxFinalizeNetFCB . RDBSS llama a esta rutina internamente cuando se recibe un paquete de solicitud de E/S para IRP_MJ_CLOSE. RDBSS recibe normalmente este IRP en respuesta a una aplicación en modo de usuario que solicita una operación de cierre de archivos. También es posible que otro controlador de kernel emita este tipo de IRP.
La estrategia de control cercano en RDBSS se basa en el axiom que la carga de trabajo del servidor debe minimizarse lo antes posible. Hay una serie de aplicaciones que cierran y abren repetidamente el mismo archivo (procesamiento de archivos por lotes, por ejemplo). En estos casos, se abre el mismo archivo, se lee una línea de un búfer, se cierra el archivo y se repite el mismo conjunto de operaciones una y otra vez.
Esto se controla en RDBSS mediante un procesamiento retrasado de la solicitud de cierre. Hay un retraso de unos 10 segundos entre completar la solicitud e iniciar el procesamiento en la solicitud de cierre. Se abre una ventana durante la cual se puede contraer una operación de apertura posterior en un SRV_OPEN existente. El intervalo de tiempo se puede ajustar para cumplir estos requisitos.
Antes de llamar a RxFinalizeNetFCB, se debe adquirir un bloqueo en la estructura FCB en modo exclusivo.
Si el parámetro RecursiveFinalize es FALSE, rxFinalizeNetFCB producirá un error si hay referencias pendientes a la FCB (los miembros OpenCount o CleanCount de la estructura FCB no son cero).
Si el parámetro ForceFinalize es TRUE, RxFinalizeNetFCB hace que el sistema aserte las compilaciones activadas.
Después de la finalización recursiva, el recuento de referencias asociado con el FCB podría ser como máximo 1 para que se produzca una finalización adicional. Este recuento de referencias final pertenece a la tabla de nombres de prefijo del NET_ROOT. La finalización real se divide en dos partes:
- Si el recuento de referencias es igual a 1 o el parámetro ForceFinalize era TRUE, RxFinalizeNetFCB finaliza el FCB.
- si el recuento de referencias va a cero, el FCB se finaliza y también se libera la memoria utilizada para el FCB.
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Escritorio |
Encabezado | rxprocs.h (incluya Rxprocs.h) |
IRQL | <= APC_LEVEL |