Leer en inglés

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 NodeReferenceCount miembro 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 realizó correctamente o FALSE si no se produjo la finalización:

Observaciones

La rutina de RxFinalizeNetFCB no lo llaman normalmente los controladores mini-redirector de red directamente. 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 una 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 de es FALSE, RxFinalizeNetFCB producirá un error si hay referencias pendientes a la FCB (el OpenCount o CleanCount miembros de la estructura FCB no son cero).

Si el parámetro ForceFinalize es TRUE, RxFinalizeNetFCB hace que el sistema aserte en compilaciones comprobadas.

Después de la finalización recursiva, el recuento de referencias asociado al FCB podría ser como máximo 1 para que se produzca una posterior finalización. 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 al parámetro ForceFinalize se 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 Valor
de la plataforma de destino de Escritorio
encabezado de rxprocs.h (incluya Rxprocs.h)
irQL <= APC_LEVEL

Consulte también

RxCreateNetFcb

rxCreateNetFobx

RxCreateNetRoot

RxCreateSrvCall

RxCreateSrvOpen

RxCreateVNetRoot

de RxDereference

RxFinalizeConnection

RxFinalizeNetFobx

RxFinalizeNetRoot

RxFinalizeSrvCall

RxFinalizeSrvOpen

RxFinalizeVNetRoot

RxFinishFcbInitialization

RxForceFinalizeAllVNetRoots

rxReference

rxSetSrvCallDomainName

RxpDereferenceNetFcb

RxpReferenceNetFcb

el estructura de FCB