Функция RxFinalizeNetFcb (rxprocs.h)
RxFinalizeNetFCB завершает указанную структуру FCB. Вызывающий объект должен иметь монопольную блокировку для NET_ROOT, связанной с FCB.
Синтаксис
BOOLEAN RxFinalizeNetFcb(
[out] OUT PFCB ThisFcb,
[in] IN BOOLEAN RecursiveFinalize,
[in] IN BOOLEAN ForceFinalize,
[in] IN LONG ReferenceCount
);
Параметры
[out] ThisFcb
Указатель на структуру FCB для завершения.
[in] RecursiveFinalize
Значение, указывающее, следует ли выполнять завершение рекурсивно.
[in] ForceFinalize
Значение, указывающее, следует ли принудительно выполнить завершение, независимо от количества ссылок.
Если этот параметр false, то для завершения завершения NodeReferenceCount члена FCB должно быть 1.
[in] ReferenceCount
Количество ссылок на FCB, которое по-прежнему позволит принудительной финализации.
Возвращаемое значение
RxFinalizeNetFCB возвращает TRUE при успешном выполнении или FALSE, если завершение не произошло:
Замечания
Подпрограмма RxFinalizeNetFCB обычно не вызывается драйверами мини-перенаправления сети напрямую. RDBSS вызывает эту подпрограмму внутренне при получении пакета запроса ввода-вывода для IRP_MJ_CLOSE. Обычно этот IRP получается RDBSS в ответ на приложение в режиме пользователя, запрашивающее операцию закрытия файла. Кроме того, для другого драйвера ядра может возникнуть такая ошибка IRP.
Стратегия тесной обработки в RDBSS определяется в зависимости от xiom, что рабочая нагрузка на сервере должна быть свернута как и по возможности. Существует несколько приложений, которые многократно закрывают и открывают один и тот же файл (пакетная обработка файлов, например). В этих случаях один и тот же файл открывается, строка из буфера считывается, файл закрывается, и тот же набор операций повторяется снова и снова.
Это обрабатывается в RDBSS путем отложенной обработки закрытия запроса. Существует задержка около 10 секунд между завершением запроса и инициированием обработки при закрытии запроса. Откроется окно, в течение которого последовавшая открытая операция может быть свернута на существующий SRV_OPEN. Интервал времени можно настроить в соответствии с этими требованиями.
Перед вызовом RxFinalizeNetFCBнеобходимо получить блокировку структуры FCB в монопольном режиме.
Если параметр recursiveFinalize false, то RxFinalizeNetFCB завершится ошибкой, если отсутствуют невыполненные ссылки на FCB (OpenCount или члены структуры FCB не равны нулю).
Если параметр ForceFinalize TRUE, RxFinalizeNetFCB приводит к тому, что система будет УТВЕРЖДАТЬ в проверенных сборках.
После рекурсивной финализации количество ссылок, связанных с FCB, может быть не более 1 для дальнейшего завершения. Это окончательное число ссылок принадлежит таблице имен префикса NET_ROOT. Фактическая завершение делится на две части:
-
Значение
>, если число ссылок равно 1 или параметру ForceFinalize было TRUE ,RxFinalizeNetFCB завершает работу с FCB. - Если число ссылок переходит к нулю, FB завершается, а память, используемая для FCB, также освобождается.
Требования
Требование | Ценность |
---|---|
целевая платформа | Настольный |
заголовка | rxprocs.h (include Rxprocs.h) |
IRQL | <= APC_LEVEL |