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,或在失敗時傳回下列其中一個錯誤值:

傳回碼 Description
RXINIT_START RDBSS 的初始化已啟動,但發生錯誤。 此錯誤碼是值為 5 的內部 RDBSS 列舉。

備註

整合型網路迷你重新導向器驅動程式,以靜態方式與 RDBSSLIB 連結。LIB 必須從其 DriverEntry 例程呼叫 RxDriverEntry,以初始化與驅動程序連結的 RDBSSLIB 連結庫複本。 在呼叫任何其他 RDBSS 例程之前,必須先由整合型網路迷你重新導向器驅動程式呼叫 RxDriverEntry

呼叫 RxDriverEntry 以在其 DriverEntry 例程開始附近初始化 RDBSS 連結庫的複本之後,網路迷你重新導向器驅動程式通常會在其 DriverEntry 例程稍後呼叫 RxRegisterMinirdr,以向 RDBSS 註冊。

如果 RxDriverEntry 呼叫成功,則會初始化內部全域 RDBBS 數據結構。 系統會建立各種微調鎖定和 Mutex 來保護這些數據結構。 其中一個數據結構是RDBSS_DATA結構,這是 RDBSS 記憶體數據結構中的最上層結構。 DriverObject 參數會儲存在 RDBSS_DATA 結構的 DriverObject 成員中。 RxDriverEntry 也會在核取的組建 (啟用,初始化追蹤、記錄和偵錯,例如) 。

RxDriverEntry 也會嘗試開啟傳遞為 RegistryPath 參數的登錄路徑,將此對象視為不區分大小寫的字串。 如果成功開啟此登錄機碼,則會嘗試在此專案下方開啟Parameters登錄機碼。

RxDriverEntry 也會嘗試開啟 HKLM\System\CurrentControlSet\Services\LanmanWorkStation\Parameters 登錄機碼。

如果可以開啟此金鑰,則會根據操作系統的版本,嘗試讀取此機碼下的一些值。

在 Windows XP 和更新版本上,RxDriverEntry 會嘗試在 LanmanWorkStation\Parameters 機碼下開啟 DisableByteRangeLockingOnReadOnlyFiles 值。

這個值是 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 之後還原的任何例程指標。 請注意,除非已設定選項以防止此行為,否則 RDBSS 也會在呼叫 RxRegisterMinirdr 時,將 RxFsdDispatch 複製到所有驅動程式分派數據表專案。

若為非整合型網路迷你重新導向器驅動程式, (Microsoft SMB 重新導向器) ,RDBSS.SYS 裝置驅動程式會在載入時,在內部呼叫 RxDriverEntry 時,在自己的 DriverEntry 例程中初始化。 在整合型驅動程式上, RxDriverEntry 例程會從 RDBSSLIB 導出。LIB 靜態庫,而且必須由網路迷你重新導向器明確呼叫。

規格需求

需求
目標平台 桌面
標頭 rxprocs.h (包含 Rxprocs.h)
IRQL <= APC_LEVEL

另請參閱

CcSetReadAheadGranularity

PsGetCurrentProcess

RxRegisterMinirdr

RxSetDomainForMailslotBroadcast

RxStartMinirdr

RxStopMinirdr

RxUnregisterMinirdr

RxpUnregisterMinirdr

__RxFillAndInstallFastIoDispatch