PMRX_CALLDOWN 콜백 함수(mrx.h)

이 콜백은 RDBSS에서 네트워크 미니 리디렉터에서 제공된 IRP에 따라 작업을 수행하도록 요청하기 위해 호출됩니다.

구문

PMRX_CALLDOWN PmrxCalldown;

NTSTATUS PmrxCalldown(
  [in, out] IN OUT PRX_CONTEXT RxContext
)
{...}

매개 변수

[in, out] RxContext

RX_CONTEXT 구조체에 대한 포인터입니다. 이 매개 변수에는 작업을 요청하는 IRP가 포함되어 있습니다.

반환 값

이 콜백은 성공 시 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_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 호출이 실패했습니다.

설명

MRxCloseSrvOpen 루틴은 RDBSS에서 네트워크 미니 리트리버가 SRV_OPEN 구조를 닫도록 요청하기 위해 호출됩니다.

MRxCloseSrvOpen 은 파일 개체에 대한 정리 및 닫기 작업의 일부로 RDBSS에서 호출됩니다. 네트워크 미니 리다이렉터에서 네트워크를 통해 파일을 닫는 것으로 가정합니다.

MRxCloseSrvOpen을 호출하기 전에 RDBSS는 RxContext 매개 변수가 가리키는 RX_CONTEXT 구조체에서 다음 멤버를 수정합니다.

MajorFunction 이 IRP_MJ_CLOSE

pFcb 는 닫기 처리를 시작할 FCB 구조체로 설정됩니다.

pFobx 는 닫기 처리를 시작할 FOBX 구조체로 설정됩니다.

사용자가 파일을 닫을 때 RDBSS 및 네트워크 미니 리다이렉터에서 SRV_OPEN 구조를 반드시 닫을 필요는 없습니다. 경우에 따라 성능을 향상시키기 위해 네트워크 미니 리디렉터에서 서버와의 접촉 없이 SRV_OPEN 및 캐시된 데이터를 다시 사용하려고 할 수 있습니다. 일부 Microsoft Windows 애플리케이션은 파일을 열고 읽고 닫은 다음 동일한 파일을 빠르게 다시 여는 동작을 나타냅니다. 이러한 경우 SRV_OPEN 구조를 다시 사용하면 성능이 향상될 수 있습니다.

RDBSS는 FOBX 구조를 청소하는 동안 지연된 닫기 처리를 위해 MRxCloseSrvOpen 을 호출합니다. 이는 열린 요청을 예상하여 닫기 처리가 지연되고 열린 요청이 나오지 않을 때 발생합니다.

MRxCloseSrvOpen 은 호출을 다시 시도해야 함을 나타내는 STATUS_RETRY 값을 반환할 수 없습니다. 재시도 루프가 필요한 경우 네트워크 미니 리트리버가 MRxCloseSrvOpen 루틴에서 내부적으로 처리해야 합니다.

MRxCollapseOpen 루틴은 RDBSS에서 네트워크 미니 리트리버가 열려 있는 파일 시스템 요청을 기존 SRV_OPEN 구조로 축소하도록 요청하기 위해 호출됩니다.

MRxCollapseOpen 은 RDBSS에서 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 루틴을 호출합니다.

MRxCreate 는 네트워크 미니 리디렉터에서 네트워크를 통해 파일 시스템 개체를 열도록 요청하기 위해 RDBSS에서 호출됩니다. 이 호출은 IRP_MJ_CREATE 요청을 수신하는 것에 대한 응답으로 RDBSS에서 발급됩니다.

MRxCreate를 호출하기 전에 RDBSS는 RxContext 매개 변수가 가리키는 RX_CONTEXT 구조체에서 다음 멤버를 수정합니다.

pRelevantSrvOpen 은 SRV_OPEN 구조체로 설정됩니다.

Create.pSrvCall 은 SRV_CALL 구조체로 설정됩니다.

Create.NtCreateParameters 가 요청된 NT_CREATE_PARAMETERS 설정됩니다.

