驅動程式註冊和啟動/停止控制
當作業系統啟動時,Windows 會根據登錄中的設定載入 RDBSS 和任何網路迷你重新導向器驅動程式。 對於以靜態方式與 rdbsslib.lib 連結的整合型網路迷你重新導向器驅動程式,驅動程式必須從其DriverEntry常式呼叫RxDriverEntry常式,以初始化與網路驅動程式連結的 RDBSSLIB 程式庫複本。 在此情況下,必須先呼叫 RxDriverEntry 常式,才能呼叫及使用任何其他 RDBSS 常式。 對於非整合型網路迷你重新導向器驅動程式, (Microsoft SMB 重新導向器) ,載入時,rdbss.sys設備磁碟機會在自己的 DriverEntry 常式中初始化。
當核心載入驅動程式時,網路迷你重新導向器會向 RDBSS 註冊,並在卸載驅動程式時向 RDBSS 取消註冊。 網路迷你重新導向器會通知 RDBSS,其已透過呼叫 RxRegisterMinirdr來載入,這是從 RDBSS 匯出的註冊常式。 在此註冊程式中,網路迷你重新導向器會將參數傳遞至 RxRegisterMinirdr ,這是大型結構的指標,MINIRDR_DISPATCH。 此結構包含網路迷你重新導向器的組態資訊,以及網路迷你重新導向器核心驅動程式所實作回呼常式的分派資料表。 RDBSS 會透過這個回呼常式清單呼叫網路迷你重新導向器驅動程式。
RxRegisterMinirdr常式會設定網路迷你重新導向器驅動程式的所有驅動程式分派常式,以指向最上層 RDBSS 分派常式RxFsdDispatch。 網路迷你重新導向器可以儲存自己的進入點,並在呼叫 RxRegisterMinirdr 時設定特殊參數,以自己的進入點重寫驅動程式分派,或藉由在呼叫 RxRegisterMinirdr時設定特殊參數來覆寫此行為。
網路迷你重新導向器驅動程式在收到 MRxStart 常式的呼叫之前不會實際啟動作業,這是在MINIRDR_DISPATCH結構中傳遞的其中一個回呼常式。 如果想要接收作業的回呼常式,網路迷你重新導向器驅動程式必須實作 MrxStart 回呼常式,除非網路迷你重新導向器保留自己的驅動程式分派進入點。 否則,RDBSS 將只允許下列 I/O 要求封包傳送至驅動程式,直到 MrxStart 成功傳回為止:
- 裝置的 IRP 要求會建立和裝置作業,其中 IRPSP 上的 FileObject-FileName.Length > 為零,而 FileObject-RelatedFileObject > 為 Null。
對於任何其他 IRP 要求,RDBSS 分派常式 RxFsdDispatch 會傳回STATUS_REDIRECTOR_NOT_STARTED的狀態。
RDBSS 分派常式也會失敗下列 I/O 要求封包的任何要求:
IRP_MJ_CREATE_MAILSLOT
IRP_MJ_CREATE_NAMED_PIPE
呼叫RxStartMinirdr常式時,RDBSS 會呼叫網路迷你重新導向器所實作的MrxStart回呼常式。 RDBSS RxStartMinirdr 常式通常稱為檔案系統控制項程式碼, (FSCTL) 或 I/O 控制程式碼, (IOCTL) 使用者模式應用程式或服務的要求來啟動網路迷你重新導向器。 在成功呼叫 RxRegisterMinirdr 之後,無法從網路迷你重新導向器的 DriverEntry 常式呼叫 RxRegisterMinirdr進行,因為某些開始處理需要完成驅動程式初始化。 收到 RxStartMinirdr 呼叫之後,RDBSS 會藉由呼叫網路迷你重新導向器的 MrxStart 常式來完成啟動程式。 如果 呼叫 MrxStart 傳回成功,RDBSS 會將 RDBSS 中迷你重新導向器的內部狀態設定為RDBSS_STARTED。
RDBSS 會匯出常式 RxSetDomainForMailslotBroadcast,以設定 mailslot 廣播的網域。 如果網路迷你重新導向器支援 mailslot,此常式會在註冊期間使用。
RDBSS 所匯出的便利常式 __RxFillAndInstallFastIoDispatch可用來複製所有IRP_MJ_XXX驅動程式常式指標,以處理可比較快速 I/O 分派向量的 I/O 要求處理,但此常式僅適用于非整合型驅動程式。
RDBSS 也會匯出常式,以通知 RDBSS 網路迷你重新導向器正在啟動或停止。 如果網路迷你重新導向器包含啟動和停止重新導向器的使用者模式管理服務或公用程式應用程式,則會使用這些呼叫。 此使用者模式服務或應用程式可以將自訂 FSCTL 或 IOCTL 要求傳送至網路迷你重新導向器驅動程式,以指出應該啟動或停止。 重新導向器可以呼叫 RDBSS RxStartMinirdr 或 RxStopMinirdr 常式,以通知 RDBSS 啟動或停止此網路迷你重新導向器。
下表列出 RDBSS 驅動程式註冊和啟動/停止控制常式。
常式傳回的值 | 描述 |
---|---|
此常式是由整合型網路迷你重新導向器驅動程式從其 DriverEntry 常式呼叫,以初始化 RDBSS。 對於非整合型驅動程式,此初始化常式相當於rbss.sys設備磁碟機的 DriverEntry 常式。 |
|
此常式是由網路迷你重新導向器驅動程式呼叫,以向 RDBSS 註冊驅動程式,這會將註冊資訊新增至內部註冊資料表。 RDBSS 也會為網路迷你重新導向器建置裝置物件。 |
|
如果驅動程式支援 mailslot,網路迷你重新導向器驅動程式會呼叫此常式來設定用於 mailslot 廣播的網域。 |
|
此常式會啟動網路迷你重新導向器,以呼叫 以自行註冊。 如果驅動程式指出 UNC 名稱支援,RDBSS 也會向 MUP 註冊網路迷你重新導向器驅動程式作為 UNC 提供者。 |
|
此常式會停止網路迷你重新導向器驅動程式。 除了 IOCTL 或 FSCTL 要求之外,已停止的驅動程式將不再收到新的命令。 |
|
此常式是由網路迷你重新導向器驅動程式呼叫,以向 RDBSS 取消註冊驅動程式,並從內部 RDBSS 註冊資料表中移除註冊資訊。 |
|
此常式是在 rxstruc.h 中定義的內嵌函式,由網路迷你重新導向器驅動程式呼叫,以向 RDBSS 取消註冊驅動程式,並從內部 RDBSS 註冊資料表中移除註冊資訊。 RxUnregisterMinirdr內嵌函式會在內部呼叫RxpUnregisterMinirdr。 |
|
此常式會填入快速 I/O 分派向量,使其與一般分派 I/O 向量相同,並將它安裝到與所傳遞裝置物件相關聯的驅動程式物件中。 |
下列巨集定義于呼叫其中一個常式的 mrx.h 標頭檔中。 此宏通常用來取代直接呼叫 __RxFillAndInstallFastIoDispatch 常式。
巨集 | 描述 |
---|---|
RxFillAndInstallFastIoDispatch (__devobj, __fastiodisp) |
此宏會呼叫 __RxFillAndInstallFastIoDispatch,以填入快速 I/O 分派向量,使其與一般分派 I/O 向量相同,並將它安裝到與傳遞之裝置物件相關聯的驅動程式物件中。 |