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 para finalizar.
[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 do 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.
Valor de retorno
RxFinalizeNetFCB retornará TRUE no êxito ou FALSE se a finalização não ocorrer:
Observações
A rotina de RxFinalizeNetFCB do normalmente não é chamada por drivers de minidiretor 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 tal IRP.
A estratégia de tratamento próximo 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 concluir a solicitação e iniciar o 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 VERDADEIRO, RxFinalizeNetFCB fará com que o sistema asserte 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. Esta 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 foi VERDADEIRO, RxFinalizeNetFCB finalizará a FCB.
- se a contagem de referência for zero, a FCB será finalizada e a memória usada para a FCB também será liberada.
Requisitos
Requisito | Valor |
---|---|
da Plataforma de Destino | Área de trabalho |
cabeçalho | rxprocs.h (include Rxprocs.h) |
IRQL | <= APC_LEVEL |