RxDriverEntry 函数 (rxprocs.h)

RxDriverEntry 由整体网络微型重定向程序驱动程序从其 DriverEntry 例程调用,以初始化 RDBSS 静态库。

对于非整体驱动程序,此初始化例程等效于 RDBSS.SYS 设备驱动程序的 DriverEntry 例程。

语法

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

参数

[in] DriverObject

指向网络微型重定向程序驱动程序的驱动程序对象的指针。 每个驱动程序在指向其 DriverEntry 例程的参数中接收指向其驱动程序对象的指针。 此驱动程序对象将用于为网络微型重定向程序驱动程序创建设备对象。

[in] RegistryPath

指向 Unicode 字符串的指针,其中包含存储驱动程序参数和其他配置数据的注册表路径。 此注册表路径通常位于 HKLM\System\CurrentControlSet\Services 密钥下的特定网络微型重定向程序的服务条目下。

返回值

RxDriverEntry 在成功时返回STATUS_SUCCESS,或在失败时返回以下错误值之一:

返回代码 说明
RXINIT_START RDBSS 的初始化已启动,但出现错误。 此错误代码是值为 5 的内部 RDBSS 枚举。

注解

与 RDBSSLIB 静态链接的单体网络微型重定向程序驱动程序。LIB 必须从其 DriverEntry 例程调用 RxDriverEntry ,以初始化与驱动程序链接的 RDBSSLIB 库的副本。 在调用任何其他 RDBSS 例程之前,必须由整体式网络微型重定向程序驱动程序调用 RxDriverEntry

在调用 RxDriverEntry 以在其 DriverEntry 例程开始附近初始化 RDBSS 库的副本后,网络微型重定向程序驱动程序通常会在其 DriverEntry 例程中稍后调用 RxRegisterMinirdr,以向 RDBSS 注册。

如果 RxDriverEntry 调用成功,则初始化内部全局 RDBBS 数据结构。 创建各种旋转锁和互斥体来保护这些数据结构。 其中一个数据结构是RDBSS_DATA结构,它是 RDBSS 内存数据结构中的顶层结构。 DriverObject 参数存储在 RDBSS_DATA 结构的 DriverObject 成员中。 RxDriverEntry 还会初始化跟踪、日志记录和调试(例如) ) (启用此功能。

RxDriverEntry 还将尝试打开作为 RegistryPath 参数传递的注册表路径,并将此对象视为不区分大小写的字符串。 如果此注册表项可以成功打开,则会尝试打开此条目下方的参数注册表项。

RxDriverEntry 还将尝试打开 HKLM\System\CurrentControlSet\Services\LanmanWorkStation\Parameters 注册表项。

如果此键可以打开,则将尝试读取此键下的一些值,具体取决于操作系统的版本。

在 Windows XP 及更高版本上,RxDriverEntry 将尝试在 LanmanWorkStation\Parameters 键下打开 DisableByteRangeLockingOnReadOnlyFiles 值。

此值是一个 DWORD,它被视为布尔值,并存储为 DisableByteRangeLockingOnlyFiles 的布尔值,这是一个 RDBSS 变量,用于处理只读文件上的字节范围锁定。 此变量影响 RDBSS 如何处理 FCB 上的网络微型重定向程序处理新的SRV_OPEN请求,并决定是否可以将其折叠到现有SRV_OPEN(如果属性兼容)。 如果网络微型重定向程序驱动程序想要更改此行为,则在 RxDriverEntry 例程返回后,驱动程序应将 DisableByteRangeLockingOnReadOnlyFiles 的值设置为适当的值。 RDBSSLIB。LIB 静态库将 DisableByteRangeLockingOnReadOnlyFiles 公开为外部变量。

在 Windows 2000 和 Windows XP 上,RxDriverEntry 将尝试在 LanmanWorkStation\Parameters 键下打开 ReadAheadGranularity 值。

此值是一个 DWORD,它被视为数字,并存储为内部 RDBSS 选项的值,用于缓存管理器预先读取的PAGE_SIZE页数。 任何大于 16 的注册表值都被视为将此值限制为 16 (当前允许的最大值) 。 此内部选项存储为处理器上PAGE_SIZE的页数, (4K PAGE_SIZE最多0x10000或 64K,例如) 。 在 Windows 2000 和 Windows XP 上,RDBSS 使用此选项调用 CcSetReadAheadGranularity ,用于各种创建、读取和写入操作。 如果网络微型重定向程序驱动程序想要更改此行为,则在 RxDriverEntry 例程返回后,驱动程序应将 ReadAheadGranularity 的值设置为适当的值。 RDBSSLIB。LIB 静态库将 ReadAheadGranularity 公开为外部变量。

在 X86 系统上,64K 是内存管理器在发出分页写入时将发出的最大写入 (缓存刷新将通过内存管理器) 分页写入。 对于远程文件系统,64K 不是最佳选择。 由于协议信息开销,单个 TDI 网络请求中可以传输的大多数数据将小于 64K。

在 Windows Server 2003 上,不公开用于设置 ReadAheadGranularity 的注册表值,RDBSS 默认为 32K (8 4K PAGE_SIZE页) 。 这与本地文件系统采用的默认值相同。

RxDriverEntry 通过调用 PsGetCurrentProcess 检索指向正在运行的内核进程的指针,并将此值存储在内部 RDBSS 数据结构中。 此内核进程有时称为文件系统进程。

然后,RxDriverEntry 将指向驱动程序调度表中所有条目的 RxFsdDispatch 例程的指针。 因此,如果整体式网络微型重定向程序驱动程序需要在 RDBSS 库之前接收用于特殊处理的特定 IRP,则应在调用 RxDriverEntry 之前保存其原始驱动程序调度表的副本,并在调用 RxDriverEntry 后还原的任何例程指针。 请注意,除非设置了阻止此行为的选项,否则在调用 RxRegisterMinirdr 时,RDBSS 还会将 RxFsdDispatch 复制到所有驱动程序调度表条目。

对于非整体式网络微型重定向程序驱动程序 (Microsoft SMB 重定向程序) ,RDBSS.SYS 设备驱动程序在加载(内部调用 RxDriverEntry)时,会在其自身的 DriverEntry 例程中初始化。 在整体驱动程序上,从 RDBSSLIB 导出 RxDriverEntry 例程。LIB 静态库 和 必须由网络微型重定向程序显式调用。

要求

要求
目标平台 桌面
标头 rxprocs.h (包括 Rxprocs.h)
IRQL <= APC_LEVEL

另请参阅

CcSetReadAheadGranularity

PsGetCurrentProcess

RxRegisterMinirdr

RxSetDomainForMailslotBroadcast

RxStartMinirdr

RxStopMinirdr

RxUnregisterMinirdr

RxpUnregisterMinirdr

__RxFillAndInstallFastIoDispatch