функция обратного вызова PMRX_CALLDOWN (mrx.h)

Этот обратный вызов вызывается RDBSS для запроса на выполнение действия мини-перенаправителя сети на основе предоставленного IRP.

Синтаксис

PMRX_CALLDOWN PmrxCalldown;

NTSTATUS PmrxCalldown(
  [in, out] IN OUT PRX_CONTEXT RxContext
)
{...}

Параметры

[in, out] RxContext

Указатель на структуру RX_CONTEXT. Этот параметр содержит IRP, запрашивающий операцию.

Возвращаемое значение

Этот обратный вызов возвращает STATUS_SUCCESS об успешном выполнении или соответствующее значение NTSTATUS, например следующее:

Код возврата Описание
STATUS_ACCESS_DENIED Был сделан запрос на остановку или запуск мини-перенаправления сети, но у вызывающего объекта не было надлежащего обеспечения безопасности для этой операции.
STATUS_BUFFER_OVERFLOW Буфер для получения сведений о расширенных атрибутах был слишком мал. Это возвращаемое значение следует считать успешным, и в элементе Info.Buffer структуры RX_CONTEXT, на которую указывает параметр RxContext , должно быть возвращено как можно больше допустимых данных.
STATUS_BUFFER_TOO_SMALL Буфер слишком мал для получения запрошенных данных. Если это значение возвращается, для элемента InformationToReturn структуры RX_CONTEXT, на которую указывает параметр RxContext , должен быть задан минимальный размер ожидаемого буфера для успешного вызова.
STATUS_CONNECTION_DISCONNECTED Подключение было отключено.
STATUS_EA_CORRUPT_ERROR С удаленного сервера получены недопустимые расширенные сведения об атрибуте.
STATUS_EA_TOO_LARGE Передаваемые расширенные сведения об атрибуте больше, чем размер, поддерживаемый удаленной общей папкой.
STATUS_FILE_CLOSED Структура FCB была приобретена, но связанная SRV_OPEN структура была закрыта.
STATUS_INSUFFICIENT_RESOURCES Недостаточно ресурсов для завершения операции.
STATUS_INTERNAL_ERROR В мини-перенаправлении сети произошла внутренняя ошибка.
STATUS_INVALID_BUFFER_SIZE Запрошенный размер буфера был слишком большим.
STATUS_INVALID_DEVICE_REQUEST В мини-перенаправление сети отправлен недопустимый запрос устройства.
STATUS_INVALID_NETWORK_RESPONSE От удаленного сервера получен недопустимый ответ.
STATUS_INVALID_PARAMETER В RxContext указан недопустимый параметр.
STATUS_LINK_FAILED Попытка повторно подключиться к удаленному серверу для выполнения запроса завершилась сбоем.
STATUS_MORE_PROCESSING_REQUIRED Мини-перенаправление сети возвращает это значение, чтобы отключить свертывание этого открытого запроса.
STATUS_NETWORK_ACCESS_DENIED Доступ к сети запрещен. Эта ошибка может быть возвращена, если мини-перенаправление сети было предложено открыть новый файл в общей папке только для чтения.
STATUS_NETWORK_NAME_DELETED Имя сети удалено.
STATUS_NONEXISTENT_EA_ENTRY В объекте файла отсутствуют расширенные атрибуты, и пользователь предоставил индекс расширенных атрибутов.
STATUS_NOT_IMPLEMENTED Запрашиваемая функция, например удаленная загрузка или удаленный файл подкачки, не реализована.
STATUS_NOT_SUPPORTED Запрашиваемая функция, например расширенные атрибуты, не поддерживается.
STATUS_OBJECT_NAME_COLLISION Мини-перенаправлению сети было предложено создать файл, который уже существует.
STATUS_OBJECT_NAME_NOT_FOUND Имя объекта не найдено. Эта ошибка может быть возвращена, если мини-перенаправление сети было предложено открыть файл, который не существует.
STATUS_OBJECT_PATH_NOT_FOUND Путь к объекту не найден. Эта ошибка может быть возвращена, если был запрошен объект потока NTFS, а удаленная файловая система не поддерживает потоки.
STATUS_ONLY_IF_CONNECTED Структура SRV_OPEN не связана.
STATUS_REDIRECTOR_HAS_OPEN_HANDLES Это был запрос на остановку мини-перенаправления сети, но у перенаправителя есть открытые дескрипторы, которые не позволяют остановить его в данный момент.
STATUS_REDIRECTOR_NOT_STARTED Это был запрос на остановку мини-перенаправления сети, но перенаправление не было запущено.
STATUS_REDIRECTOR_STARTED Это был запрос на запуск мини-перенаправления сети, но перенаправление уже запущено.
STATUS_REPARSE Для обработки символьной ссылки требуется повторная обработка.
STATUS_REQUEST_ABORTED Сетевой запрос прерван.
STATUS_RETRY Операция должна быть выполнена повторно. Эта ошибка может быть возвращена, если мини-перенаправление сети обнаружил нарушение общего доступа или ошибку отказа в доступе.
STATUS_SHARING_VIOLATION Произошло нарушение общего доступа.
STATUS_UNSUCCESSFUL Звонок не увенчался успехом.

Комментарии

Подпрограмма MRxCloseSrvOpen вызывается RDBSS для запроса закрытия мини-перенаправителя сети SRV_OPEN структуры.

MRxCloseSrvOpen вызывается RDBSS в рамках операций очистки и закрытия объекта файла. Предполагается, что мини-перенаправитель сети закроет файл по сети.

Перед вызовом MRxCloseSrvOpen RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext :

MajorFunction имеет значение IRP_MJ_CLOSE

pFcb имеет структуру FCB, для которой инициируется закрытая обработка.

PFobx имеет структуру FOBX, для которой инициируется закрытая обработка.

RDBSS и мини-перенаправление сети не обязательно закрывают структуры SRV_OPEN, когда пользователь закрывает файл. Для повышения производительности в некоторых случаях мини-перенаправитель сети может попытаться повторно использовать SRV_OPEN и кэшированные данные без какого-либо контакта с сервером. Некоторые приложения Microsoft Windows демонстрируют поведение, которое открывает, считывает и закрывает файл, а затем быстро открывает тот же файл. В таких случаях повторное использованием SRV_OPEN структур может повысить производительность.

RDBSS вызывает MRxCloseSrvOpen для отложенной закрытой обработки при очистке структуры FOBX. Это происходит, когда закрытая обработка была отложена в ожидании открытого запроса и открытых запросов не было.

MRxCloseSrvOpen не может вернуть значение STATUS_RETRY, указывающее, что вызов следует повторить. Если требуется цикл повторных попыток, он должен обрабатываться внутренне в подпрограмме MRxCloseSrvOpen мини-перенаправителем сети.

Подпрограмма MRxCollapseOpen вызывается RDBSS , чтобы запросить, чтобы сетевой мини-перенаправитель свернул запрос открытой файловой системы в существующую структуру SRV_OPEN.

