MRxQueryVolumeInfo 例程
RDBSS 调用 MRxQueryVolumeInfo 例程来请求网络微型重定向程序查询卷信息。
语法
PMRX_CALLDOWN MRxQueryVolumeInfo;
NTSTATUS MRxQueryVolumeInfo(
_Inout_ PRX_CONTEXT RxContext
)
{ ... }
参数
RxContext [in, out]
指向RX_CONTEXT 结构的指针。 此参数包含请求操作的 IRP。
返回值
MRxQueryVolumeInfo 在成功时返回STATUS_SUCCESS或适当的 NTSTATUS 值,如以下值之一:
返回代码 | 说明 |
---|---|
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 成员。
对于 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 成员。
来自 RDBSS 的 MRxQueryVolumeInfo 调用 用于IRP_MJ_FILE_SYSTEM_CONTROL 是链接跟踪信息的请求。 在为 IRP_MJ_FILE_SYSTEM_CONTROL 调用 MRxQueryVolumeInfo 之前,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结构。
如果请求作为返回值为 STATUS_SUCCESS 或 STATUS_BUFFER_OVERFLOW 的 MRxQueryVolumeInfo 的IRP_MJ_FILE_SYSTEM_CONTROL发起,RDBSS 会将在 RX_CONTEXT 结构的 Info.Buffer 成员中传递的 FILE_FS_OBJECTID_INFORMATION 结构的 ObjectId 成员复制到 FCB 结构的 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位,则 RDBSS 会将 Type 成员设置为 NtfsLinkTrackingInformation。 成功后,RDBSS 会将 IRP 的 IoStatus.Information 成员设置为LINK_TRACKING_INFORMATION结构的大小。
要求
目标平台 |
桌面 |
标头 |
Mrx.h (包括 Mrx.h) |