MRxQueryVolumeInfo 例程
RDBSS 會呼叫 MRxQueryVolumeInfo 例程,以要求網路迷你重新導向器查詢磁碟區資訊。
語法
PMRX_CALLDOWN MRxQueryVolumeInfo;
NTSTATUS MRxQueryVolumeInfo(
_Inout_ PRX_CONTEXT RxContext
)
{ ... }
參數
RxContext [in, out]
RX_CONTEXT 結構的指標。 此參數包含要求作業的 IRP。
傳回值
MRxQueryVolumeInfo 會在成功或適當的 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_INSUFFICIENT_RESOURCES | 資源不足,無法完成查詢。 |
STATUS_INVALID_PARAMETER | 指定了無效的參數。 |
STATUS_NETWORK_NAME_DELETED | 已刪除網路名稱。 |
STATUS_NOT_IMPLEMENTED | 未實作所要求的功能。 |
備註
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 成員。
針對設定為 FileFsDeviceInformation之 Info.FsInformationClass 成員的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。
針對設定為 FileFsVolumeInformation之 Info.FsInformationClass 成員的IRP_MJ_QUERY_VOLUME_INFORMATION要求,網路迷你重新導向器會在 RxContext 參數所指向的RX_CONTEXT結構中傳回下列資訊:
Info.Buffer 成員包含FILE_FS_VOLUME_INFORMATION結構。
Info.Buffer 成員會設定為相關聯NET_ROOT結構的 VolumeInfo 成員。
Info.LengthRemaining 成員會設定為相關聯NET_ROOT結構的 VolumeInfoLength 成員。
來自 RDBSS for IRP_MJ_FILE_SYSTEM_CONTROL的 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 成員中傳遞的 ObjectId FILE_FS_OBJECTID_INFORMATION 成員複製到 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結構的大小。
規格需求
目標平台 |
桌面 |
標頭 |
Mrx.h (包含 Mrx.h) |