RDBSS вызывает MRxCollapseOpen для локального сворачивания структуры SRV_OPEN. Чтобы определить, возможно ли сворачивание, обратитесь к сетевому мини-перенаправлению, поэтому нет причин вызывать сетевой мини-перенаправление дважды. Если сетевой мини-перенаправитель решит свернуть структуру SRV_OPEN, он сделает это и передаст возвращаемое состояние. Возвращаемое значение STATUS_SUCCESS является завершающим возвращаемым значением. Другое возвращаемое значение, например STATUS_MORE_PROCESSING_REQUIRED, считается неоконченным возвращаемым значением.

Перед вызовом MRxCollapseOpen RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext :

Для pRelevantSrvOpen задана структура SRV_OPEN для свертывания.

Параметру Create.pSrvCall присваивается SRV_CALL структура, связанная с SRV_OPEN.

Если мини-перенаправитель сети решает свернуть структуру SRV_OPEN, то член SrvOpen структуры RX_CONTEXT должен иметь свернутую SRV_OPEN структуру.

ПодпрограммаMRxCreate вызывается RDBSS для запроса на создание объекта файловой системы с помощью сетевого мини-перенаправителя.

RDBSS вызывает MRxCreate , чтобы запросить, чтобы сетевой мини-перенаправитель открыл объект файловой системы по сети. Этот вызов выполняется RDBSS в ответ на получение запроса IRP_MJ_CREATE .

Перед вызовом MRxCreate RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext :

pRelevantSrvOpen имеет SRV_OPEN структуру.

Параметр Create.pSrvCall имеет SRV_CALL структуру.

Параметру Create.NtCreateParameters присваивается запрошенное NT_CREATE_PARAMETERS.

В контексте сетевого мини-перенаправителя объект файла ссылается на связанные структуры блока управления файлами (FCB) и расширения файлового объекта (FOBX). Существует соответствие "один к одному" между файловыми объектами и FOBX. Многие объекты файлов будут ссылаться на один и тот же FCB, который представляет один файл на удаленном сервере. Клиент может иметь несколько разных открытых запросов (запросов NtCreateFile) к одному и тому же FCB, и каждый из них создает новый объект файла. RDBSS и сетевые мини-перенаправители могут отправлять меньше запросов MRxCreate, чем полученные запросы NtCreateFile, фактически совместно используя структуру SRV_OPEN между несколькими FOBX.

Если запрос MRxCreate был для перезаписи файла и MRxCreate вернул STATUS_SUCCESS, RDBSS получит ресурс ввода-вывода подкачки и усетит файл. Если файл кэшируется диспетчером кэша, RDBSS обновит размеры диспетчера кэша с теми, которые только что получены с сервера.

Перед возвратом MRxCreate необходимо задать элемент CurrentIrp-IoStatus.Information> структуры RX_CONTEXT, на которую указывает параметр RxContext.

Подпрограмма MRxDevFcbXXXXControlFile вызывается RDBSS для передачи запроса управления FCB устройства (запроса IOCTL или FSCTL) сетевому мини-перенаправлению.

MRxDevFcbXXXXControlFile обрабатывает запросы IOCTL и FSCTL, связанные с FCB устройства, которые отправляются в сетевой мини-перенаправитель.

Перед вызовом MRxDevFcbXXXXControlFile RDBSS изменяет следующий член в структуре RX_CONTEXT, на которую указывает параметр RxContext :

MajorFunction имеет основную функцию IRP.

Если это был запрос IRP_MJ_FILE_SYSTEM_CONTROL, RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext :

LowIoContext.ParamsFor.FsCtl.MinorFunction имеет дополнительный код функции для кода FSCTL.

LowIoContext.ParamsFor.FsCtl.FsControlCode имеет код FSCTL для IRP.

Если это был запрос IRP_MJ_DEVICE_CONTROL или IRP_MJ_INTERNAL_DEVICE_CONTROL, RDBSS изменяет следующий элемент в структуре RX_CONTEXT, на которую указывает параметр RxContext :

LowIoContext.ParamsFor.FsCtl.FsControlCode имеет код элемента управления для IRP.

Если MRxDevFcbXXXControlFile возвращает STATUS_SUCCESS, то подпрограмма выполнена успешно. Любое другое возвращаемое значение указывает на то, что произошла ошибка.

Подпрограмма MRxFlush вызывается RDBSS для запроса на запись содержимого объекта файловой системы в хранилище сетевым мини-перенаправителем. RDBSS выполняет этот вызов в ответ на получение запроса IRP_MJ_FLUSH_BUFFERS .

MRxFlush обрабатывает сетевые запросы на очистку файлов.

RDBSS вызывает подпрограмму MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK], чтобы запросить, чтобы сетевой мини-перенаправитель открыл монопольную блокировку объекта файла.

RDBSS вызывает MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] в ответ на получение запроса IRP_MJ_LOCK_CONTROL с дополнительным кодом IRP_MN_LOCK если для IrpSp-Flags> задан бит SL_EXCLUSIVE_LOCK.

Перед вызовом MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK], RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext :

Для элемента LowIoContext.Operation задано значение LOWIO_OP_EXCLUSIVELOCK.

Для элемента LowIoContext.ResourceThreadId задается поток процесса, который инициировал операцию в RDBSS.

Члену LowIoContext.ParamsFor.Locks.ByteOffset присваивается значение IrpSp-Parameters.LockControl.ByteOffset.QuadPart>.

Члену LowIoContext.ParamsFor.Locks.Key присваивается значение IrpSp-Parameters.LockControl.Key>.

Члену LowIoContext.ParamsFor.Locks.Flags присваивается значение IrpSp-Flags>.

Элементу LowIoContext.ParamsFor.Locks.Length присваивается значение IrpSp-Parameters.LockControl.Length.QuadPart>.

Элемент LowIoContext.Operation структуры RX_CONTEXT указывает операцию ввода-вывода с низким уровнем. Некоторые подпрограммы с низким уровнем ввода-вывода могут указывать на одну и ту же подпрограмму в сетевом мини-перенаправлении, так как этот член LowIoContext.Operation можно использовать для различения запрашиваемой операции ввода-вывода с низким уровнем. Например, все вызовы ввода-вывода, связанные с блокировкой файлов, могут вызывать одну и ту же подпрограмму низкого уровня ввода-вывода в сетевом мини-перенаправлении, и эта подпрограмма может использовать член LowIoContext.Operation для различения запрошенной операции блокировки и разблокировки.

Если выполнение подпрограммы MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] может занять много времени, драйвер сетевого мини-перенаправления должен освободить структуру FCB перед началом сетевого взаимодействия. Структуру FCB можно освободить, вызвав RxReleaseFcbResourceForThreadInMRx. Пока обрабатывается подпрограмма MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] , элемент LowIoContext.ResourceThreadId RX_CONTEXT гарантированно указывает поток процесса, который инициировал операцию в RDBSS.

Член LowIoContext.ResourceThreadId RX_CONTEXT можно использовать для освобождения структуры FCB от имени другого потока. После завершения асинхронной процедуры можно освободить структуру FCB, полученную из исходного потока.