네트워크 미니 리다이렉터의 컨텍스트에서 파일 개체는 연결된 FCB(파일 제어 블록) 및 FOBX(파일 개체 확장명) 구조를 나타냅니다. 파일 개체와 FOBX 간에는 일대일 대응이 있습니다. 많은 파일 개체는 원격 서버의 단일 파일을 나타내는 동일한 FCB를 참조합니다. 클라이언트는 동일한 FCB에 여러 개의 열린 요청(NtCreateFile 요청)을 가질 수 있으며, 각 요청은 새 파일 개체를 만듭니다. RDBSS 및 네트워크 미니 리디렉터는 수신된 NtCreateFile 요청보다 적은 수의 MRxCreate 요청을 보내도록 선택할 수 있으며, 실제로 여러 FOBX 간에 SRV_OPEN 구조를 공유할 수 있습니다.

MRxCreate 요청이 파일 덮어쓰기용이고 MRxCreate가 STATUS_SUCCESS 반환된 경우 RDBSS는 페이징 I/O 리소스를 획득하고 파일을 자립니다. 파일이 캐시 관리자에 의해 캐시되는 경우 RDBSS는 캐시 관리자의 크기를 서버에서 방금 받은 파일로 업데이트합니다.

반환하기 전에 MRxCreateRxContext 매개 변수가 가리키는 RX_CONTEXT 구조체의 CurrentIrp-IoStatus.Information> 멤버를 설정해야 합니다.

MRxDevFcbXXXControlFile 루틴은 RDBSS에서 호출되어 디바이스 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 는 파일 플러시에 대한 네트워크 요청을 처리합니다.

MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] 루틴은 RDBSS에서 호출되어 네트워크 미니 리다이렉터에서 파일 개체에 대한 단독 잠금을 열도록 요청합니다.

RDBSS는 IrpSp-Flags>에 SL_EXCLUSIVE_LOCK 비트 집합이 있는 경우 IRP_MN_LOCK 부 코드로 IRP_MJ_LOCK_CONTROL 요청을 수신하는 응답으로 MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK]를 호출합니다.

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 작업을 지정합니다. 이 LowIoContext.Operation 멤버를 사용하여 요청된 낮은 I/O 작업을 구분할 수 있으므로 네트워크 미니 리다이렉터에서 여러 낮은 I/O 루틴이 동일한 루틴을 가리킬 수 있습니다. 예를 들어 파일 잠금과 관련된 모든 I/O 호출은 네트워크 미니 리다이렉터에서 동일한 낮은 I/O 루틴을 호출할 수 있으며 해당 루틴 은 LowIoContext.Operation 멤버를 사용하여 요청된 잠금 및 잠금 해제 작업을 구분할 수 있습니다.

MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] 루틴을 완료하는 데 시간이 오래 걸릴 수 있는 경우 네트워크 미니 리트리버 드라이버는 네트워크 통신을 시작하기 전에 FCB 구조를 해제해야 합니다. FCB 구조는 RxReleaseFcbResourceForThreadInMRx를 호출하여 해제할 수 있습니다. MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] 루틴이 처리되는 동안 RX_CONTEXT LowIoContext.ResourceThreadId 멤버는 RDBSS에서 작업을 시작한 프로세스의 스레드를 나타내도록 보장됩니다.

RX_CONTEXT LowIoContext.ResourceThreadId 멤버를 사용하여 다른 스레드를 대신하여 FCB 구조를 해제할 수 있습니다. 비동기 루틴이 완료되면 초기 스레드에서 가져온 FCB 구조를 해제할 수 있습니다.

MRxLowIOSubmit[LOWIO_OP_FSCTL] 루틴은 RDBSS에서 호출되어 네트워크 미니 리다이렉터에서 원격 파일에 대한 파일 시스템 제어 요청을 실행하도록 요청합니다.

RDBSS는 IRP_MJ_FILE_SYSTEM_CONTROL 요청 수신에 대한 응답으로 MRxLowIOSubmit[LOWIO_OP_FSCTL]를 호출합니다.

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 멤버를 사용하여 다른 스레드를 대신하여 입력 리소스를 해제할 수 있습니다. 비동기 루틴이 완료되면 초기 스레드에서 얻은 입력 리소스를 해제할 수 있습니다.

