PMRX_CALLDOWN回呼函式 (mrx.h)
RDBSS 會呼叫此回呼,要求網路迷你重新導向器根據提供的 IRP 執行動作。
語法
PMRX_CALLDOWN PmrxCalldown;
NTSTATUS PmrxCalldown(
[in, out] IN OUT PRX_CONTEXT RxContext
)
{...}
參數
[in, out] RxContext
RX_CONTEXT 結構的指標。 此參數包含要求作業的 IRP。
傳回值
此回呼會在成功或適當的NTSTATUS值上傳回STATUS_SUCCESS,例如:
傳回碼 | Description |
---|---|
STATUS_ACCESS_DENIED | 已提出停止或啟動網路迷你重新導向器的要求,但呼叫端缺少此作業的適當安全性。 |
STATUS_BUFFER_OVERFLOW | 接收擴充屬性信息的緩衝區太小。 這個傳回值應該視為成功,而且應該盡可能在 RxContext 參數所指向之RX_CONTEXT結構的 Info.Buffer 成員中傳回有效的數據。 |
STATUS_BUFFER_TOO_SMALL | 緩衝區太小,無法接收要求的數據。 如果傳回這個值,則 RxContext 參數所指向之RX_CONTEXT結構的 InformationToReturn 成員應該設定為預期的緩衝區大小下限,讓呼叫成功。 |
STATUS_CONNECTION_DISCONNECTED | 線上已中斷連線。 |
STATUS_EA_CORRUPT_ERROR | 從遠端伺服器收到無效的擴充屬性資訊。 |
STATUS_EA_TOO_LARGE | 傳遞的擴充屬性資訊大於遠端共用所支援的大小。 |
STATUS_FILE_CLOSED | 已取得FCB結構,但已關閉相關聯的SRV_OPEN結構。 |
STATUS_INSUFFICIENT_RESOURCES | 資源不足,無法完成作業。 |
STATUS_INTERNAL_ERROR | 網路迷你重新導向器發生內部錯誤。 |
STATUS_INVALID_BUFFER_SIZE | 要求的緩衝區大小太大。 |
STATUS_INVALID_DEVICE_REQUEST | 無效的裝置要求已傳送至網路迷你重新導向器。 |
STATUS_INVALID_NETWORK_RESPONSE | 從遠端伺服器收到無效的回應。 |
STATUS_INVALID_PARAMETER | 在 RxContext 中指定了無效的參數。 |
STATUS_LINK_FAILED | 嘗試重新連線到遠端伺服器以完成要求失敗。 |
STATUS_MORE_PROCESSING_REQUIRED | 網路迷你重新導向器會傳回此值,以停用此開啟要求的折疊。 |
STATUS_NETWORK_ACCESS_DENIED | 網路存取遭到拒絕。 如果系統要求網路迷你重新導向器在唯讀共用上開啟新檔案,則可以傳回此錯誤。 |
STATUS_NETWORK_NAME_DELETED | 已刪除網路名稱。 |
STATUS_NONEXISTENT_EA_ENTRY | 檔案對象上沒有擴充屬性,而且使用者提供了擴充屬性索引。 |
STATUS_NOT_IMPLEMENTED | 未實作所要求的功能,例如遠端開機或遠端頁面檔案。 |
STATUS_NOT_SUPPORTED | 不支援要求的功能,例如擴充屬性。 |
STATUS_OBJECT_NAME_COLLISION | 系統要求網路迷你重新導向器建立已經存在的檔案。 |
STATUS_OBJECT_NAME_NOT_FOUND | 找不到物件名稱。 如果系統要求網路迷你重新導向器開啟不存在的檔案,可以傳回此錯誤。 |
STATUS_OBJECT_PATH_NOT_FOUND | 找不到物件路徑。 如果要求NTFS資料流物件,而且遠端檔案系統不支持數據流,則可以傳回此錯誤。 |
STATUS_ONLY_IF_CONNECTED | SRV_OPEN 結構未連接。 |
STATUS_REDIRECTOR_HAS_OPEN_HANDLES | 這是停止網路迷你重新導向器的要求,但重新導向器已開啟句柄,以防止它目前停止。 |
STATUS_REDIRECTOR_NOT_STARTED | 這是停止網路迷你重新導向器的要求,但未啟動重新導向器。 |
STATUS_REDIRECTOR_STARTED | 這是啟動網路迷你重新導向器的要求,但已啟動重新導向器。 |
STATUS_REPARSE | 需要重新分析才能處理符號連結。 |
STATUS_REQUEST_ABORTED | 網路要求已中止。 |
STATUS_RETRY | 應該重試作業。 如果網路迷你重新導向器遇到共用違規或拒絕存取錯誤,則可以傳回此錯誤。 |
STATUS_SHARING_VIOLATION | 發生共享違規。 |
STATUS_UNSUCCESSFUL | 話叫失敗。 |
備註
RDBSS 會呼叫 MRxCloseSrvOpen 例程,要求網路迷你重新導向器關閉SRV_OPEN結構。
MRxCloseSrvOpen 是由 RDBSS 呼叫,做為檔案物件的清除和關閉作業的一部分。 假設網路迷你重新導向器會關閉網路上的檔案。
呼叫 MRxCloseSrvOpen 之前,RDBSS 會修改 RX_CONTEXT 結構中由 RxContext 參數所指向的下列成員:
MajorFunction 設定為 IRP_MJ_CLOSE
pFcb 會設定為要起始關閉處理的FCB結構
pFobx 設定為要起始關閉處理的FOBX結構
當使用者關閉檔案時,RDBSS 和網路迷你重新導向器不一定關閉SRV_OPEN結構。 為了改善在某些情況下的效能,網路迷你重新導向器可能會嘗試重複使用SRV_OPEN和快取的數據,而不需與伺服器連絡。 某些 Microsoft Windows 應用程式會展示開啟、讀取和關閉檔案的行為,然後快速重新開啟相同的檔案。 在這些情況下,重複使用SRV_OPEN結構可以改善效能。
RDBSS 會呼叫 MRxCloseSrvOpen ,以在清除 FOBX 結構時延遲關閉處理。 當關閉處理在預期開啟要求時延遲,而且不會傳回任何開啟的要求時,就會發生這種情況。
MRxCloseSrvOpen 無法傳回值STATUS_RETRY指出應該重試呼叫。 如果需要重試迴圈,網路迷你重新導向器必須在 MRxCloseSrvOpen 例程內部處理。
RDBSS 會呼叫 MRxCollapseOpen 例程,要求網路迷你重新導向器將開放式文件系統要求折疊至現有的SRV_OPEN結構。
RDBSS 會呼叫 MRxCollapseOpen,以在本機折疊SRV_OPEN結構。 系統會諮詢網路迷你重新導向器,以判斷是否可能折疊,因此沒有理由呼叫網路迷你重新導向器兩次。 如果網路迷你重新導向器決定折疊SRV_OPEN結構,則會這麼做並傳回可傳回的狀態。 STATUS_SUCCESS的傳回值是終止的傳回值。 例如,不同的傳回值STATUS_MORE_PROCESSING_REQUIRED會被視為非終止傳回值。
呼叫 MRxCollapseOpen 之前,RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT結構中的下列成員:
pRelevantSrvOpen 設定為要折疊的SRV_OPEN結構。
Create.pSrvCall 會設定為與SRV_OPEN相關聯的SRV_CALL結構。
如果網路迷你重新導向器決定折疊SRV_OPEN結構,則RX_CONTEXT結構的 SrvOpen 成員必須設定為折疊SRV_OPEN結構。
RDBSS 會呼叫MRxCreate 例程,以要求網路迷你重新導向器建立文件系統物件。
RDBSS 會呼叫 MRxCreate,要求網路迷你重新導向器在網路上開啟文件系統物件。 RDBSS 會發出此呼叫,以回應接收 IRP_MJ_CREATE 要求。
呼叫 MRxCreate 之前,RDBSS 會修改 RxContext 參數所指向之 RX_CONTEXT 結構中的下列成員:
pRelevantSrvOpen 設定為 SRV_OPEN 結構。
Create.pSrvCall 會設定為 SRV_CALL 結構。
Create.NtCreateParameters 會設定為所要求的NT_CREATE_PARAMETERS。
在網路迷你重新導向器的內容中,檔案物件是指相關聯的檔案控制區塊, (FCB) 和檔案物件擴展名 (FOBX) 結構。 檔案物件與FOBX之間有一對一的對應。 許多檔案物件都會參考相同的FCB,代表遠端伺服器上的單一檔案。 用戶端可以有數個不同的開啟要求, (NtCreateFile 要求) 在相同的FCB上,而且每個要求都會建立新的檔案物件。 RDBSS 和網路迷你重新導向器可以選擇傳送比收到的 NtCreateFile 要求少的 MRxCreate 要求,實際上在數個 FOBX 之間共用SRV_OPEN結構。
如果 MRxCreate 要求是針對檔案覆寫而 傳回 MRxCreate STATUS_SUCCESS,則 RDBSS 會取得分頁 I/O 資源並截斷檔案。 如果快取管理員正在快取檔案,RDBSS 會更新快取管理員剛從伺服器接收的大小。
傳回之前,MRxCreate 必須設定 RxContext 參數所指向之RX_CONTEXT結構的 CurrentIrp-IoStatus.Information> 成員。
RDBSS 會呼叫 MRxDevFcbXXXControlFile 例程,將裝置 FCB 控制要求傳遞至網路迷你重新導向器 (IOCTL 或 FSCTL) 要求。
MRxDevFcbXXXControlFile 會處理與傳送至網路迷你重新導向器之裝置 FCB 相關的 IOCTL 和 FSCTL 要求。
呼叫 MRxDevFcbXXXControlFile 之前,RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT結構中的下列成員:
MajorFunction 設定為 IRP 的主要函式
如果這是IRP_MJ_FILE_SYSTEM_CONTROL要求,則 RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT結構中的下列成員:
LowIoContext.ParamsFor.FsCtl.MinorFunction 設定為 FSCTL 程式代碼的次要函式程式代碼
LowIoContext.ParamsFor.FsCtl.FsControlCode 已設定為 IRP 的 FSCTL 程式代碼
如果這是IRP_MJ_DEVICE_CONTROL或IRP_MJ_INTERNAL_DEVICE_CONTROL要求,則 RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT結構中的下列成員:
LowIoContext.ParamsFor.FsCtl.FsControlCode 已設定為 IRP 的控制程序代碼。
如果 MRxDevFcbXXXControlFile 傳回STATUS_SUCCESS,則例程成功。 任何其他傳回值都表示發生錯誤。
RDBSS 會呼叫 MRxFlush 例程,要求網路迷你重新導向器將文件系統對象的內容寫入記憶體。 RDBSS 會發出此呼叫,以回應接收 IRP_MJ_FLUSH_BUFFERS 要求。
MRxFlush 會處理檔案排清的網路要求。
RDBSS 會呼叫 MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] 例程,要求網路迷你重新導向器在檔案對象上開啟獨佔鎖定。
RDBSS 會呼叫 MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK],以在 IrpSp-Flags> 有SL_EXCLUSIVE_LOCK位集的情況下,以次要程式代碼IRP_MN_LOCK接收IRP_MJ_LOCK_CONTROL要求。
呼叫 MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK]之前,RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT結構中的下列成員:
LowIoContext.Operation 成員會設定為 LOWIO_OP_EXCLUSIVELOCK。
LowIoContext.ResourceThreadId 成員會設定為在 RDBSS 中起始作業的進程線程。
LowIoContext.ParamsFor.Locks.ByteOffset 成員會設定為 IrpSp-Parameters.LockControl.ByteOffset.QuadPart> 的值。
LowIoContext.ParamsFor.Locks.Key 成員會設定為 IrpSp-Parameters.LockControl.Key> 的值。
LowIoContext.ParamsFor.Locks.Flags 成員會設定為 IrpSp-Flags> 的值。
LowIoContext.ParamsFor.Locks.Length 成員會設定為 IrpSp-Parameters.LockControl.Length.QuadPart> 的值。
RX_CONTEXT 結構的 LowIoContext.Operation 成員會指定要執行的低 I/O 作業。 有數個低 I/O 例程可以指向網路迷你重新導向器中的相同例程,因為這個 LowIoContext.Operation 成員可用來區分要求的低 I/O 作業。 例如,與檔案鎖定相關的所有 I/O 呼叫,都可以在網路迷你重新導向器中呼叫相同的低 I/O 例程,而且該例程可以使用 LowIoContext.Operation 成員來區分要求的鎖定和解除鎖定作業。
如果 MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] 例程可能需要很長的時間才能完成,網路迷你重新導向器驅動程式應該先釋放 FCB 結構,再起始網路通訊。 您可以呼叫 RxReleaseFcbResourceForThreadInMRx 來釋放 FCB 結構。 雖然 MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] 例程正在處理,但RX_CONTEXT的 LowIoContext.ResourceThreadId 成員保證會指出在 RDBSS 中起始作業的進程線程。
RX_CONTEXT的 LowIoContext.ResourceThreadId 成員可用來代表另一個線程釋放 FCB 結構。 異步例程完成時,可以釋放從初始線程取得的FCB結構。
RDBSS 會呼叫 MRxLowIOSubmit[LOWIO_OP_FSCTL] 例程,要求網路迷你重新導向器發出遠端檔案上的文件系統控制要求。
RDBSS 會呼叫 MRxLowIOSubmit[LOWIO_OP_FSCTL] 以回應接收 IRP_MJ_FILE_SYSTEM_CONTROL 要求。
呼叫 MRxLowIOSubmit[LOWIO_OP_FSCTL]之前,RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT結構中的下列成員:
LowIoContext.Operation 成員會設定為 LOWIO_OP_FSCTL。
LowIoContext.ResourceThreadId 成員會設定為在 RDBSS 中起始作業的進程線程。
LowIoContext.ParamsFor.FsCtl.FsControlCode 成員會設定為 FSCTL 主要控制項程式代碼。
LowIoContext.ParamsFor.FsCtl.MinorFunction 成員會設定為 FSCTL 次要控件程式代碼。
LowIoContext.ParamsFor.FsCtl.pInputBuffer 成員會設定為輸入緩衝區。
LowIoContext.ParamsFor.FsCtl.InputBufferLength 成員會設定為輸入緩衝區長度。
LowIoContext.ParamsFor.FsCtl.pOutputBuffer 成員會設定為輸出緩衝區。
LowIoContext.ParamsFor.FsCtl.OutputBufferLength 成員會設定為輸出緩衝區長度。
檔案系統控制程式代碼 (FSCTL) 網路迷你重新導向器所處理的要求,可以分類為數個類別之一:
RDBSS 和網路迷你重新導向器所實作和使用之 FSCTL
僅由網路迷你重新導向器實作及使用的 FSCTL
網路迷你重新導向器不應該看到的 FSCTL。 這些 FSCTL 僅供偵錯輔助之用。
雖然 MRxLowIOSubmit[LOWIO_OP_FSCTL] 例程正在處理,但RX_CONTEXT的 LowIoContext.ResourceThreadId 成員保證會指出在 RDBSS 中起始作業的進程線程。 RX_CONTEXT的 LowIoContext.ResourceThreadId 成員可用來代表另一個線程釋放輸入資源。 異步例程完成時,可以從初始線程取得的輸入資源釋放。
RDBSS 會呼叫 MRxLowIOSubmit[LOWIO_OP_IOCTL] 例程,向網路迷你重新導向器發出 I/O 系統控制要求。
RDBSS 會呼叫 MRxLowIOSubmit[LOWIO_OP_IOCTL] 以回應接收 IRP_MJ_DEVICE_CONTROL 或 IRP_MJ_INTERNAL_DEVICE_CONTROL 要求。
呼叫 MRxLowIOSubmit[LOWIO_OP_IOCTL]之前,RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT結構中的下列成員:
LowIoContext.Operation 成員會設定為 LOWIO_OP_IOCTL。
LowIoContext.ResourceThreadId 成員會設定為在 RDBSS 中起始作業的進程線程。
LowIoContext.ParamsFor.IoCtl.IoControlCode 成員會設定為 IOCTL 控件程式代碼。
LowIoContext.ParamsFor.IoCtl.pInputBuffer 成員會設定為輸入緩衝區。
LowIoContext.ParamsFor.IoCtl.InputBufferLength 成員會設定為輸入緩衝區長度。
LowIoContext.ParamsFor.IoCtl.pOutputBuffer 成員會設定為輸出緩衝區。
LowIoContext.ParamsFor.IoCtl.OutputBufferLength 成員會設定為輸出緩衝區長度。
雖然 MRxLowIOSubmit[LOWIO_OP_IOCTL] 例程正在處理,但RX_CONTEXT的 LowIoContext.ResourceThreadId 成員保證會指出在 RDBSS 中起始作業的進程線程。 RX_CONTEXT的 LowIoContext.ResourceThreadId 成員可用來代表另一個線程釋放輸入資源。 異步例程完成時,可以從初始線程取得的輸入資源釋放。
RDBSS 會呼叫 MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] 例程,向目錄變更通知作業的網路迷你重新導向器發出要求。
RDBSS 會呼叫 MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] 以回應接收 IRP_MJ_DIRECTORY_CONTROL 要求。
呼叫 MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY]之前,RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT結構中的下列成員:
LowIoContext.Operation 成員會設定為 LOWIO_OP_NOTIFY_CHANGE_DIRECTORY。
LowIoContext.ResourceThreadId 成員會設定為在 RDBSS 中起始作業的進程線程。
如果 IrpSp-Flags> 已設定SL_WATCH_TREE位,LowIoContext.ParamsFor.NotifyChangeDirectory.WatchTree 成員會設定為 TRUE。
LowIoContext.ParamsFor.NotifyChangeDirectory.CompletionFilter 成員會設定為 IrpSp-Parameters.NotifyDirectory.CompletionFilter> 的值。
LowIoContext.ParamsFor.NotifyChangeDirectory.NotificationBufferLength 成員會設定為 IrpSp-Parameters.NotifyDirectory.Length> 的值。
LowIoContext.ParamsFor.NotifyChangeDirectory.pNotificationBuffer 成員會藉由呼叫 MmGetSystemAddressForMdlSafe 傳入 Irp-MdlAddress> 和 NormalPagePriority 來設定為傳回的值。 用戶緩衝區也會被探查並鎖定以供寫入存取。
目錄變更通知作業通常是由網路迷你重新導向器實作為異步操作,因為它可能需要相當長的時間。 作業通常包含將網路要求傳送至要求變更通知的遠端伺服器。 當所需的變更在伺服器上受到影響時,就會取得回應。 這是網路迷你重新導向器可能需要註冊唯一內容值來處理在本機起始之取消的作業範例。
雖然 MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] 例程正在處理,但RX_CONTEXT的 LowIoContext.ResourceThreadId 成員保證會指出在 RDBSS 中起始作業的進程線程。 LowIoContext.ResourceThreadId 成員可用來代表另一個線程釋放 FCB 結構。 異步例程完成時,可以釋放從初始線程取得的FCB結構。 您可以呼叫 RxReleaseFcbResourceForThreadInMRx 來釋放 FCB 結構。
RDBSS 會呼叫 MRxLowIOSubmit[LOWIO_OP_READ] 例程,向網路迷你重新導向器發出讀取要求。
RDBSS 會呼叫 MRxLowIOSubmit[LOWIO_OP_READ] 以回應接收 IRP_MJ_READ 要求。
呼叫 MRxLowIOSubmit[LOWIO_OP_READ]之前,RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT結構中的下列成員:
LowIoContext.Operation 成員會設定為 LOWIO_OP_READ。
LowIoContext.ResourceThreadId 成員會設定為在 RDBSS 中起始作業的進程線程。
LowIoContext.ParamsFor.ReadWrite.Key 成員會設定為 IrpSp-Parameters.Read.Key> 的值。
如果 Irp-Flags> 的 IRP_PAGING_IO 位在 上,ParamsFor.ReadWrite.Flags 成員已設定LOWIO_READWRITEFLAG_PAGING_IO位。
ParamsFor.ReadWrite.Buffer 成員會設定為 IoReadAccess 鎖定的用戶緩衝區。
LowIoContext.ParamsFor.ReadWrite.ByteCount 成員會設定為 IrpSp-Parameters.Read.Length> 的值。
讀取要求通常是由網路迷你重新導向器實作為異步操作,因為它可能需要相當長的時間。 作業通常由將網路要求傳送至遠端伺服器所組成。 在伺服器上完成讀取要求時,會取得回應。 這是網路迷你重新導向器可能需要註冊內容來處理在本機起始之取消的作業範例。
雖然 MRxLowIOSubmit[LOWIO_OP_READ] 例程正在處理,但RX_CONTEXT的 LowIoContext.ResourceThreadId 成員保證會指出在 RDBSS 中起始作業的進程線程。 LowIoContext.ResourceThreadId 成員可用來代表另一個線程釋放 FCB 結構。 異步例程完成時,可以釋放從初始線程取得的FCB結構。 您可以呼叫 RxReleaseFcbResourceForThreadInMRx 來釋放 FCB 結構。
RDBSS 會呼叫 MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] 例程,要求網路重新導向器在檔案對象上開啟共享鎖定。
如果 IrpSp-Flags> 沒有設定SL_EXCLUSIVE_LOCK位,RDBSS 會呼叫 MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] 以接收具有次要程式代碼 IRP_MN_LOCK的IRP_MJ_LOCK_CONTROL要求。
呼叫 MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK]之前,RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT結構中的下列成員:
LowIoContext.Operation 成員會設定為 LOWIO_OP_SHAREDLOCK。
LowIoContext.ResourceThreadId 成員會設定為在 RDBSS 中起始作業的進程線程。
LowIoContext.ParamsFor.Locks.ByteOffset 成員會設定為 IrpSp-Parameters.LockControl.ByteOffset.QuadPart> 的值。
LowIoContext.ParamsFor.Locks.Key 成員會設定為 IrpSp-Parameters.LockControl.Key> 的值。
LowIoContext.ParamsFor.Locks.Flags 成員會設定為 IrpSp-Flags> 的值。
LowIoContext.ParamsFor.Locks.Length 成員會設定為 IrpSp-Parameters.LockControl.Length.QuadPart> 的值。
RX_CONTEXT 結構的 LowIoContext.Operation 成員會指定要執行的低 I/O 作業。 有數個低 I/O 例程可以指向網路迷你重新導向器中的相同例程,因為 LowIoContext.Operation 成員可用來區分所要求的低 I/O 作業。 例如,與檔案鎖定相關的所有 I/O 呼叫,都可以在網路迷你重新導向器中呼叫相同的低 I/O 例程,而且此例程可以使用 LowIoContext.Operation 成員來區分要求的鎖定和解除鎖定作業。
如果 MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] 例程可能需要很長的時間才能完成,網路迷你重新導向器驅動程式應該先釋放 FCB 結構,再起始網路通訊。 您可以呼叫 RxReleaseFcbResourceForThreadInMRx 來釋放 FCB 結構。 雖然 MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] 例程正在處理,但RX_CONTEXT的 LowIoContext.ResourceThreadId 成員保證會指出在 RDBSS 中起始作業的進程線程。
RX_CONTEXT 結構的LowIoContext.ResourceThreadId成員可用來代表另一個線程釋放FCB結構。 異步例程完成時,可以釋放從初始線程取得的FCB結構。
RDBSS 會呼叫 MRxLowIOSubmit[LOWIO_OP_UNLOCK] 例程,要求網路迷你重新導向器移除檔案物件上的單一鎖定。
RDBSS 會呼叫 MRxLowIOSubmit[LOWIO_OP_UNLOCK] ,以回應接收具有次要程式代碼 IRP_MN_UNLOCK_SINGLE的IRP_MJ_LOCK_CONTROL 要求。
呼叫 MRxLowIOSubmit[LOWIO_OP_UNLOCK]之前,RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT結構中的下列成員:
LowIoContext.Operation 成員會設定為 LOWIO_OP_UNLOCK。
LowIoContext.ResourceThreadId 成員會設定為在 RDBSS 中起始作業的進程線程。
LowIoContext.ParamsFor.Locks.ByteOffset 成員會設定為 IrpSp-Parameters.LockControl.ByteOffset.QuadPart> 的值。
LowIoContext.ParamsFor.Locks.Key 成員會設定為 IrpSp-Parameters.LockControl.Key> 的值。
LowIoContext.ParamsFor.Locks.Length 成員會設定為 IrpSp-Parameters.LockControl.Length.QuadPart> 的值。
RX_CONTEXT 結構的 LowIoContext.Operation 成員會指定要執行的低 I/O 作業。 有數個低 I/O 例程可以指向網路迷你重新導向器中的相同例程,因為這個 LowIoContext.Operation 成員可用來區分要求的低 I/O 作業。 例如,與檔案鎖定相關的所有 I/O 呼叫,都可以在網路迷你重新導向器中呼叫相同的低 I/O 例程,而且此例程可以使用 LowIoContext.Operation 成員來區分要求的鎖定和解除鎖定作業。
如果 MRxLowIOSubmit[LOWIO_OP_UNLOCK] 例程可能需要很長的時間才能完成,網路迷你重新導向器驅動程式應該先釋放 FCB 結構,再起始網路通訊。 您可以呼叫 RxReleaseFcbResourceForThreadInMRx 來釋放 FCB 結構。 雖然 MRxLowIOSubmit[LOWIO_OP_UNLOCK] 例程正在處理,但RX_CONTEXT的 LowIoContext.ResourceThreadId 成員保證會指出在 RDBSS 中起始作業的進程線程。
RX_CONTEXT的 LowIoContext.ResourceThreadId 成員可用來代表另一個線程釋放 FCB 結構。 異步例程完成時,可以釋放從初始線程取得的FCB結構。
RDBSS 會呼叫 MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] 例程,要求網路迷你重新導向器移除檔案物件上保留的多個鎖定。
RDBSS 會呼叫 MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] ,以回應接收具有IRP_MN_UNLOCK_ALL或IRP_MN_UNLOCK_ALL_BY_KEY次要程式碼的 IRP_MJ_LOCK_CONTROL 要求。
呼叫 MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE]之前,RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT 結構中的下列成員:
LowIoContext.Operation 成員會設定為 LOWIO_OP_UNLOCK_MULTIPLE。
LowIoContext.ResourceThreadId 成員會設定為在 RDBSS 中起始作業的進程線程。
LowIoContext.ParamsFor.Locks.LockList 成員會設定為LOWIO_LOCK_LIST元素的清單。 每個元素都會指定要解除鎖定的範圍。
要解除鎖定的位元組範圍是在 RX_CONTEXT 結構的 LowIoContext.ParamsFor.Locks.LockList 成員中指定。 LOWIO_LOCK_LIST 結構如下所示:
typedef struct _LOWIO_LOCK_LIST {
struct _LOWIO_LOCK_LIST *Next;
ULONG LockNumber;
RXVBO ByteOffset;
LONGLONG Length;
ULONG Key;
BOOLEAN ExclusiveLock;
} LOWIO_LOCK_LIST, *PLOWIO_LOCK_LIST;
RX_CONTEXT的 LowIoContext.Operation 成員會指定要執行的低 I/O 作業。 有數個低 I/O 例程可以指向網路迷你重新導向器中的相同例程,因為 LowIoContext.Operation 成員可用來區分所要求的低 I/O 作業。 例如,與檔案鎖定相關的所有 I/O 呼叫,都可以在網路迷你重新導向器中呼叫相同的低 I/O 例程,而且此例程可以使用 LowIoContext.Operation 成員來區分要求的鎖定和解除鎖定作業。
如果 MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] 例程可能需要很長的時間才能完成,網路迷你重新導向器驅動程式應該先釋放 FCB 結構,再起始網路通訊。 您可以呼叫 RxReleaseFcbResourceForThreadInMRx 來釋放 FCB 結構。 雖然 MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] 例程正在處理,但RX_CONTEXT的 LowIoContext.ResourceThreadId 成員保證會指出在 RDBSS 中起始作業的進程線程。
RX_CONTEXT的 LowIoContext.ResourceThreadId 成員可用來代表另一個線程釋放 FCB 結構。 異步例程完成時,可以釋放從初始線程取得的FCB結構。
RDBSS 會呼叫 MRxLowIOSubmit[LOWIO_OP_WRITE] 例程,以發出網路迷你重新導向器的寫入要求。
RDBSS 會呼叫 MRxLowIOSubmit[LOWIO_OP_WRITE] 以回應接收 IRP_MJ_WRITE 要求。
呼叫 MRxLowIOSubmit[LOWIO_OP_WRITE]之前,RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT結構中的下列成員:
LowIoContext.Operation 成員會設定為 LOWIO_OP_WRITE。
LowIoContext.ResourceThreadId 成員會設定為在 RDBSS 中起始作業的進程線程。
LowIoContext.ParamsFor.ReadWrite.Key 成員會設定為 IrpSp-Parameters.Read.Key> 的值。
如果 Irp-Flags> 的 IRP_PAGING_IO 位在 上,ParamsFor.ReadWrite.Flags 成員已設定LOWIO_READWRITEFLAG_PAGING_IO位。
ParamsFor.ReadWrite.Buffer 成員會設定為鎖定 IoWriteAccess 的用戶緩衝區。
LowIoContext.ParamsFor.ReadWrite.ByteCount 成員會設定為 IrpSp-Parameters.Write.Length> 的值。
寫入要求通常是由網路迷你重新導向器實作為異步操作,因為它可能需要相當長的時間。 作業通常由將網路要求傳送至遠端伺服器所組成。 在伺服器上完成寫入要求時,會取得回應。 這是網路迷你重新導向器可能需要註冊內容來處理在本機起始之取消的作業範例。
雖然 MRxLowIOSubmit[LOWIO_OP_WRITE] 例程正在處理,但RX_CONTEXT的 LowIoContext.ResourceThreadId 成員保證會指出在 RDBSS 中起始作業的進程線程。 LowIoContext.ResourceThreadId 成員可用來代表另一個線程釋放 FCB 結構。 異步例程完成時,可以釋放從初始線程取得的FCB結構。 您可以呼叫 RxReleaseFcbResourceForThreadInMRx 來釋放 FCB 結構。
RDBSS 會呼叫 MRxQueryDirectory 例程,以要求網路迷你重新導向器在檔案目錄上查詢資訊。
呼叫 MRxQueryDirectory 之前,RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT結構中的下列成員:
Info.FileInformationClass 成員設定為 IrpSp-Parameters.QueryDirectory.FileInformationClass>。
Info.Buffer 成員會設定為來自 I/O 要求封包的用戶緩衝區。 如有需要,RDBSS 已鎖定此緩衝區。
Info.LengthRemaining 成員設定為 IrpSp-Parameters.QueryDirectory.Length>。
QueryDirectory.FileIndex 成員設定為 IrpSp-Parameters.QueryDirectory.FileIndex>。
如果 IrpSp-Flags> 具有SL_RESTART_SCAN位,則 QueryDirectory.RestartScan 成員會設定為非零。
如果 IrpSp-Flags> 具有SL_RETURN_SINGLE_ENTRY位,QueryDirectory.ReturnSingleEntry 成員會設定為非零。
如果 IrpSp-Flags> 具有SL_INDEX_SPECIFIED位,QueryDirectory.IndexSpecified 成員會設定為非零。
如果相關聯 FOBX 的 UnicodeQueryTemplate.Buffer 成員為 NULL,且 FOBX 的 Flags 成員沒有FOBX_FLAG_MATCH_ALL位,則 QueryDirectory.InitialQuery 成員會設定為非零。
針對通配符查詢 (“.”,例如) ,RDBSS 會將相關聯 FOBX 的 UnicodeQueryTemplate.Buffer 成員設定為傳遞的通配符查詢。
如果從 MRxQueryDirectory 傳回RX_CONTEXT結構的 PostRequest 成員為 TRUE,則 RDBSS 會呼叫 RxFsdPostRequest,將RX_CONTEXT結構傳遞至背景工作佇列,讓文件系統進程 (FSP) 進行處理。
RDBSS 會呼叫 MRxQueryEaInfo 例程,要求文件系統物件上的網路迷你重新導向器查詢擴充屬性資訊。
RDBSS 發出 MRxQueryEaInfo 的呼叫,以回應接收 IRP_MJ_QUERY_EA 要求。
呼叫 MRxQueryEaInfo 之前,RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT結構中的下列成員:
Info.Buffer 成員會設定為來自 I/O 要求封包的用戶緩衝區。 如有需要,RDBSS 已鎖定此緩衝區。
Info.LengthRemaining 成員設定為 IrpSp-Parameters.QueryEa.Length>。
QueryEa.UserEaList 成員會設定為 IrpSp-Parameters.QueryEa.EaList>。
QueryEa.UserEaListLength 成員設定為 IrpSp-Parameters.QueryEa.EaListLength>。
QueryEa.UserEaIndex 成員設定為 IrpSp-Parameters.QueryEa.EaIndex>。
如果 IrpSp-Flags> 的位開啟 SL_RESTART_SCAN,QueryEa.RestartScan 成員會設定為非零。
如果 IrpSp-Flags> 具有SL_RETURN_SINGLE_ENTRY位,QueryEa.ReturnSingleEntry 成員會設定為非零。
如果 IrpSp-Flags> 具有SL_INDEX_SPECIFIED位,QueryEa.IndexSpecified 成員會設定為非零。
成功時,MRxQueryEaInfo 應該將RX_CONTEXT結構的 Info.LengthRemaininging 成員設定為傳回的擴充屬性資訊長度,同時更新 Fobx-OffsetOfNextEaToReturn> 成員。 如果呼叫 MRxQueryEaInfo 成功,RDBSS 會將 IRP 的 IoStatus.Information 成員設定為 IrpSp-Parameters.QueryEa.Length> 減去 RX_CONTEXT Info.LengthRemaining 成員。
RDBSS 會呼叫 MRxQueryFileInfo 例程,要求文件系統物件上的網路迷你重新導向器查詢檔案資訊。
RDBSS 發出 MRxQueryFileInfo 的呼叫,以回應接收 IRP_MJ_QUERY_INFORMATION 要求。
呼叫 MRxQueryFileInfo 之前,RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT結構中的下列成員:
Info.FileInformationClass 成員會設定為 IrpSp-Parameters.QueryFile.FileInformationClass>,要求FILE_INFORMATION_CLASS值。
Info.Buffer 成員會從 I/O 要求封包設定為用戶緩衝區。
Info.LengthRemaining 成員會設定為 IrpSp-Parameters.QueryFile.Length>。
QueryDirectory.FileIndex 成員設定為 IrpSp-Parameters.QueryDirectory.FileIndex>。
如果 IrpSp-Flags> 已設定 SL_RESTART_SCAN 位,則會設定 QueryDirectory.RestartScan 成員。
如果 IrpSp-Flags> 已設定SL_RETURN_SINGLE_ENTRY位,則會設定 QueryDirectory.ReturnSingleEntry 成員。
如果 Fobx-UnicodeQueryTemplate.Buffer> 為 NULL 且 Fobx-Flags> 沒有設定FOBX_FLAG_MATCH_ALL位,則會設定 QueryDirectory.InitialQuery 成員。
成功時,網路迷你重新導向器應該將 RX_CONTEXT 結構的 Info.LengthRemaining 成員設定為 Info.Length 成員減去所傳回檔案資訊的長度。 如果呼叫 MRxQueryFileInfo 成功,RDBSS 會將 IRP 的 IoStatus.Information 成員設定為 IrpSp-Parameters.QueryFile.Length> 減去 RX_CONTEXT的 Info.LengthRemaining 成員。
RDBSS 不支援 IrpSp-Flags> 集合SL_INDEX_SPECIFIED位的要求。 網路迷你重新導向器不會收到 MRxQueryFileInfo 的呼叫,且已設定SL_INDEX_SPECIFIED位的 IrpSp-Flags>。
RDBSS 會呼叫 MRxQueryQuotaInfo 例程,要求文件系統物件上的網路迷你重新導向器查詢配額資訊。
RDBSS 發出 MRxQueryQuotaInfo 的呼叫,以回應接收 IRP_MJ_QUERY_QUOTA 要求。
呼叫 MRxQueryQuotaInfo 之前,RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT結構中的下列成員:
Info.Buffer 成員會設定為來自 I/O 要求封包的用戶緩衝區。 如有需要,RDBSS 已鎖定此緩衝區。
Info.LengthRemaining 成員設定為 IrpSp-Parameters.QueryQuota.Length>。
QueryQuota.SidList 成員設定為 IrpSp-Parameters.QueryQuota.SidList>。
QueryQuota.SidListLength 成員設定為 IrpSp-Parameters.QueryQuota.SidListLength>。
QueryQuota.StartSid 成員設定為 IrpSp-Parameters.QueryQuota.StartSid>。
QueryQuota.Length 成員設定為 IrpSp-Parameters.QueryQuota.Length>。
如果 IrpSp-Flags> 已設定SL_RESTART_SCAN位,則 QueryQuota.RestartScan 成員會設定為非零。
如果 IrpSp-Flags> 已設定SL_RETURN_SINGLE_ENTRY位,QueryQuota.ReturnSingleEntry 成員會設定為非零。
如果 IrpSp-Flags> 已設定SL_INDEX_SPECIFIED位,QueryQuota.IndexSpecified 成員就會設定為非零。
成功時,網路迷你重新導向器應該將RX_CONTEXT結構的 Info.LengthRemaining 成員設定為要傳回的配額資訊長度。 如果呼叫 MRxQueryQuotaInfo 成功,RDBSS 會將 IRP 的 IoStatus.Information 成員設定為 RX_CONTEXT 的 Info.LengthRemaining 成員。
如果呼叫 MRxQueryQuotaInfo 成功,則RX_CONTEXT結構的 InformationToReturn 成員應該設定為傳回的配額資訊長度。 如果呼叫失敗,則RX_CONTEXT的 InformationToReturn 成員應設定為零。
RDBSS 會呼叫 MRxQuerySdInfo 例程,以要求文件系統物件上的網路迷你重新導向器查詢安全性描述元資訊。
RDBSS 發出 MRxQuerySdInfo 的呼叫,以回應接收 IRP_MJ_QUERY_SECURITY 要求。
呼叫 MRxQuerySdInfo 之前,RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT 結構中的下列成員:
QuerySecurity.SecurityInformation 成員會設定為 IrpSp-Parameters.QuerySecurity.SecurityInformation>。
Info.Buffer 成員會設定為來自 I/O 要求封包的用戶緩衝區。 如有需要,RDBSS 已鎖定此緩衝區。
Info.LengthRemaining 成員設定為 IrpSp-Parameters.QuerySecurity.Length>。
成功時,網路迷你重新導向器應該將RX_CONTEXT結構的 InformationToReturn 成員設定為傳回的安全性資訊長度。 如果呼叫 MRxQuerySdInfo 成功,RDBSS 會將 IRP 的 IoStatus.Information 成員設定為 RX_CONTEXT 的 InformationToReturn 成員。
RDBSS 會呼叫 MRxQueryVolumeInfo 例程,以要求網路迷你重新導向器查詢磁碟區資訊。
RDBSS 會在下列任一情況下發出 MRxQueryVolumeInfo 的呼叫:
RDBSS 會收到 IRP_MJ_QUERY_VOLUME_INFORMATION 要求。
RDBSS 會收到FSCTL_LMR_GET_LINK_TRACKING_INFORMATION控件程式代碼的 IRP_MJ_FILE_SYSTEM_CONTROL 要求。
在IRP_MJ_QUERY_VOLUME_INFORMATION要求的情況下呼叫 MRxQueryVolumeInfo 之前,RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT結構中的下列成員:
Info.FsInformationClass 成員會設定為 IrpSp-Parameters.QueryVolume.FsInformationClass>。
Info.Buffer 成員設定為 Irp-AssociatedIrp.SystemBuffer>。
Info.LengthRemaining 成員設定為 IrpSp-Parameters.QueryVolume.Length>。
對於IRP_MJ_QUERY_VOLUME_INFORMATION要求,如果從 MRxQueryVolumeInfo 傳回RX_CONTEXT結構的 PostRequest 成員為 TRUE,RDBSS 會呼叫 RxFsdPostRequest 來張貼要求。 在此情況下,IRP_MJ_QUERY_VOLUME_INFORMATION要求會將RX_CONTEXT結構傳遞至佇列RX_CONTEXT至背景工作佇列,以供文件系統進程處理 (FSP) 處理。
如果從 MRxQueryVolumeInfo 傳回RX_CONTEXT結構的 PostRequest 成員為 FALSE,網路迷你重新導向器必須將RX_CONTEXT結構的 Info.LengthRemaining 成員設定為傳回的磁碟區資訊長度。 RDBSS 會將 IRP 的 IoStatus.Information 成員設定為 IrpSp-Parameters.QueryVolume.Length> 減去 RX_CONTEXT 結構的 Info.LengthRemaining 成員。
如果呼叫 MRxQueryVolumeInfo 成功,網路迷你重新導向器應該將 RX_CONTEXT 結構的 Info.LengthRemaining 成員設定為 Info.Length 成員減去傳回之磁碟區資訊的長度。 如果呼叫 MRxQueryVolumeInfo 成功,RDBSS 會將 IRP 的 IoStatus.Information 成員設定為 IrpSp-Parameters.QueryVolume.Length> 減去 RX_CONTEXT 結構的 Info.LengthRemaining 成員。
對於 Info.FsInformationClass 成員設定為 FileFsDeviceInformation 的IRP_MJ_QUERY_VOLUME_INFORMATION要求,網路迷你重新導向器會傳回 RxContext 參數所指向之RX_CONTEXT結構中的下列資訊:
Info.Buffer 成員包含FILE_FS_DEVICE_INFORMATION結構
Info.Buffer.Characteristics 成員會設定為磁碟區的特性,其必須包含FILE_REMOTE_DEVICE做為其中一個選項。
Info.Buffer.DeviceType 成員會設定為相關聯NET_ROOT結構的 DeviceType 成員。 如果相關聯NET_ROOT的 Type 成員 NET_ROOT_PIPE,Info.Buffer.DeviceType 成員會設定為 FILE_DEVICE_NAMED_PIPE。
對於 Info.FsInformationClass 成員設定為 FileFsVolumeInformation 的IRP_MJ_QUERY_VOLUME_INFORMATION要求,網路迷你重新導向器會傳回 RxContext 參數所指向之RX_CONTEXT結構中的下列資訊:
Info.Buffer 成員包含FILE_FS_VOLUME_INFORMATION結構。
Info.Buffer 成員會設定為相關聯NET_ROOT結構的 VolumeInfo 成員。
Info.LengthRemaining 成員會設定為相關聯NET_ROOT結構的 VolumeInfoLength 成員。
IRP_MJ_FILE_SYSTEM_CONTROL RDBSS 的 MRxQueryVolumeInfo呼叫是鏈接 追蹤資訊的要求。 在呼叫 MRxQueryVolumeInfo 進行IRP_MJ_FILE_SYSTEM_CONTROL之前,RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT結構中的下列成員:
Info.FsInformationClass 成員會設定為 FileFsObjectIdInformation。
Info.Buffer 成員會設定為 FILE_FS_OBJECTID_INFORMATION 結構。
Info.LengthRemaining 成員會設定為 sizeof (FILE_FS_OBJECTID_INFORMATION) 。
針對此IRP_MJ_FILE_SYSTEM_CONTROL要求案例,IRP 的 AssociatedIrp.SystemBuffer 成員會指向LINK_TRACKING_INFORMATION結構。
如果將要求起始為 MRxQueryVolumeInfo 的IRP_MJ_FILE_SYSTEM_CONTROL,且傳回值為 STATUS_SUCCESS或STATUS_BUFFER_OVERFLOW,RDBSS 會將RX_CONTEXT 結構的 Info.Buffer 成員中的 Object FILE_FS_OBJECTID_INFORMATION Id 成員複製到 IRP 的 NetRoot-DiskParameters.VolumeId> 成員,以及 IRP 的 AssociatedIrp.SystemBuffer.VolumeId 成員。 如果呼叫 MRxQueryVolumeInfo 成功,RDBSS 會設定LINK_TRACKING_INFORMATION結構的 Type 成員。 如果 FCB 結構的 NetRoot-Flags> 成員已設定NETROOT_FLAG_DFS_AWARE_NETROOT位,則 Type 成員是由 RDBSS 設定為 DfsLinkTrackingInformation。 如果 FCB 結構的 NetRoot-Flags> 成員沒有設定NETROOT_FLAG_DFS_AWARE_NETROOT位,Type 成員是由 RDBSS 設定為 NtfsLinkTrackingInformation。 成功時,RDBSS 會將 IRP 的 IoStatus.Information 成員設定為LINK_TRACKING_INFORMATION結構的大小。
RDBSS 會呼叫 MRxSetEaInfo 例程,要求網路迷你重新導向器在文件系統對象上設定擴充屬性資訊。
RDBSS 發出 對 MRxSetEaInfo 的呼叫,以回應接收 IRP_MJ_SET_EA 要求。
呼叫 MRxSetEaInfo 之前,RDBSS 會修改 RxContext 參數所指向之 RX_CONTEXT 結構中的下列成員:
Info.Buffer 成員會設定為來自 I/O 要求封包的用戶緩衝區。 如有需要,RDBSS 已鎖定此緩衝區。
Info.LengthRemaining 成員設定為 IrpSp-Parameters.QueryEa.Length>。
RDBSS 會呼叫 MRxSetFileInfo 例程,要求網路迷你重新導向器在文件系統對象上設定檔案資訊。
RDBSS 發出 MRxSetFileInfo 的呼叫,以回應接收 IRP_MJ_SET_INFORMATION 要求。
呼叫 MRxSetFileInfo 之前,RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT結構中的下列成員:
Info.FileInformationClass 成員會設定為 IrpSp-Parameters.SetFile.FileInformationClass>,這是指定的FILE_INFORMATION_CLASS值。
Info.Buffer 成員設定為 Irp-AssociatedIrp.SystemBuffer>。
Info.Length 成員設定為 IrpSp-Parameters.SetFile.Length>。
RDBSS 會呼叫 MRxSetFileInfoAtCleanup 例程,要求網路迷你重新導向器在清除時設定文件系統物件上的檔案資訊。
RDBSS 會在清除期間發出 MRxSetFileInfoAtCleanup 的呼叫,當檔案對象的最後一個句柄關閉時。 這與刪除檔案對象的最後一個參考時所叫用的關閉作業不同。
如果檔案或檔案的大小已變更,RDBSS 會呼叫 MRxSetFileInfoAtCleanup。 RDBSS 對 MRxSetFileInfoAtCleanup 的呼叫會分別針對每個變更進行。 如果檔案大小和時間戳都已變更,則 RDBSS 會呼叫 MRxSetFileInfoAtCleanup。
呼叫 MRxSetFileInfoAtCleanup 之前,如果檔案上的時間戳已變更,RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT結構中的下列成員:
Info.FileInformationClass 成員會設定為 FileBasicInformation 的FILE_INFORMATION_CLASS值。
Info.Buffer 成員會設定為堆疊上配置的FILE_BASIC_INFORMATION結構。
Info.Length 成員會設定為FILE_BASIC_INFORMATION結構的大小。
呼叫 MRxSetFileInfoAtCleanup 之前,如果檔案的大小已變更,RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT結構中的下列成員:
Info.FileInformationClass 成員會設定為 FileEndOfFileInformation 的FILE_INFORMATION_CLASS值。
Info.Buffer 成員會設定為堆疊上配置的FILE_END_OF_FILE_INFORMATION結構。
Info.Length 成員設定為 sizeof (FILE_END_OF_FILE_INFORMATION) 。
RDBSS 會忽略 MRxSetFileInfoAtCleanup 的傳回值。
網路迷你重新導向器可以選擇在此例程中執行任何動作,並傳回STATUS_SUCCESS。 在清除作業期間,將會處理檔案大小或時間戳的任何變更。
RDBSS 會呼叫 MRxSetQuotaInfo 例程,要求網路迷你重新導向器在文件系統對象上設定配額資訊。
RDBSS 發出 MRxSetQuotaInfo 的呼叫,以回應接收 IRP_MJ_SET_QUOTA 要求。
呼叫 MRxSetQuotaInfo 之前,RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT結構中的下列成員:
Info.Buffer 成員會設定為來自 I/O 要求封包的用戶緩衝區。 如有需要,RDBSS 已鎖定此緩衝區。
Info.LengthRemaining 成員會設定為 IrpSp-Parameters.SetQuota.Length>。
RDBSS 會呼叫 MRxSetSdInfo 例程,要求網路迷你重新導向器在文件系統對象上設定安全性描述元資訊。
RDBSS 發出 MRxSetSdInfo 的呼叫,以回應接收 IRP_MJ_SET_SECURITY 要求。
呼叫 MRxSetSdInfo 之前,RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT結構中的下列成員:
SetSecurity.SecurityInformation 成員會設定為 IrpSp-Parameters.SetSecurity.SecurityInformation>。
SetSecurity.SecurityDescriptor 成員會設定為 IrpSp-Parameters.SetSecurity.SecurityDescriptor>。
RDBSS 會呼叫 MRxSetVolumeInfo 例程,以要求網路迷你重新導向器設定磁碟區資訊。
RDBSS 發出 MRxSetVolumeInfo 的呼叫,以回應接收 IRP_MJ_SET_VOLUME_INFORMATION 要求。
呼叫 MRxSetVolumeInfo 之前,RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT結構中的下列成員:
Info.FsInformationClass 成員會設定為 IrpSp-Parameters.SetVolume.FsInformationClass>。
Info.Buffer 成員設定為 Irp-AssociatedIrp.SystemBuffer>。
Info.LengthRemaining 成員會設定為 IrpSp-Parameters.SetVolume.Length>。
MRxShouldTryToCollapseThisOpen 例程是由 RDBSS 呼叫,要求網路迷你重新導向器指出 RDBSS 是否應該嘗試並將開啟的要求折迭至現有的文件系統物件。
系統會呼叫 MRxShouldTryToCollapseThisOpen 來判斷是否不應折疊開啟的要求。
呼叫 MRxShouldTryToCollapseThisOpen 之前,RDBSS 會修改 RxContext 參數所指向之RX_CONTEXT結構中的下列成員:
pRelevantSrvOpen 成員會設定為 SRV_OPEN。
呼叫 MRxShouldTryToCollapseThisOpen 可能是目錄的變更通知要求。 因此,網路迷你重新導向器可能不允許折迭開啟的要求,以便變更通知正常運作。
如果RX_CONTEXT結構的 Create.NtCreateParameters.CreateOptions 成員具有FILE_OPEN_FOR_BACKUP_INTENT選項或FILE_DELETE_ON_CLOSE選項集,RDBSS 不允許折疊開啟。
RDBSS 會呼叫 MRxTruncate 例程,要求網路迷你重新導向器截斷檔系統對象的內容。
如果下列兩個條件都成立,則會呼叫 MRxTruncate 作為清除作業的一部分:
檔案物件會對應至磁碟檔案或目錄
這是最後一個清除呼叫,且檔案對象標示為截斷。
如果 FCB結構的fcbstate 成員已設定FCB_STATE_TRUNCATE_ON_CLOSE位,檔案物件就會標示為截斷。 RDBSS 會在稍後取消初始化快取對應。
MRxTruncate 的呼叫後面接著呼叫 MRxCleanupFobx 作為清除作業的一部分。
RDBSS 會忽略 MRxTruncate 的傳回值。
RDBSS 會呼叫 MRxZeroExtend 例程,要求網路迷你重新導向器截斷文件系統對象的內容。
如果檔案物件未標示為刪除,且檔案物件不是分頁檔案,則會呼叫 MRxZeroExtend 作為清除作業的一部分。 系統會呼叫 MRxZeroExtend ,以確保有效數據長度與檔案大小之間的部分是零延伸的。 呼叫 MRxZeroExtend 之後,RDBSS 會將 FCB 結構結構的 Header.ValidDataLength.QuadPart 成員設定為等於 FCB 結構的 Header.FileSize.QuadPart 成員。
MRxZeroExtend 的呼叫後面接著呼叫 MRxCleanupFobx 作為清除作業的一部分。
RDBSS 會忽略 MRxZeroExtend 的傳回值。
RDBSS 會呼叫 MRxCleanupFobx 例程,以要求網路迷你重新導向器關閉文件系統物件延伸模組。 RDBSS 會發出此呼叫,以回應在檔案物件上接收IRP_MJ_CLEANUP要求。
MRxCleanupFobx 是由 RDBSS 呼叫,做為檔案物件的清除和關閉作業的一部分。
MRxCleanupFobx 無法傳回值STATUS_RETRY指出應該重試呼叫。 如果需要重試迴圈,網路迷你重新導向器必須在 MRxCleanupFobx 例程內部處理。
規格需求
需求 | 值 |
---|---|
目標平台 | 桌面 |
標頭 | mrx.h (包含 Mrx.h) |