Подпрограмма MRxLowIOSubmit[LOWIO_OP_FSCTL] вызывается RDBSS для запроса на выдачу запроса на управление файловой системой удаленного файла сетевым мини-перенаправлением.

RDBSS вызывает MRxLowIOSubmit[LOWIO_OP_FSCTL] в ответ на получение запроса IRP_MJ_FILE_SYSTEM_CONTROL .

Перед вызовом MRxLowIOSubmit[LOWIO_OP_FSCTL], RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext :

Член LowIoContext.Operation имеет значение LOWIO_OP_FSCTL.

Для элемента LowIoContext.ResourceThreadId задается поток процесса, который инициировал операцию в RDBSS.

Элементу LowIoContext.ParamsFor.FsCtl.FsControlCode присваивается основной код элемента управления FSCTL.

Элементу LowIoContext.ParamsFor.FsCtl.MinorFunction присваивается дополнительный код элемента управления FSCTL.

Для элемента LowIoContext.ParamsFor.FsCtl.pInputBuffer задан входной буфер.

Член LowIoContext.ParamsFor.FsCtl.InputBufferLength имеет длину входного буфера.

Для элемента LowIoContext.ParamsFor.FsCtl.pOutputBuffer задан выходной буфер.

Член LowIoContext.ParamsFor.FsCtl.OutputBufferLength имеет длину выходного буфера.

Запросы кода управления файловой системой (FSCTL), обрабатываемые сетевым мини-перенаправлением, можно разделить на одну из нескольких категорий:

  • Списки FSCTL, реализованные и используемые RDBSS и мини-перенаправителем сети

  • Списки FSCTL, реализованные и используемые только сетевым мини-перенаправлением

  • Списки FSCTL, которые никогда не должны быть замечены мини-перенаправлением сети. Эти FSCTL предназначены исключительно для отладки.

Пока обрабатывается подпрограмма MRxLowIOSubmit[LOWIO_OP_FSCTL] , элемент LowIoContext.ResourceThreadId RX_CONTEXT гарантированно указывает поток процесса, который инициировал операцию в RDBSS. Элемент LowIoContext.ResourceThreadId RX_CONTEXT можно использовать для освобождения входного ресурса от имени другого потока. После завершения асинхронной подпрограммы можно освободить входной ресурс, полученный из начального потока.

Подпрограмма MRxLowIOSubmit[LOWIO_OP_IOCTL] вызывается RDBSS для выдачи запроса системы управления вводом-выводом к сетевому мини-перенаправлению.

RDBSS вызывает MRxLowIOSubmit[LOWIO_OP_IOCTL] в ответ на получение запросов IRP_MJ_DEVICE_CONTROL или IRP_MJ_INTERNAL_DEVICE_CONTROL .

Перед вызовом MRxLowIOSubmit[LOWIO_OP_IOCTL], RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext :

Для элемента LowIoContext.Operation задано значение LOWIO_OP_IOCTL.

Для элемента LowIoContext.ResourceThreadId задается поток процесса, который инициировал операцию в RDBSS.

Элементу LowIoContext.ParamsFor.IoCtl.IoControlCode присваивается код элемента управления IOCTL.

Элементу LowIoContext.ParamsFor.IoCtl.pInputBuffer присваивается входной буфер.

Член LowIoContext.ParamsFor.IoCtl.InputBufferLength имеет длину входного буфера.

Для элемента LowIoContext.ParamsFor.IoCtl.pOutputBuffer задается выходной буфер.

Член LowIoContext.ParamsFor.IoCtl.OutputBufferLength имеет длину выходного буфера.

Пока обрабатывается подпрограмма MRxLowIOSubmit[LOWIO_OP_IOCTL] , член LowIoContext.ResourceThreadId RX_CONTEXT гарантированно указывает поток процесса, который инициировал операцию в RDBSS. Элемент LowIoContext.ResourceThreadId RX_CONTEXT можно использовать для освобождения входного ресурса от имени другого потока. После завершения асинхронной подпрограммы можно освободить входной ресурс, полученный из начального потока.

Подпрограмма MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] вызывается RDBSS для отправки запроса к сетевому мини-перенаправлению для операции уведомления об изменении каталога.

RDBSS вызывает MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] в ответ на получение запроса IRP_MJ_DIRECTORY_CONTROL .

Перед вызовом MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY], RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext :

Для элемента LowIoContext.Operation задано значение LOWIO_OP_NOTIFY_CHANGE_DIRECTORY.

Для элемента LowIoContext.ResourceThreadId задается поток процесса, который инициировал операцию в RDBSS.

Элемент LowIoContext.ParamsFor.NotifyChangeDirectory.WatchTree имеет значение TRUE, если для IrpSp-Flags> задан бит SL_WATCH_TREE.

Член LowIoContext.ParamsFor.NotifyChangeDirectory.CompletionFilter имеет значение IrpSp-Parameters.NotifyDirectory.CompletionFilter>.

Член LowIoContext.ParamsFor.NotifyChangeDirectory.NotificationBufferLength имеет значение IrpSp-Parameters.NotifyDirectory.Length>.

Члену LowIoContext.ParamsFor.NotifyChangeDirectory.pNotificationBuffer присваивается значение, возвращаемое путем вызова MmGetSystemAddressForMdlSafe, передавая Irp-MdlAddress> и NormalPagePriority. Буфер пользователя также проверяется и блокируется для доступа на запись.

Операция уведомления об изменении каталога обычно реализуется сетевым мини-перенаправлением как асинхронная операция, так как она может занять значительное время. Операция обычно состоит в отправке сетевого запроса на удаленный сервер с запросом уведомления об изменении. Ответ получается при изменении на сервере. Это пример операции, для которой мини-перенаправлению сети может потребоваться зарегистрировать уникальное значение контекста для обработки отмен, инициированных локально.

Пока обрабатывается подпрограмма MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] , элемент LowIoContext.ResourceThreadId RX_CONTEXT гарантированно указывает поток процесса, который инициировал операцию в RDBSS. Член LowIoContext.ResourceThreadId можно использовать для освобождения структуры FCB от имени другого потока. После завершения асинхронной процедуры можно освободить структуру FCB, полученную из исходного потока. Структуру FCB можно освободить, вызвав RxReleaseFcbResourceForThreadInMRx.

Подпрограмма MRxLowIOSubmit[LOWIO_OP_READ] вызывается RDBSS для выдачи запроса на чтение к сетевому мини-перенаправлению.

RDBSS вызывает MRxLowIOSubmit[LOWIO_OP_READ] в ответ на получение запроса IRP_MJ_READ .

Перед вызовом MRxLowIOSubmit[LOWIO_OP_READ], RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext :

Для элемента LowIoContext.Operation задано значение LOWIO_OP_READ.

Для элемента LowIoContext.ResourceThreadId задается поток процесса, который инициировал операцию в RDBSS.

