Функция 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
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
В системах X86 64K — это самая большая запись, которая будет выдаваться диспетчером памяти при выполнении разбиения на страницы (очистки кэша будут разбиения по страницам через диспетчер памяти). Для удаленных файловой системы 64K не является лучшим выбором. Большинство данных, которые могут быть переданы в одном сетевом запросе TDI, будут меньше 64K из-за затрат на сведения о протоколе.
В Windows Server 2003 значение реестра для задания ReadAheadGranularity не предоставляется, а RDBSS по умолчанию — 32K (8 4 КБ PAGE_SIZE страниц). Это то же значение по умолчанию, принятое для локальных систем файлов.
RxDriverEntry извлекает указатель на процесс ядра, который выполняется путем вызова PsGetCurrentProcess и сохраняет это значение во внутренней структуре данных RDBSS. Этот процесс ядра иногда называется процессом файловой системы.
RxDriverEntry затем копирует указатель на процедуру RxFsdDispatch по всем записям в таблице отправки драйвера. Таким образом, если драйвер мини-перенаправления сети монолитной сети должен получать определенные irPs для специальной обработки перед библиотекой RDBSS, то перед вызовом
Для драйвера мини-перенаправления сети (перенаправления Microsoft SMB) драйвер устройства RDBSS.SYS инициализируется в собственной процедуре DriverEntry при загрузке, которая внутренне вызывает RxDriverEntry. В монолитном драйвере подпрограмма RxDriverEnt ry экспортируется из RDBSSLIB. Статическая библиотека LIB и должна вызываться явным образом мини-перенаправлением сети.
Требования
Требование | Ценность |
---|---|
целевая платформа | Настольный |
заголовка | rxprocs.h (include Rxprocs.h) |
IRQL | <= APC_LEVEL |