MRxQueryVolumeInfo 루틴
MRxQueryVolumeInfo 루틴은 RDBSS에서 네트워크 미니 리트리버 쿼리 볼륨 정보를 요청하기 위해 호출됩니다.
구문
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 요청은 FSP(파일 시스템 프로세스)에서 처리하기 위해 작업자 큐에 RX_CONTEXT 큐에 RX_CONTEXT 구조를 전달합니다.
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 호출은 링크 추적 정보에 대한 요청입니다. 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 비트 집합이 없는 경우 Type 멤버는 RDBSS에서 NtfsLinkTrackingInformation으로 설정됩니다. 성공하면 RDBSS는 IRP의 IoStatus.Information 멤버를 LINK_TRACKING_INFORMATION 구조체의 크기로 설정합니다.
요구 사항
대상 플랫폼 |
데스크톱 |
헤더 |
Mrx.h(Mrx.h 포함) |