MRxLowIOSubmit[LOWIO_OP_IOCTL] 루틴은 RDBSS에서 네트워크 미니 리트리버에 대한 I/O 시스템 제어 요청을 실행하기 위해 호출됩니다.

RDBSS는 IRP_MJ_DEVICE_CONTROL 또는 IRP_MJ_INTERNAL_DEVICE_CONTROL 요청 수신에 대한 응답으로 MRxLowIOSubmit[LOWIO_OP_IOCTL]를 호출합니다.

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 멤버를 사용하여 다른 스레드를 대신하여 입력 리소스를 해제할 수 있습니다. 비동기 루틴이 완료되면 초기 스레드에서 얻은 입력 리소스를 해제할 수 있습니다.

MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] 루틴은 RDBSS에서 호출되어 디렉터리 변경 알림 작업에 대한 네트워크 미니 리디렉터에 요청을 실행합니다.

RDBSS는 IRP_MJ_DIRECTORY_CONTROL 요청 수신에 대한 응답으로 MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY]를 호출합니다.

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 멤버는 Irp-MdlAddress> 및 NormalPagePriority를 전달하는 MmGetSystemAddressForMdlSafe를 호출하여 반환되는 값으로 설정됩니다. 또한 사용자 버퍼는 쓰기 액세스를 위해 검색되고 잠깁니다.

디렉터리 변경 알림 작업은 일반적으로 상당한 시간이 걸릴 수 있으므로 네트워크 미니 리디렉터에서 비동기 작업으로 구현됩니다. 작업은 일반적으로 변경 알림을 요청하는 원격 서버로 네트워크 요청을 보내는 것으로 구성됩니다. 원하는 변경 내용이 서버에 영향을 받을 때 응답이 가져옵니다. 네트워크 미니 리디렉션자가 로컬로 시작된 취소를 처리하기 위해 고유한 컨텍스트 값을 등록해야 할 수 있는 작업의 예입니다.

MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] 루틴이 처리되는 동안 RX_CONTEXT LowIoContext.ResourceThreadId 멤버는 RDBSS에서 작업을 시작한 프로세스의 스레드를 나타내도록 보장됩니다. LowIoContext.ResourceThreadId 멤버를 사용하여 다른 스레드를 대신하여 FCB 구조를 해제할 수 있습니다. 비동기 루틴이 완료되면 초기 스레드에서 가져온 FCB 구조를 해제할 수 있습니다. FCB 구조는 RxReleaseFcbResourceForThreadInMRx를 호출하여 해제할 수 있습니다.

MRxLowIOSubmit[LOWIO_OP_READ] 루틴은 RDBSS에서 네트워크 미니 리트리버에 대한 읽기 요청을 발급하기 위해 호출됩니다.

RDBSS는 IRP_MJ_READ 요청 수신에 대한 응답으로 MRxLowIOSubmit[LOWIO_OP_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> 값으로 설정됩니다.

ParamsFor.ReadWrite.Flags 멤버에는 Irp-Flags>에 IRP_PAGING_IO 비트가 있는 경우 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 구조를 해제할 수 있습니다. FCB 구조는 RxReleaseFcbResourceForThreadInMRx를 호출하여 해제할 수 있습니다.

네트워크 리디렉션자가 파일 개체에 대한 공유 잠금을 열도록 요청하기 위해 RDBSS에서 MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] 루틴을 호출합니다.