Члену LowIoContext.ParamsFor.ReadWrite.Key присваивается значение IrpSp-Parameters.Read.Key>.

В элементе ParamsFor.ReadWrite.Flags задан бит LOWIO_READWRITEFLAG_PAGING_IO, если в Irp-Flags> включен бит IRP_PAGING_IO.

Член ParamsFor.ReadWrite.Buffer имеет значение буфер пользователя, заблокированный для IoReadAccess.

Члену LowIoContext.ParamsFor.ReadWrite.ByteCount присваивается значение IrpSp-Parameters.Read.Length>.

Запрос на чтение обычно реализуется сетевым мини-перенаправителем как асинхронная операция, так как это может занять значительное время. Операция обычно состоит из отправки сетевого запроса на удаленный сервер. Ответ получается по завершении запроса на чтение на сервере. Это пример операции, для которой мини-перенаправлению сети может потребоваться зарегистрировать контекст для обработки отмен, инициированных локально.

Пока обрабатывается подпрограмма MRxLowIOSubmit[LOWIO_OP_READ] , элемент LowIoContext.ResourceThreadId RX_CONTEXT гарантированно указывает поток процесса, который инициировал операцию в RDBSS. Член LowIoContext.ResourceThreadId можно использовать для освобождения структуры FCB от имени другого потока. После завершения асинхронной процедуры можно освободить структуру FCB, полученную из исходного потока. Структуру FCB можно освободить, вызвав RxReleaseFcbResourceForThreadInMRx.

Подпрограмма MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] вызывается RDBSS для запроса на открытие перенаправителя сети общей блокировки файлового объекта.

RDBSS вызывает MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] в ответ на получение запроса IRP_MJ_LOCK_CONTROL с дополнительным кодом IRP_MN_LOCK, если irpSp-Flags> не имеет SL_EXCLUSIVE_LOCK бита.

Перед вызовом MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK], RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext :

Для элемента LowIoContext.Operation задано значение LOWIO_OP_SHAREDLOCK.

Для элемента LowIoContext.ResourceThreadId задается поток процесса, который инициировал операцию в RDBSS.

Члену LowIoContext.ParamsFor.Locks.ByteOffset присваивается значение IrpSp-Parameters.LockControl.ByteOffset.QuadPart>.

Члену LowIoContext.ParamsFor.Locks.Key присваивается значение IrpSp-Parameters.LockControl.Key>.

Члену LowIoContext.ParamsFor.Locks.Flags присваивается значение IrpSp-Flags>.

Элементу LowIoContext.ParamsFor.Locks.Length присваивается значение IrpSp-Parameters.LockControl.Length.QuadPart>.

Элемент LowIoContext.Operation структуры RX_CONTEXT указывает операцию ввода-вывода с низким уровнем. Некоторые подпрограммы с низким уровнем ввода-вывода могут указывать на одну и ту же подпрограмму в сетевом мини-перенаправлении, так как член LowIoContext.Operation можно использовать для дифференцировки запрашиваемой операции ввода-вывода с низким уровнем. Например, все вызовы ввода-вывода, связанные с блокировкой файлов, могут вызывать одну и ту же подпрограмму низкого уровня ввода-вывода в сетевом мини-перенаправлении, и эта подпрограмма может использовать член LowIoContext.Operation для различения запрошенной операции блокировки и разблокировки.

Если выполнение подпрограммы MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] может занять много времени, драйвер сетевого мини-перенаправления должен освободить структуру FCB, прежде чем инициировать сетевое взаимодействие. Структуру FCB можно освободить, вызвав RxReleaseFcbResourceForThreadInMRx. Пока обрабатывается подпрограмма MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] , элемент LowIoContext.ResourceThreadId RX_CONTEXT гарантированно указывает поток процесса, инициирующего операцию в RDBSS.

Элемент LowIoContext.ResourceThreadId структуры RX_CONTEXT можно использовать для освобождения структуры FCB от имени другого потока. После завершения асинхронной процедуры можно освободить структуру FCB, полученную из исходного потока.

Подпрограмма MRxLowIOSubmit[LOWIO_OP_UNLOCK] вызывается RDBSS для запроса на то, чтобы сетевой мини-перенаправитель удалял одну блокировку объекта файла.

RDBSS вызывает MRxLowIOSubmit[LOWIO_OP_UNLOCK] в ответ на получение запроса IRP_MJ_LOCK_CONTROL с дополнительным кодом IRP_MN_UNLOCK_SINGLE.

Перед вызовом MRxLowIOSubmit[LOWIO_OP_UNLOCK], RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext :

Для элемента LowIoContext.Operation задано значение LOWIO_OP_UNLOCK.

Для элемента LowIoContext.ResourceThreadId задается поток процесса, который инициировал операцию в RDBSS.

Члену LowIoContext.ParamsFor.Locks.ByteOffset присваивается значение IrpSp-Parameters.LockControl.ByteOffset.QuadPart>.

Члену LowIoContext.ParamsFor.Locks.Key присваивается значение IrpSp-Parameters.LockControl.Key>.

Элементу LowIoContext.ParamsFor.Locks.Length присваивается значение IrpSp-Parameters.LockControl.Length.QuadPart>.

Элемент LowIoContext.Operation структуры RX_CONTEXT указывает операцию ввода-вывода с низким уровнем. Некоторые подпрограммы с низким уровнем ввода-вывода могут указывать на одну и ту же подпрограмму в сетевом мини-перенаправлении, так как этот член LowIoContext.Operation можно использовать для различения запрашиваемой операции ввода-вывода с низким уровнем. Например, все вызовы ввода-вывода, связанные с блокировкой файлов, могут вызывать одну и ту же подпрограмму низкого уровня ввода-вывода в сетевом мини-перенаправлении, и эта подпрограмма может использовать член LowIoContext.Operation для различения запрошенной операции блокировки и разблокировки.

Если выполнение процедуры MRxLowIOSubmit[LOWIO_OP_UNLOCK] может занять много времени, драйвер сетевого мини-перенаправления должен освободить структуру FCB перед началом сетевого взаимодействия. Структуру FCB можно освободить, вызвав RxReleaseFcbResourceForThreadInMRx. Пока обрабатывается подпрограмма MRxLowIOSubmit[LOWIO_OP_UNLOCK] , член LowIoContext.ResourceThreadId RX_CONTEXT гарантированно указывает поток процесса, который инициировал операцию в RDBSS.

Член LowIoContext.ResourceThreadId RX_CONTEXT можно использовать для освобождения структуры FCB от имени другого потока. После завершения асинхронной процедуры можно освободить структуру FCB, полученную из исходного потока.

Подпрограмма MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] вызывается RDBSS для запроса на то, чтобы сетевой мини-перенаправитель удалил несколько блокировок, удерживаемых на объекте файла.

RDBSS вызывает MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] в ответ на получение запроса IRP_MJ_LOCK_CONTROL с дополнительным кодом IRP_MN_UNLOCK_ALL или IRP_MN_UNLOCK_ALL_BY_KEY.

