Поделиться через


Функция 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

См. также

RxCreateNetFcb

RxCreateNetFobx

RxCreateNetRoot

RxCreateSrvCall

RxCreateSrvOpen

RxCreateVNetRoot

RxDereference

RxFinalizeConnection

RxFinalizeNetFobx

RxFinalizeNetRoot

RxFinalizeSrvCall

RxFinalizeSrvOpen

RxFinalizeVNetRoot

RxFinishFcbInitialization

RxForceFinalizeAllVNetRoots

RxReference

RxSetSrvCallDomainName

RxpDereferenceNetFcb

RxpReferenceNetFcb

структура FCB