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 库的副本。 RxDriverEntry 必须先由单一网络微型重定向程序驱动程序调用,然后才能调用任何其他 RDBSS 例程。

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

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

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

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

如果可以打开此密钥,将尝试根据操作系统的版本读取此密钥下的一些值。

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

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

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

此值是一个 DWORD,它被视为数字,并存储为缓存管理器提前使用的读取PAGE_SIZE页数上的内部 RDBSS 选项的值。 任何大于 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 重定向程序),当加载 RxDriverEntry时,RDBSS.SYS设备驱动程序会在其自己的 DriverEntry 例程中初始化。 在整体驱动程序上,从 RDBSSLIB 导出 RxDriverEntry 例程。LIB 静态库,必须由网络微型重定向程序显式调用。

要求

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

另请参阅

CcSetReadAheadGranularity

PsGetCurrentProcess

RxRegisterMinirdr

RxSetDomainForMailslotBroadcast

RxStartMinirdr

RxStopMinirdr

RxUnregisterMinirdr

RxpUnregisterMinirdr

__RxFillAndInstallFastIoDispatch