Перед вызовом MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE], RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext :

Для элемента LowIoContext.Operation задано значение LOWIO_OP_UNLOCK_MULTIPLE.

Для элемента LowIoContext.ResourceThreadId задается поток процесса, который инициировал операцию в RDBSS.

Для элемента LowIoContext.ParamsFor.Locks.LockList задан список LOWIO_LOCK_LIST элементов. Каждый элемент задает диапазон для разблокировки.

Разблокированные диапазоны байтов указываются в элементе LowIoContext.ParamsFor.Locks.LockList структуры RX_CONTEXT. Структура LOWIO_LOCK_LIST выглядит следующим образом:

typedef struct _LOWIO_LOCK_LIST {
  struct  _LOWIO_LOCK_LIST  *Next;
  ULONG  LockNumber;
  RXVBO  ByteOffset;
  LONGLONG  Length;
  ULONG  Key;
  BOOLEAN  ExclusiveLock;
} LOWIO_LOCK_LIST, *PLOWIO_LOCK_LIST;

Элемент LowIoContext.Operation RX_CONTEXT указывает операцию низкой производительности ввода-вывода. Некоторые подпрограммы с низким уровнем ввода-вывода могут указывать на одну и ту же подпрограмму в сетевом мини-перенаправлении, так как член LowIoContext.Operation можно использовать для дифференцировки запрашиваемой операции ввода-вывода с низким уровнем. Например, все вызовы ввода-вывода, связанные с блокировкой файлов, могут вызывать одну и ту же подпрограмму низкого уровня ввода-вывода в сетевом мини-перенаправлении, и эта подпрограмма может использовать член LowIoContext.Operation для различения запрошенной операции блокировки и разблокировки.

Если выполнение процедуры MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] может занять много времени, драйвер сетевого мини-перенаправителя должен освободить структуру FCB, прежде чем инициировать сетевое взаимодействие. Структуру FCB можно освободить, вызвав RxReleaseFcbResourceForThreadInMRx. Пока обрабатывается подпрограмма MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] , элемент LowIoContext.ResourceThreadId RX_CONTEXT гарантированно указывает поток процесса, который инициировал операцию в RDBSS.

Член LowIoContext.ResourceThreadId RX_CONTEXT можно использовать для освобождения структуры FCB от имени другого потока. После завершения асинхронной процедуры можно освободить структуру FCB, полученную из исходного потока.

Подпрограмма MRxLowIOSubmit[LOWIO_OP_WRITE] вызывается RDBSS для отправки запроса на запись к сетевому мини-перенаправлению.

RDBSS вызывает MRxLowIOSubmit[LOWIO_OP_WRITE] в ответ на получение запроса IRP_MJ_WRITE .

Перед вызовом MRxLowIOSubmit[LOWIO_OP_WRITE], RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext :

Для элемента LowIoContext.Operation задано значение LOWIO_OP_WRITE.

Для элемента LowIoContext.ResourceThreadId задается поток процесса, который инициировал операцию в RDBSS.

Члену LowIoContext.ParamsFor.ReadWrite.Key присваивается значение IrpSp-Parameters.Read.Key>.

В элементе ParamsFor.ReadWrite.Flags задан бит LOWIO_READWRITEFLAG_PAGING_IO, если в Irp-Flags> включен бит IRP_PAGING_IO.

Член ParamsFor.ReadWrite.Buffer имеет значение буфер пользователя, заблокированный для IoWriteAccess.

Члену LowIoContext.ParamsFor.ReadWrite.ByteCount присваивается значение IrpSp-Parameters.Write.Length>.

Запрос на запись обычно реализуется сетевым мини-перенаправителем как асинхронная операция, так как это может занять значительное время. Операция обычно состоит из отправки сетевого запроса на удаленный сервер. Ответ получается при выполнении запроса на запись на сервере. Это пример операции, для которой мини-перенаправлению сети может потребоваться зарегистрировать контекст для обработки отмен, инициированных локально.

Пока обрабатывается подпрограмма MRxLowIOSubmit[LOWIO_OP_WRITE] , член LowIoContext.ResourceThreadId RX_CONTEXT гарантированно указывает поток процесса, который инициировал операцию в RDBSS. Член LowIoContext.ResourceThreadId можно использовать для освобождения структуры FCB от имени другого потока. После завершения асинхронной процедуры можно освободить структуру FCB, полученную из исходного потока. Структуру FCB можно освободить, вызвав RxReleaseFcbResourceForThreadInMRx.

Подпрограмма MRxQueryDirectory вызывается RDBSS для запроса сетевого мини-перенаправителя сведений о каталоге файлов.

Перед вызовом MRxQueryDirectory RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext :

Член Info.FileInformationClass имеет значение IrpSp-Parameters.QueryDirectory.FileInformationClass>.

Для элемента Info.Buffer задан буфер пользователя из пакета запроса ввода-вывода. При необходимости этот буфер уже заблокирован службой RDBSS.

Для элемента Info.LengthRemaining задано значение IrpSp-Parameters.QueryDirectory.Length>.

Элемент QueryDirectory.FileIndex имеет значение IrpSp-Parameters.QueryDirectory.FileIndex>.

Для элемента QueryDirectory.RestartScan задано ненулевое значение, если для IrpSp-Flags> включен бит SL_RESTART_SCAN.

Элемент QueryDirectory.ReturnSingleEntry имеет ненулевое значение, если для IrpSp-Flags> включен бит SL_RETURN_SINGLE_ENTRY.

Элемент QueryDirectory.IndexSpecified имеет ненулевое значение, если для IrpSp-Flags> включен бит SL_INDEX_SPECIFIED.

Элемент QueryDirectory.InitialQuery имеет значение ненулевое, если элемент UnicodeQueryTemplate.Buffer связанного FOBX имеет значение NULL, а элемент Flags foBX не имеет бита FOBX_FLAG_MATCH_ALL.

Для дикого запроса карта (например, ".") RDBSS задает член ЮникодаQueryTemplate.Buffer связанного FOBX в качестве дикого карта переданного запроса.

Если элемент PostRequest структуры RX_CONTEXT имеет значение TRUE при возврате из MRxQueryDirectory, то RDBSS вызовет RxFsdPostRequest , передав структуру RX_CONTEXT в рабочую очередь для обработки процессом файловой системы (FSP).

Подпрограмма MRxQueryEaInfo вызывается RDBSS для запроса запроса сетевого мини-перенаправителя сведений о расширенном атрибуте в объекте файловой системы.

RDBSS отправляет вызов MRxQueryEaInfo в ответ на получение запроса IRP_MJ_QUERY_EA .

Перед вызовом MRxQueryEaInfo RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext :

Для элемента Info.Buffer задается буфер пользователя из пакета запроса ввода-вывода. При необходимости этот буфер уже заблокирован службой RDBSS.

Для элемента Info.LengthRemaining задано значение IrpSp-Parameters.QueryEa.Length>.

Элемент QueryEa.UserEaList имеет значение IrpSp-Parameters.QueryEa.EaList>.

