Compartilhar via


Função RxFinalizeNetFcb (rxprocs.h)

RxFinalizeNetFCB finaliza a estrutura fcb fornecida. O chamador deve ter um bloqueio exclusivo no NET_ROOT associado ao FCB.

Sintaxe

BOOLEAN RxFinalizeNetFcb(
  [out] OUT PFCB   ThisFcb,
  [in]  IN BOOLEAN RecursiveFinalize,
  [in]  IN BOOLEAN ForceFinalize,
  [in]  IN LONG    ReferenceCount
);

Parâmetros

[out] ThisFcb

Um ponteiro para a estrutura FCB a ser finalizada.

[in] RecursiveFinalize

O valor que indica se a finalização deve ser feita recursivamente.

[in] ForceFinalize

O valor que indica se a finalização deve ser forçada, independentemente da contagem de referência.

Se esse parâmetro for FALSE, o membro NodeReferenceCount da FCB deverá ser 1 para que o FCB seja finalizado.

[in] ReferenceCount

A contagem de referência no FCB que ainda permitirá a finalização forçada.

Retornar valor

RxFinalizeNetFCB retornará TRUE em caso de êxito ou FALSO se a finalização não ocorrer:

Comentários

A rotina RxFinalizeNetFCB normalmente não é chamada por drivers de minidiretório de rede diretamente. O RDBSS chama essa rotina internamente quando um pacote de solicitação de E/S é recebido para IRP_MJ_CLOSE. Esse IRP normalmente é recebido pelo RDBSS em resposta a um aplicativo no modo de usuário solicitando uma operação de fechamento de arquivo. Também é possível que outro driver de kernel emita esse IRP.

A estratégia de manipulação próxima no RDBSS baseia-se no axioma de que a carga de trabalho no servidor deve ser minimizada como e quando possível. Há vários aplicativos que fecham e abrem repetidamente o mesmo arquivo (processamento de arquivo em lote, por exemplo). Nesses casos, o mesmo arquivo é aberto, uma linha de um buffer é lida, o arquivo é fechado e o mesmo conjunto de operações é repetido várias vezes.

Isso é tratado no RDBSS por um processamento atrasado da solicitação de fechamento. Há um atraso de cerca de 10 segundos entre a conclusão da solicitação e o início do processamento na solicitação de fechamento. Isso abre uma janela durante a qual uma operação aberta subsequente pode ser recolhida em um SRV_OPEN existente. O intervalo de tempo pode ser ajustado para atender a esses requisitos.

Antes de chamar RxFinalizeNetFCB, um bloqueio na estrutura FCB deve ser adquirido no modo exclusivo.

Se o parâmetro RecursiveFinalize for FALSE, RxFinalizeNetFCB falhará se houver referências pendentes ao FCB (os membros OpenCount ou CleanCount da estrutura FCB não são zero).

Se o parâmetro ForceFinalize for TRUE, RxFinalizeNetFCB fará com que o sistema assert em builds verificados.

Após a finalização recursiva, a contagem de referência associada ao FCB pode ser no máximo 1 para que uma finalização adicional ocorra. Essa contagem de referência final pertence à tabela de nomes de prefixo do NET_ROOT. A finalização real é dividida em duas partes:

  • se a contagem de referência for igual a 1 ou o parâmetro ForceFinalize for TRUE, RxFinalizeNetFCB finalizará o FCB.
  • se a contagem de referência for para zero, a FCB será finalizada e a memória usada para a FCB também será liberada.

Requisitos

Requisito Valor
Plataforma de Destino Área de Trabalho
Cabeçalho rxprocs.h (include Rxprocs.h)
IRQL <= APC_LEVEL

Confira também

RxCreateNetFcb

RxCreateNetFobx

RxCreateNetRoot

RxCreateSrvCall

RxCreateSrvOpen

RxCreateVNetRoot

RxDereference

RxFinalizeConnection

RxFinalizeNetFobx

RxFinalizeNetRoot

RxFinalizeSrvCall

RxFinalizeSrvOpen

RxFinalizeVNetRoot

RxFinishFcbInitialization

RxForceFinalizeAllVNetRoots

RxReference

RxSetSrvCallDomainName

RxpDereferenceNetFcb

RxpReferenceNetFcb

A estrutura FCB