Compartir a través de


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

Consulte también

RxCreateNetFcb

RxCreateNetFobx

RxCreateNetRoot

RxCreateSrvCall

RxCreateSrvOpen

RxCreateVNetRoot

RxDereference

RxFinalizeConnection

RxFinalizeNetFobx

RxFinalizeNetRoot

RxFinalizeSrvCall

RxFinalizeSrvOpen

RxFinalizeVNetRoot

RxFinishFcbInitialization

RxForceFinalizeAllVNetRoots

RxReference

RxSetSrvCallDomainName

RxpDereferenceNetFcb

RxpReferenceNetFcb

Estructura FCB