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


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

RxDriverEntry вызывается драйвером мини-перенаправления сети монолитной сети из подпрограммы DriverEntry 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 DriverEntry, чтобы инициализировать копию библиотеки RDBSSLIB, связанной с драйвером. RxDriverEntry необходимо вызвать драйвером мини-перенаправления сети монолитной сети перед вызовом других подпрограмм RDBSS.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Требования

Требование Ценность
целевая платформа Настольный
заголовка rxprocs.h (include Rxprocs.h)
IRQL <= APC_LEVEL

См. также

CcSetReadAheadGranularity

PsGetCurrentProcess

RxRegisterMinirdr

RxSetDomainForMailslotBroadcast

RxStartMinirdr

RxStopMinirdr

RxUnregisterMinirdr

RxpUnregisterMinirdr

__RxFillAndInstallFastIoDispatch