Функция RxDriverEntry (rxprocs.h)

RxDriverEntry вызывается монолитным драйвером мини-перенаправления сети из подпрограммы DriverEntry для инициализации статической библиотеки RDBSS.

Для не монолитных драйверов эта подпрограмма инициализации эквивалентна подпрограмме DriverEntry драйвера RDBSS.SYS устройства.

Синтаксис

NTSTATUS RxDriverEntry(
  [in] IN PDRIVER_OBJECT  DriverObject,
  [in] IN PUNICODE_STRING RegistryPath
);

Параметры

[in] DriverObject

Указатель на объект драйвера сетевого мини-перенаправления. Каждый драйвер получает указатель на свой объект драйвера в параметре своей подпрограммы DriverEntry . Этот объект драйвера будет использоваться для создания объекта устройства для драйвера сетевого мини-перенаправления.

[in] RegistryPath

Указатель на строку Юникода, содержащую путь к реестру, где хранятся параметры драйвера и другие данные конфигурации. Этот путь реестра обычно находится в записи служб для конкретного сетевого мини-перенаправителя, расположенного в разделе HKLM\System\CurrentControlSet\Services .

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

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

Код возврата Описание
RXINIT_START Была запущена инициализация RDBSS, но произошла ошибка. Этот код ошибки представляет собой внутреннее перечисление RDBSS со значением 5.

Комментарии

Монолитный драйвер мини-перенаправления сети, статически связанный с RDBSSLIB. Lib должен вызвать RxDriverEntry из своей подпрограммы DriverEntry , чтобы инициализировать копию библиотеки RDBSSLIB, связанной с драйвером. RxDriverEntry должен вызываться драйвером монолитного сетевого мини-перенаправления перед вызовом любых других подпрограмм RDBSS.

После вызова RxDriverEntry для инициализации копии библиотеки RDBSS в начале процедуры DriverEntry драйвер сетевого мини-перенаправления обычно вызывает RxRegisterMinirdr позже в своей подпрограмме DriverEntry для регистрации в RDBSS.

Если вызов RxDriverEntry выполнен успешно, инициализируются внутренние глобальные структуры данных RDBBS. Для защиты этих структур данных создаются различные спин-блокировки и мьютексы. Одной из таких структур данных является структура RDBSS_DATA, которая является верхней структурой в структуре данных RDBSS-memory. Параметр DriverObject хранится в элементе DriverObject структуры RDBSS_DATA. RxDriverEntry также инициализирует трассировку, ведение журнала и отладку, если это включено (например, проверенная сборка).

RxDriverEntry также попытается открыть путь к реестру, переданный в качестве параметра RegistryPath , рассматривая этот объект как строку без учета регистра. Если этот раздел реестра может быть успешно открыт, будет предпринята попытка открыть раздел реестра Parameters под этой записью.

RxDriverEntry также попытается открыть раздел реестра HKLM\System\CurrentControlSet\Services\LanmanWorkStation\Parameters .

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

В Windows XP и более поздних версий RxDriverEntry попытается открыть значение DisableByteRangeLockingOnReadOnlyFiles в разделе LanmanWorkStation\Parameters .

Это значение является DWORD, которое обрабатывается как логическое значение и хранится как логическое значение для DisableByteRangeLockingOnReadOnlyFiles, переменной RDBSS для обработки блокировки диапазона байтов только для чтения файлов. Эта переменная влияет на то, как RDBSS обрабатывает новый запрос SRV_OPEN от сетевого мини-перенаправления на FCB и решает, можно ли свернуть его на существующий SRV_OPEN если атрибуты совместимы. Если драйвер сетевого мини-перенаправления хочет изменить это поведение, драйвер должен задать для параметра DisableByteRangeLockingOnReadOnlyFiles соответствующее значение после возврата подпрограммы RxDriverEntry . The RDBSSLIB. Статическая библиотека LIB предоставляет DisableByteRangeLockingOnReadOnlyFiles в качестве внешней переменной.

В Windows 2000 и Windows XP RxDriverEntry попытается открыть значение ReadAheadGranularity в разделе LanmanWorkStation\Parameters .

Это значение представляет собой DWORD, которое обрабатывается как число и сохраняется как значение для внутреннего параметра RDBSS по количеству PAGE_SIZE страниц для чтения, используемых диспетчером кэша. Любое значение реестра больше 16 обрабатывается так, как если бы это значение было ограничено 16 (максимально допустимое значение в настоящее время). Этот внутренний параметр хранится в виде количества страниц, в течение которых PAGE_SIZE на процессоре (например, не более 0x10000 или 64 КБ для PAGE_SIZE 4 КБ). В Windows 2000 и Windows XP RDBSS вызывает CcSetReadAheadGranularity с этим параметром для различных операций создания, чтения и записи. Если драйвер сетевого мини-перенаправления хочет изменить это поведение, драйвер должен задать для параметра ReadAheadGranularity соответствующее значение после возврата подпрограммы RxDriverEntry . The RDBSSLIB. Статическая библиотека LIB предоставляет ReadAheadGranularity в качестве внешней переменной.

В системах X86 64K — это самая большая запись, которая будет выдаваться диспетчером памяти при выполнении записи по страницам (записи кэша будут выполняться с помощью диспетчера памяти). Для удаленных файловой системы 64K — не лучший выбор. Большинство данных, которые можно передать в одном сетевом запросе TDI, будет меньше 64 КБ из-за накладных расходов на сведения о протоколе.

В Windows Server 2003 значение реестра для задания ReadAheadGranularity не предоставляется, а RDBSS по умолчанию имеет значение 32 КБ (8 4 КБ PAGE_SIZE страниц). Это то же значение по умолчанию, что и для локальных файлов.

RxDriverEntry получает указатель на выполняемый процесс ядра путем вызова PsGetCurrentProcess и сохраняет это значение во внутренней структуре данных RDBSS. Этот процесс ядра иногда называют процессом файловой системы.

Затем RxDriverEntry копирует указатель на подпрограмму RxFsdDispatch для всех записей в таблице диспетчеризации драйверов. Таким образом, если драйверу монолитного сетевого мини-перенаправления необходимо получить определенные irP для специальной обработки перед библиотекой RDBSS, то перед вызовом RxDriverEntry необходимо сохранить копию исходной таблицы диспетчеризации драйверов и восстановить все обычные указатели после возврата вызова RxDriverEntry . Обратите внимание, что RDBSS также копирует RxFsdDispatch во все записи таблицы диспетчеризации драйверов при вызове RxRegisterMinirdr , если не задан параметр для предотвращения такого поведения.

Для драйвера не монолитного сетевого мини-перенаправления (перенаправления Microsoft SMB) драйвер устройства RDBSS.SYS инициализируется в собственной подпрограмме DriverEntry при загрузке, которая вызывает RxDriverEntry. В монолитном драйвере подпрограмма RxDriverEntry экспортируется из RDBSSLIB. Статическая библиотека LIB и должна вызываться явным образом сетевым мини-перенаправлением.

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть rxprocs.h (включая Rxprocs.h)
IRQL <= APC_LEVEL

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

CcSetReadAheadGranularity

PsGetCurrentProcess

RxRegisterMinirdr

RxSetDomainForMailslotBroadcast

RxStartMinirdr

RxStopMinirdr

RxUnregisterMinirdr

RxpUnregisterMinirdr

__RxFillAndInstallFastIoDispatch