Элемент QueryEa.UserEaListLength имеет значение IrpSp-Parameters.QueryEa.EaListLength>.

Элемент QueryEa.UserEaIndex имеет значение IrpSp-Parameters.QueryEa.EaIndex>.

Для элемента QueryEa.RestartScan задано ненулевое значение, если для IrpSp-Flags> включен бит SL_RESTART_SCAN.

Элемент QueryEa.ReturnSingleEntry имеет ненулевое значение, если для IrpSp-Flags> включен бит SL_RETURN_SINGLE_ENTRY.

Элемент QueryEa.IndexSpecified имеет ненулевое значение, если для флагов IrpSp-Flags> включен бит SL_INDEX_SPECIFIED.

При успешном выполнении MRxQueryEaInfo должен задать для элемента Info.LengthRemaininging структуры RX_CONTEXT длину возвращаемых сведений о расширенных атрибутах, а также обновить член Fobx-OffsetOfNextEaToReturn>. Если вызов MRxQueryEaInfo был успешным, RDBSS устанавливает для элемента IoStatus.Information IRP значение IrpSp-Parameters.QueryEa.Length> за вычетом элемента Info.LengthRemaining RX_CONTEXT.

Подпрограмма MRxQueryFileInfo вызывается RDBSS для запроса запроса сетевого мини-перенаправления сведений о файле к объекту файловой системы.

RDBSS отправляет вызов MRxQueryFileInfo в ответ на получение запроса IRP_MJ_QUERY_INFORMATION .

Перед вызовом MRxQueryFileInfo RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext :

Для элемента Info.FileInformationClass задано значение IrpSp-Parameters.QueryFile.FileInformationClass>, запрошенное значение FILE_INFORMATION_CLASS.

Для элемента Info.Buffer задается буфер пользователя из пакета запроса ввода-вывода.

Для элемента Info.LengthRemaining задано значение IrpSp-Parameters.QueryFile.Length>.

Элемент QueryDirectory.FileIndex имеет значение IrpSp-Parameters.QueryDirectory.FileIndex>.

Элемент QueryDirectory.RestartScan задается, если для IrpSp-Flags> задан бит SL_RESTART_SCAN.

Элемент QueryDirectory.ReturnSingleEntry задается, если IrpSp-Flags> имеет SL_RETURN_SINGLE_ENTRY бит.

Элемент QueryDirectory.InitialQuery задается, если Fobx-UnicodeQueryTemplate.Buffer> имеет значение NULL и Fobx-Flags> не имеет FOBX_FLAG_MATCH_ALL бита.

При успешном выполнении сетевой мини-перенаправитель должен задать для элемента Info.LengthRemaining структуры RX_CONTEXT значение Info.Length за вычетом длины возвращаемых сведений о файле. Если вызов MRxQueryFileInfo был выполнен успешно, RDBSS устанавливает для элемента IoStatus.Information IRP значение IrpSp-Parameters.QueryFile.Length> минус элемент Info.LengthRemaining RX_CONTEXT.

RDBSS не поддерживает запросы с SL_INDEX_SPECIFIED битом набора IrpSp-Flags>. Сетевой мини-перенаправитель не будет принимать вызовы к MRxQueryFileInfo с SL_INDEX_SPECIFIED битом IrpSp-Flags>.

Подпрограмма MRxQueryQuotaInfo вызывается RDBSS для запроса сетевого мини-перенаправления сведений о квоте объекта файловой системы.

RDBSS отправляет вызов MRxQueryQuotaInfo в ответ на получение запроса IRP_MJ_QUERY_QUOTA .

Перед вызовом MRxQueryQuotaInfo RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext :

Для элемента Info.Buffer задан буфер пользователя из пакета запроса ввода-вывода. При необходимости этот буфер уже заблокирован службой RDBSS.

Для элемента Info.LengthRemaining задано значение IrpSp-Parameters.QueryQuota.Length>.

Для элемента QueryQuota.SidList задано значение IrpSp-Parameters.QueryQuota.SidList>.

Элемент QueryQuota.SidListLength имеет значение IrpSp-Parameters.QueryQuota.SidListLength>.

Для элемента QueryQuota.StartSid задано значение IrpSp-Parameters.QueryQuota.StartSid>.

Для элемента QueryQuota.Length задано значение IrpSp-Parameters.QueryQuota.Length>.

Для элемента QueryQuota.RestartScan задано ненулевое значение, если для IrpSp-Flags> задан бит SL_RESTART_SCAN.

Для элемента QueryQuota.ReturnSingleEntry задано ненулевое значение, если для IrpSp-Flags> задан бит SL_RETURN_SINGLE_ENTRY.

Элемент QueryQuota.IndexSpecified имеет ненулевое значение, если для IrpSp-Flags> задан бит SL_INDEX_SPECIFIED.

При успешном выполнении сетевой мини-перенаправитель должен задать для элемента Info.LengthRemaining структуры RX_CONTEXT длину возвращаемых сведений о квоте. Если вызов MRxQueryQuotaInfo был выполнен успешно, RDBSS присваивает элементу IoStatus.Information IRP значение Info.LengthRemaining элемента RX_CONTEXT.

Если вызов MRxQueryQuotaInfo выполнен успешно, для элемента InformationToReturn структуры RX_CONTEXT следует задать длину возвращаемых сведений о квоте. Если вызов не выполнен, элемент InformationToReturn RX_CONTEXT должен иметь нулевое значение.

Подпрограмма MRxQuerySdInfo вызывается RDBSS для запроса запроса сетевого мини-перенаправителя сведений о дескрипторе безопасности объекта файловой системы.

RDBSS отправляет вызов MRxQuerySdInfo в ответ на получение запроса IRP_MJ_QUERY_SECURITY .

Перед вызовом MRxQuerySdInfo RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext :

Для элемента QuerySecurity.SecurityInformation задано значение IrpSp-Parameters.QuerySecurity.SecurityInformation>.

Для элемента Info.Buffer задан буфер пользователя из пакета запроса ввода-вывода. При необходимости этот буфер уже заблокирован службой RDBSS.

Для элемента Info.LengthRemaining задано значение IrpSp-Parameters.QuerySecurity.Length>.

При успешном выполнении сетевой мини-перенаправитель должен задать для элемента InformationToReturn структуры RX_CONTEXT длину возвращаемых сведений о безопасности. Если вызов MRxQuerySdInfo был выполнен успешно, RDBSS задает элемент IoStatus.Information IRP в значение InformationToReturn элемента RX_CONTEXT.

Подпрограмма MRxQueryVolumeInfo вызывается RDBSS для запроса сведений о томе сетевого мини-перенаправителя.

RDBSS выполняет вызов MRxQueryVolumeInfo в любом из следующих случаев:

Перед вызовом MRxQueryVolumeInfo в случае запроса IRP_MJ_QUERY_VOLUME_INFORMATION RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext :

Член Info.FsInformationClass имеет значение IrpSp-Parameters.QueryVolume.FsInformationClass>.

