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 |