RDBSS는 IrpSp-Flags>에 SL_EXCLUSIVE_LOCK 비트 집합이 없는 경우 IRP_MN_LOCK 부 코드로 IRP_MJ_LOCK_CONTROL 요청을 수신하는 응답으로 MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK]를 호출합니다.

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 작업을 지정합니다. LowIoContext.Operation 멤버를 사용하여 요청된 낮은 I/O 작업을 구분할 수 있으므로 여러 하위 I/O 루틴이 네트워크 미니 리렉터에서 동일한 루틴을 가리킬 수 있습니다. 예를 들어 파일 잠금과 관련된 모든 I/O 호출은 네트워크 미니 리디렉션기에서 동일한 낮은 I/O 루틴을 호출할 수 있으며, 이 루틴은 LowIoContext.Operation 멤버를 사용하여 요청된 잠금 및 잠금 해제 작업을 구분할 수 있습니다.

MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] 루틴을 완료하는 데 시간이 오래 걸릴 수 있는 경우 네트워크 미니 리트리버 드라이버는 네트워크 통신을 시작하기 전에 FCB 구조를 해제해야 합니다. FCB 구조는 RxReleaseFcbResourceForThreadInMRx를 호출하여 해제할 수 있습니다. MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] 루틴이 처리되는 동안 RX_CONTEXT LowIoContext.ResourceThreadId 멤버는 RDBSS에서 작업을 시작한 프로세스의 스레드를 나타내도록 보장됩니다.

RX_CONTEXT 구조체의 LowIoContext.ResourceThreadId 멤버를 사용하여 다른 스레드를 대신하여 FCB 구조를 해제할 수 있습니다. 비동기 루틴이 완료되면 초기 스레드에서 가져온 FCB 구조를 해제할 수 있습니다.

MRxLowIOSubmit[LOWIO_OP_UNLOCK] 루틴은 RDBSS에서 네트워크 미니 리트리버가 파일 개체에 대한 단일 잠금을 제거하도록 요청하기 위해 호출됩니다.

RDBSS는 IRP_MN_UNLOCK_SINGLE 부 코드를 사용하여 IRP_MJ_LOCK_CONTROL 요청을 수신하는 응답으로 MRxLowIOSubmit[LOWIO_OP_UNLOCK]를 호출합니다.

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 작업을 지정합니다. 이 LowIoContext.Operation 멤버를 사용하여 요청된 낮은 I/O 작업을 구분할 수 있으므로 여러 하위 I/O 루틴이 네트워크 미니 리렉터에서 동일한 루틴을 가리킬 수 있습니다. 예를 들어 파일 잠금과 관련된 모든 I/O 호출은 네트워크 미니 리디렉션기에서 동일한 낮은 I/O 루틴을 호출할 수 있으며, 이 루틴은 LowIoContext.Operation 멤버를 사용하여 요청된 잠금 및 잠금 해제 작업을 구분할 수 있습니다.

MRxLowIOSubmit[LOWIO_OP_UNLOCK] 루틴을 완료하는 데 시간이 오래 걸릴 수 있는 경우 네트워크 미니 리디렉션기 드라이버는 네트워크 통신을 시작하기 전에 FCB 구조를 해제해야 합니다. FCB 구조는 RxReleaseFcbResourceForThreadInMRx를 호출하여 해제할 수 있습니다. MRxLowIOSubmit[LOWIO_OP_UNLOCK] 루틴이 처리되는 동안 RX_CONTEXT LowIoContext.ResourceThreadId 멤버는 RDBSS에서 작업을 시작한 프로세스의 스레드를 나타내도록 보장됩니다.

RX_CONTEXT LowIoContext.ResourceThreadId 멤버를 사용하여 다른 스레드를 대신하여 FCB 구조를 해제할 수 있습니다. 비동기 루틴이 완료되면 초기 스레드에서 가져온 FCB 구조를 해제할 수 있습니다.

MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] 루틴은 RDBSS에서 네트워크 미니 리트리버가 파일 개체에 보관된 여러 잠금을 제거하도록 요청하기 위해 호출됩니다.