Для элемента Info.Buffer задано значение Irp-AssociatedIrp.SystemBuffer>.

Для элемента Info.LengthRemaining задано значение IrpSp-Parameters.QueryVolume.Length>.

Для IRP_MJ_QUERY_VOLUME_INFORMATION запроса, если элемент PostRequest структуры RX_CONTEXT имеет значение TRUE при возврате из MRxQueryVolumeInfo, RDBSS вызовет RxFsdPostRequest для отправки запроса. В этом случае запрос IRP_MJ_QUERY_VOLUME_INFORMATION передает структуру RX_CONTEXT в очередь RX_CONTEXT в очередь рабочей роли для обработки процессом файловой системы (FSP).

Если элемент PostRequest структуры RX_CONTEXT имеет значение FALSE при возврате из MRxQueryVolumeInfo, сетевой мини-перенаправитель должен задать для элемента Info.LengthRemaining структуры RX_CONTEXT длину возвращаемых сведений о томе. RDBSS задает для элемента IoStatus.Information IRP значение IrpSp-Parameters.QueryVolume.Length> за вычетом элемента Info.LengthRemaining структуры RX_CONTEXT.

Если вызов MRxQueryVolumeInfo выполнен успешно, сетевой мини-перенаправитель должен задать элемент Info.LengthRemaining структуры RX_CONTEXT на элемент Info.Length за вычетом длины возвращаемых сведений о томе. Если вызов MRxQueryVolumeInfo был выполнен успешно, RDBSS устанавливает элемент IoStatus.Information IRP в значение IrpSp-Parameters.QueryVolume.Length> за вычетом элемента Info.LengthRemaining структуры RX_CONTEXT.

Для запроса IRP_MJ_QUERY_VOLUME_INFORMATION с элементом Info.FsInformationClass , равным FileFsDeviceInformation, сетевой мини-перенаправитель возвращает следующие сведения в структуре RX_CONTEXT, на которую указывает параметр RxContext :

Элемент Info.Buffer содержит структуру FILE_FS_DEVICE_INFORMATION

Для элемента Info.Buffer.Characteristics заданы характеристики тома, которые должны включать FILE_REMOTE_DEVICE в качестве одного из параметров.

Элементу Info.Buffer.DeviceType присваивается элемент DeviceType связанной структуры NET_ROOT. Если элемент Type связанного NET_ROOT имеет значение NET_ROOT_PIPE, то для элемента Info.Buffer.DeviceType задано значение FILE_DEVICE_NAMED_PIPE.

Для запроса IRP_MJ_QUERY_VOLUME_INFORMATION с элементом Info.FsInformationClass , равным FileFsVolumeInformation, сетевой мини-перенаправитель возвращает следующие сведения в структуре RX_CONTEXT, на которую указывает параметр RxContext :

Элемент Info.Buffer содержит FILE_FS_VOLUME_INFORMATION структуру.

Для элемента Info.Buffer устанавливается элемент VolumeInfo связанной структуры NET_ROOT.

Для элемента Info.LengthRemaining устанавливается элемент VolumeInfoLength связанной структуры NET_ROOT.

Вызов MRxQueryVolumeInfo из RDBSS для IRP_MJ_FILE_SYSTEM_CONTROL — это запрос сведений об отслеживании ссылок. Перед вызовом MRxQueryVolumeInfo для IRP_MJ_FILE_SYSTEM_CONTROL RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext :

Член Info.FsInformationClass имеет значение FileFsObjectIdInformation.

Член Info.Buffer имеет FILE_FS_OBJECTID_INFORMATION структуру.

Для элемента Info.LengthRemaining задано значение sizeof(FILE_FS_OBJECTID_INFORMATION).

Для этого запроса IRP_MJ_FILE_SYSTEM_CONTROL элемент AssociatedIrp.SystemBuffer IRP указывает на LINK_TRACKING_INFORMATION структуру.

Если запрос инициируется как IRP_MJ_FILE_SYSTEM_CONTROL в MRxQueryVolumeInfo с возвращаемым значением STATUS_SUCCESS или STATUS_BUFFER_OVERFLOW, RDBSS копирует элемент ObjectId структуры FILE_FS_OBJECTID_INFORMATION, переданный в элементе Info.Buffer структуры RX_CONTEXT, в элемент NetRoot-DiskParameters.VolumeId> структуры FCB и в элемент AssociatedIrp.SystemBuffer.VolumeId IRP. Если вызов MRxQueryVolumeInfo был выполнен успешно, RDBSS задает элемент Type структуры LINK_TRACKING_INFORMATION. Если для элемента NetRoot-Flags> структуры FCB задан бит NETROOT_FLAG_DFS_AWARE_NETROOT, для элемента Type RDBSS устанавливается значение DfsLinkTrackingInformation. Если элемент NetRoot-Flags> структуры FCB не имеет битового NETROOT_FLAG_DFS_AWARE_NETROOT, rDBSS задает для элемента Typeзначение NtfsLinkTrackingInformation. При успешном выполнении RDBSS устанавливает для элемента IoStatus.Information IRP размер LINK_TRACKING_INFORMATION структуры.

Подпрограмма MRxSetEaInfo вызывается RDBSS , чтобы запросить, чтобы сетевой мини-перенаправитель установил расширенные сведения о атрибуте для объекта файловой системы.

RDBSS отправляет вызов MRxSetEaInfo в ответ на получение запроса IRP_MJ_SET_EA .

Перед вызовом MRxSetEaInfo RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext :

Для элемента Info.Buffer задается буфер пользователя из пакета запроса ввода-вывода. При необходимости этот буфер уже заблокирован службой RDBSS.

Для элемента Info.LengthRemaining задано значение IrpSp-Parameters.QueryEa.Length>.

Подпрограмма MRxSetFileInfo вызывается RDBSS , чтобы запросить, чтобы сетевой мини-перенаправитель установил сведения о файлах в объекте файловой системы.

RDBSS отправляет вызов MRxSetFileInfo в ответ на получение запроса IRP_MJ_SET_INFORMATION .

Перед вызовом MRxSetFileInfo RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext :

Для элемента Info.FileInformationClass задано значение IrpSp-Parameters.SetFile.FileInformationClass>, указанное FILE_INFORMATION_CLASS значение.

Для элемента Info.Buffer задано значение Irp-AssociatedIrp.SystemBuffer>.

Для элемента Info.Length задано значение IrpSp-Parameters.SetFile.Length>.

Подпрограмма MRxSetFileInfoAtCleanup вызывается RDBSS , чтобы запросить, чтобы сетевой мини-перенаправитель задал сведения о файлах в объекте файловой системы при очистке.

RDBSS выполняет вызов MRxSetFileInfoAtCleanup во время очистки при закрытии последнего дескриптора объекта файла. Это отличается от операции закрытия, которая вызывается при удалении последней ссылки на файловый объект.

MRxSetFileInfoAtCleanup вызывается RDBSS, если изменились метки времени в файле или его размер. Вызовы MRxSetFileInfoAtCleanup от RDBSS выполняются отдельно для каждого из этих изменений. Если размер файла и метки времени изменились, RDBSS выполняет два вызова MRxSetFileInfoAtCleanup.

Перед вызовом MRxSetFileInfoAtCleanup RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext , если метки времени в файле изменились:

Члену Info.FileInformationClass присваивается FILE_INFORMATION_CLASS значение FileBasicInformation.

Член Info.Buffer имеет FILE_BASIC_INFORMATION структуру, выделенную в стеке.

Член Info.Length имеет размер FILE_BASIC_INFORMATION структуры.

Перед вызовом MRxSetFileInfoAtCleanup RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext , если размер файла изменился:

Члену Info.FileInformationClass присваивается FILE_INFORMATION_CLASS значение FileEndOfFileInformation.

Для элемента Info.Buffer задана FILE_END_OF_FILE_INFORMATION структура, выделенная в стеке.

Для элемента Info.Length задано значение sizeof(FILE_END_OF_FILE_INFORMATION).

RDBSS игнорирует возвращаемое значение из MRxSetFileInfoAtCleanup.

Сетевой мини-перенаправление может ничего не делать в этой процедуре и возвращать STATUS_SUCCESS. Любые изменения размера файла или меток времени будут обрабатываться во время операции очистки.

Подпрограмма MRxSetQuotaInfo вызывается RDBSS для запроса на установку сведений о квоте сетевого мини-перенаправителя для объекта файловой системы.

RDBSS отправляет вызов MRxSetQuotaInfo в ответ на получение запроса IRP_MJ_SET_QUOTA .

Перед вызовом MRxSetQuotaInfo RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext :

Для элемента Info.Buffer задается буфер пользователя из пакета запроса ввода-вывода. При необходимости этот буфер уже заблокирован службой RDBSS.

Для элемента Info.LengthRemaining задано значение IrpSp-Parameters.SetQuota.Length>.

Подпрограмма MRxSetSdInfo вызывается RDBSS для запроса на то, чтобы сетевой мини-перенаправитель установил сведения о дескрипторе безопасности для объекта файловой системы.

RDBSS отправляет вызов MRxSetSdInfo в ответ на получение запроса IRP_MJ_SET_SECURITY .

Перед вызовом MRxSetSdInfo RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext :

Для элемента SetSecurity.SecurityInformation задано значение IrpSp-Parameters.SetSecurity.SecurityInformation>.

Для элемента SetSecurity.SecurityDescriptor задано значение IrpSp-Parameters.SetSecurity.SecurityDescriptor>.

Подпрограмма MRxSetVolumeInfo вызывается RDBSS , чтобы запросить, чтобы сетевой мини-перенаправитель установил сведения о томе.

RDBSS отправляет вызов MRxSetVolumeInfo в ответ на получение запроса IRP_MJ_SET_VOLUME_INFORMATION .

Перед вызовом MRxSetVolumeInfo RDBSS изменяет следующие элементы в структуре RX_CONTEXT, на которую указывает параметр RxContext :

Член Info.FsInformationClass имеет значение IrpSp-Parameters.SetVolume.FsInformationClass>.

Для элемента Info.Buffer задано значение Irp-AssociatedIrp.SystemBuffer>.

Для элемента Info.LengthRemaining задано значение IrpSp-Parameters.SetVolume.Length>.

RDBSS вызывает подпрограмму MRxShouldTryToCollapseThisOpen, чтобы запросить, чтобы сетевой мини-перенаправитель указал, следует ли RDBSS попытаться свернуть открытый запрос на существующий объект файловой системы.

Вызывается MRxShouldTryToCollapseThisOpen , чтобы определить, не следует ли свернуть открытый запрос.

Перед вызовом MRxShouldTryToCollapseThisOpen RDBSS изменяет следующий элемент в структуре RX_CONTEXT, на которую указывает параметр RxContext :

Элемент pRelevantSrvOpen имеет значение SRV_OPEN.

Вызов MRxShouldTryToCollapseThisOpen может быть запросом уведомления об изменении для каталога. Поэтому мини-перенаправитель сети может не разрешать свертывание открытых запросов, чтобы уведомление об изменениях работало правильно.

RDBSS запрещает свертывание, если элемент Create.NtCreateParameters.CreateOptions структуры RX_CONTEXT имеет параметр FILE_OPEN_FOR_BACKUP_INTENT или FILE_DELETE_ON_CLOSE.

Подпрограмма MRxTruncate вызывается RDBSS для запроса на усечение содержимого объекта файловой системы сетевым мини-перенаправлением.

MRxTruncate вызывается в рамках операций очистки, если выполняются оба следующих условия:

  • Объект file соответствует файлу диска или каталогу

  • Это последний вызов очистки, и объект файла был помечен для усечения.

Файловый объект помечается для усечения, если член fcbstate структуры FCB имеет FCB_STATE_TRUNCATE_ON_CLOSE бит. RDBSS не инициализирует карту кэша позже.

За вызовом MRxTruncate следует вызов MRxCleanupFobx в рамках операции очистки.

RDBSS игнорирует возвращаемое значение из MRxTruncate.

Подпрограмма MRxZeroExtend вызывается RDBSS для запроса на усечение содержимого объекта файловой системы сетевым мини-перенаправлением.

MRxZeroExtend вызывается в рамках операций очистки, если объект файла не был помечен для удаления и файловый объект не является файлом подкачки. Вызывается MRxZeroExtend , чтобы обеспечить нулевое расширение части между допустимой длиной данных и размером файла. После вызова MRxZeroExtend RDBSS задает элемент Header.ValidDataLength.QuadPart структуры FCB, равный элементу Header.FileSize.QuadPart структуры FCB.

За вызовом MRxZeroExtend следует вызов MRxCleanupFobx в рамках операции очистки.

RDBSS игнорирует возвращаемое значение из MRxZeroExtend.

Подпрограмма MRxCleanupFobx вызывается RDBSS для запроса сетевого мини-перенаправления на закрытие расширения объекта файловой системы. RDBSS выполняет этот вызов в ответ на получение запроса IRP_MJ_CLEANUP к объекту файла.

MRxCleanupFobx вызывается RDBSS в рамках операций очистки и закрытия файлового объекта.

MRxCleanupFobx не может вернуть значение STATUS_RETRY указывающее, что вызов необходимо выполнить повторно. Если требуется цикл повторных попыток, он должен обрабатываться внутренне в подпрограмме MRxCleanupFobx сетевым мини-перенаправлением.

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть mrx.h (включая Mrx.h)

См. также раздел

MRxAreFilesAliased

MRxCleanupFobx

MRxCollapseOpen

MRxCreate

MRxDeallocateForFobx

MRxDeallocateForFobx

MRxExtendForCache

MRxExtendForNonCache

MRxFlush

MRxForceClosed

MRxIsLockRealizable

MRxShouldTryToCollapseThisOpen

MRxTruncate

MRxZeroExtend

RxFinalizeNetFCB