RDBSS는 IRP_MN_UNLOCK_ALL 또는 IRP_MN_UNLOCK_ALL_BY_KEY 부 코드로 IRP_MJ_LOCK_CONTROL 요청을 수신하는 응답으로 MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE]를 호출합니다.

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 작업을 지정합니다. LowIoContext.Operation 멤버를 사용하여 요청된 낮은 I/O 작업을 구분할 수 있으므로 여러 하위 I/O 루틴이 네트워크 미니 리렉터에서 동일한 루틴을 가리킬 수 있습니다. 예를 들어 파일 잠금과 관련된 모든 I/O 호출은 네트워크 미니 리디렉션기에서 동일한 낮은 I/O 루틴을 호출할 수 있으며, 이 루틴은 LowIoContext.Operation 멤버를 사용하여 요청된 잠금 및 잠금 해제 작업을 구분할 수 있습니다.

MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] 루틴을 완료하는 데 시간이 오래 걸릴 수 있는 경우 네트워크 미니 리트리버 드라이버는 네트워크 통신을 시작하기 전에 FCB 구조를 해제해야 합니다. FCB 구조는 RxReleaseFcbResourceForThreadInMRx를 호출하여 해제할 수 있습니다. MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] 루틴이 처리되는 동안 RX_CONTEXT LowIoContext.ResourceThreadId 멤버는 RDBSS에서 작업을 시작한 프로세스의 스레드를 나타내도록 보장됩니다.

RX_CONTEXT LowIoContext.ResourceThreadId 멤버를 사용하여 다른 스레드를 대신하여 FCB 구조를 해제할 수 있습니다. 비동기 루틴이 완료되면 초기 스레드에서 가져온 FCB 구조를 해제할 수 있습니다.

MRxLowIOSubmit[LOWIO_OP_WRITE] 루틴은 RDBSS에서 네트워크 미니 리디렉션자에 대한 쓰기 요청을 발급하기 위해 호출됩니다.

RDBSS는 IRP_MJ_WRITE 요청 수신에 대한 응답으로 MRxLowIOSubmit[LOWIO_OP_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> 값으로 설정됩니다.

ParamsFor.ReadWrite.Flags 멤버에는 Irp-Flags>에 IRP_PAGING_IO 비트가 있는 경우 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 구조를 해제할 수 있습니다. FCB 구조는 RxReleaseFcbResourceForThreadInMRx를 호출하여 해제할 수 있습니다.

MRxQueryDirectory 루틴은 RDBSS에서 파일 디렉터리에 대한 네트워크 미니 리디렉터 쿼리 정보를 요청하기 위해 호출됩니다.

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 멤버는 0이 아닌 값으로 설정됩니다.

IrpSp-Flags>에 SL_RETURN_SINGLE_ENTRY 비트가 있는 경우 QueryDirectory.ReturnSingleEntry 멤버는 0이 아닌 값으로 설정됩니다.

IrpSp-Flags>에 SL_INDEX_SPECIFIED 비트가 있는 경우 QueryDirectory.IndexSpecified 멤버는 0이 아닌 값으로 설정됩니다.

연결된 FOBX의 UnicodeQueryTemplate.Buffer 멤버가 NULL이고 FOBX의 Flags 멤버에 FOBX_FLAG_MATCH_ALL 비트가 없으면 QueryDirectory.InitialQuery 멤버가 0이 아닌 값으로 설정됩니다.

예를 들어 와일드 카드 쿼리(".")의 경우 RDBSS는 연결된 FOBX의 UnicodeQueryTemplate.Buffer 멤버를 전달된 야생 카드 쿼리로 설정합니다.

MRxQueryDirectory에서 반환할 때 RX_CONTEXT 구조체의 PostRequest 멤버가 TRUE이면 RDBSS는 FSP(파일 시스템 프로세스)에서 처리하기 위해 RX_CONTEXT 구조를 작업자 큐에 전달하는 RxFsdPostRequest를 호출합니다.

MRxQueryEaInfo 루틴은 RDBSS에서 호출되어 네트워크 미니 리디렉터 쿼리가 파일 시스템 개체에 대한 확장된 특성 정보를 요청합니다.

RDBSS는 IRP_MJ_QUERY_EA 요청 수신에 대한 응답으로 MRxQueryEaInfo에 대한 호출을 실행합니다.

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 멤버가 0이 아닌 값으로 설정됩니다.

IrpSp-Flags>에 SL_RETURN_SINGLE_ENTRY 비트가 있는 경우 QueryEa.ReturnSingleEntry 멤버가 0이 아닌 값으로 설정됩니다.

IrpSp-Flags>에 SL_INDEX_SPECIFIED 비트가 설정되어 있으면 QueryEa.IndexSpecified 멤버가 0이 아닌 값으로 설정됩니다.

성공하면 MRxQueryEaInfo는 RX_CONTEXT 구조체의 Info.LengthRemaining 멤버를 반환된 확장 특성 정보의 길이로 설정하고 Fobx-OffsetOfNextEaToReturn> 멤버도 업데이트해야 합니다. MRxQueryEaInfo에 대한 호출이 성공하면 RDBSS는 IRP의 IoStatus.Information 멤버를 IrpSp-Parameters.QueryEa.Length>에서 RX_CONTEXT Info.LengthRemaining 멤버를 뺀 값으로 설정합니다.

MRxQueryFileInfo 루틴은 RDBSS에서 호출되어 네트워크 미니 리트리버가 파일 시스템 개체에 대한 파일 정보를 쿼리하도록 요청합니다.

RDBSS는 IRP_MJ_QUERY_INFORMATION 요청 수신에 대한 응답으로 MRxQueryFileInfo에 대한 호출을 실행합니다.

MRxQueryFileInfo를 호출하기 전에 RDBSS는 RxContext 매개 변수가 가리키는 RX_CONTEXT 구조체에서 다음 멤버를 수정합니다.

Info.FileInformationClass 멤버는 요청된 FILE_INFORMATION_CLASS 값인 IrpSp-Parameters.QueryFile.FileInformationClass>로 설정됩니다.

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 비트를 사용하는 요청을 지원하지 않습니다. 네트워크 미니 리트리렉터에서는 SL_INDEX_SPECIFIED 비트의 IrpSp-Flags>가 설정된 MRxQueryFileInfo에 대한 호출을 받지 않습니다.

MRxQueryQuotaInfo 루틴은 RDBSS에서 호출되어 네트워크 미니 리트리버 쿼리 할당량 정보를 파일 시스템 개체에 요청합니다.

RDBSS는 IRP_MJ_QUERY_QUOTA 요청 수신에 대한 응답으로 MRxQueryQuotaInfo에 대한 호출을 실행합니다.

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 멤버가 0이 아닌 값으로 설정됩니다.

IrpSp-Flags>에 SL_RETURN_SINGLE_ENTRY 비트 집합이 있는 경우 QueryQuota.ReturnSingleEntry 멤버가 0이 아닌 값으로 설정됩니다.

IrpSp-Flags>에 SL_INDEX_SPECIFIED 비트 집합이 있는 경우 QueryQuota.IndexSpecified 멤버가 0이 아닌 값으로 설정됩니다.

성공하면 네트워크 미니 리다이렉터에서 RX_CONTEXT 구조체의 Info.LengthRemaining 멤버를 반환할 할당량 정보의 길이로 설정해야 합니다. MRxQueryQuotaInfo 호출에 성공하면 RDBSS는 IRP의 IoStatus.Information 멤버를 RX_CONTEXT Info.LengthRemaining 멤버로 설정합니다.

MRxQueryQuotaInfo 호출에 성공하면 RX_CONTEXT 구조체의 InformationToReturn 멤버를 반환된 할당량 정보의 길이로 설정해야 합니다. 호출에 실패하면 RX_CONTEXT InformationToReturn 멤버를 0으로 설정해야 합니다.

MRxQuerySdInfo 루틴은 RDBSS에서 호출되어 네트워크 미니 리디렉터에서 파일 시스템 개체에 대한 보안 설명자 정보를 쿼리하도록 요청합니다.

RDBSS는 IRP_MJ_QUERY_SECURITY 요청 수신에 대한 응답으로 MRxQuerySdInfo에 대한 호출을 실행합니다.

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 멤버로 설정합니다.

MRxQueryVolumeInfo 루틴은 RDBSS에서 네트워크 미니 리트리버 쿼리 볼륨 정보를 요청하기 위해 호출됩니다.

RDBSS는 다음 경우 중 하나에서 MRxQueryVolumeInfo 호출을 실행합니다.

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 구조체의 크기로 설정합니다.

MRxSetEaInfo 루틴은 RDBSS에서 호출되어 네트워크 미니 리디렉터에서 파일 시스템 개체에 대한 확장 특성 정보를 설정하도록 요청합니다.

RDBSS는 IRP_MJ_SET_EA 요청 수신에 대한 응답으로 MRxSetEaInfo에 대한 호출을 실행합니다.

MRxSetEaInfo를 호출하기 전에 RDBSS는 RxContext 매개 변수가 가리키는 RX_CONTEXT 구조체에서 다음 멤버를 수정합니다.

Info.Buffer 멤버는 I/O 요청 패킷에서 사용자 버퍼로 설정됩니다. 필요한 경우 RDBSS에서 이 버퍼를 이미 잠갔습니다.

Info.LengthRemaining 멤버는 IrpSp-Parameters.QueryEa.Length>로 설정됩니다.

MRxSetFileInfo 루틴은 RDBSS에서 호출되어 네트워크 미니 리트리버가 파일 시스템 개체에 대한 파일 정보를 설정하도록 요청합니다.

RDBSS는 IRP_MJ_SET_INFORMATION 요청 수신에 대한 응답으로 MRxSetFileInfo에 대한 호출을 실행합니다.

MRxSetFileInfo를 호출하기 전에 RDBSS는 RxContext 매개 변수가 가리키는 RX_CONTEXT 구조체에서 다음 멤버를 수정합니다.

Info.FileInformationClass 멤버는 지정된 FILE_INFORMATION_CLASS 값인 IrpSp-Parameters.SetFile.FileInformationClass>로 설정됩니다.

Info.Buffer 멤버가 Irp-AssociatedIrp.SystemBuffer>로 설정됩니다.

Info.Length 멤버는 IrpSp-Parameters.SetFile.Length>로 설정됩니다.

MRxSetFileInfoAtCleanup 루틴은 네트워크 미니 리트리버가 정리 시 파일 시스템 개체에 파일 정보를 설정하도록 요청하기 위해 RDBSS에서 호출됩니다.

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 반환하도록 선택할 수 있습니다. 파일 크기 또는 타임스탬프에 대한 변경 내용은 정리 작업 중에 처리됩니다.

MRxSetQuotaInfo 루틴은 RDBSS에서 네트워크 미니 리트리버가 파일 시스템 개체에 대한 할당량 정보를 설정하도록 요청하기 위해 호출됩니다.

RDBSS는 IRP_MJ_SET_QUOTA 요청 수신에 대한 응답으로 MRxSetQuotaInfo에 대한 호출을 실행합니다.

MRxSetQuotaInfo를 호출하기 전에 RDBSS는 RxContext 매개 변수가 가리키는 RX_CONTEXT 구조에서 다음 멤버를 수정합니다.

Info.Buffer 멤버는 I/O 요청 패킷에서 사용자 버퍼로 설정됩니다. 이 버퍼는 필요한 경우 RDBSS에 의해 이미 잠겨 있습니다.

Info.LengthRemaining 멤버가 IrpSp-Parameters.SetQuota.Length>로 설정됩니다.

네트워크 미니 리디렉터에서 파일 시스템 개체에 대한 보안 설명자 정보를 설정하도록 요청하기 위해 RDBSS에서 MRxSetSdInfo 루틴을 호출합니다.

RDBSS는 IRP_MJ_SET_SECURITY 요청 수신에 대한 응답으로 MRxSetSdInfo에 대한 호출을 실행합니다.

MRxSetSdInfo를 호출하기 전에 RDBSS는 RxContext 매개 변수가 가리키는 RX_CONTEXT 구조에서 다음 멤버를 수정합니다.

SetSecurity.SecurityInformation 멤버가 IrpSp-Parameters.SetSecurity.SecurityInformation>으로 설정됩니다.

SetSecurity.SecurityDescriptor 멤버가 IrpSp-Parameters.SetSecurity.SecurityDescriptor>로 설정됩니다.

MRxSetVolumeInfo 루틴은 RDBSS에서 네트워크 미니 리트리버가 볼륨 정보를 설정하도록 요청하기 위해 호출됩니다.

RDBSS는 IRP_MJ_SET_VOLUME_INFORMATION 요청 수신에 대한 응답으로 MRxSetVolumeInfo를 호출합니다.

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가 열려 있는 요청을 기존 파일 시스템 개체로 축소해야 하는지 여부를 네트워크 미니 리디렉터에 표시하도록 요청하기 위해 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에서 축소를 허용하지 않습니다.

MRxTruncate 루틴은 RDBSS에서 네트워크 미니 리트리버가 파일 시스템 개체의 콘텐츠를 자르도록 요청하기 위해 호출됩니다.

다음 조건이 모두 충족되면 MRxTruncate가 정리 작업의 일부로 호출됩니다.

  • 파일 개체는 디스크 파일 또는 디렉터리에 해당합니다.

  • 마지막 정리 호출이며 파일 개체가 잘림으로 표시되었습니다.

FCB 구조체의 fcbstate 멤버에 FCB_STATE_TRUNCATE_ON_CLOSE 비트 집합이 있는 경우 파일 개체가 잘림으로 표시됩니다. RDBSS는 나중에 캐시 맵을 초기화하지 않습니다.

MRxTruncate를 호출한 다음 정리 작업의 일부로 MRxCleanupFobx를 호출합니다.

RDBSS는 MRxTruncate의 반환 값을 무시합니다.

네트워크 미니 리디렉터에서 파일 시스템 개체의 내용을 자르도록 요청하기 위해 RDBSS에서 MRxZeroExtend 루틴을 호출합니다.

파일 개체가 삭제로 표시되지 않고 파일 개체가 페이징 파일이 아닌 경우 MRxZeroExtend가 정리 작업의 일부로 호출됩니다. MRxZeroExtend 는 유효한 데이터 길이와 파일 크기 사이의 부분이 0 확장되었는지 확인하기 위해 호출됩니다. MRxZeroExtend를 호출한 후 RDBSS는 FCB 구조체의 Header.FileSize.QuadPart 멤버와 동일한 FCB 구조체의 Header.ValidDataLength.QuadPart 멤버를 설정합니다.

MRxZeroExtend를 호출한 후 정리 작업의 일부로 MRxCleanupFobx를 호출합니다.

RDBSS는 MRxZeroExtend의 반환 값을 무시합니다.

MRxCleanupFobx 루틴은 RDBSS에 의해 호출되어 네트워크 미니 리디렉션자에게 파일 시스템 개체 확장자를 닫도록 요청합니다. RDBSS는 파일 개체에 대한 IRP_MJ_CLEANUP 요청을 수신하는 것에 대한 응답으로 이 호출을 실행합니다.

MRxCleanupFobx는 파일 개체에 대한 정리 및 닫기 작업의 일부로 RDBSS에서 호출됩니다.

MRxCleanupFobx는 호출을 다시 시도해야 함을 나타내는 STATUS_RETRY 값을 반환할 수 없습니다. 재시도 루프가 필요한 경우 네트워크 미니 리트리버가 MRxCleanupFobx 루틴에서 내부적으로 처리해야 합니다.

요구 사항

요구 사항
대상 플랫폼 데스크톱
머리글 mrx.h(Mrx.h 포함)

추가 정보

MRxAreFilesAliased

MRxCleanupFobx

MRxCollapseOpen

MRx만들기

MRxDeallocateForFobx

MRxDeallocateForFobx

MRxExtendForCache

MRxExtendForNonCache

MRxFlush

MRxForceClosed

MRxIsLockRealizable

MRxShouldTryToCollapseThisOpen

MRxTruncate

MRxZeroExtend

RxFinalizeNetFCB