MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] 루틴
MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] 루틴은 RDBSS에서 호출되어 네트워크 리트리버가 파일 개체에 대한 공유 잠금을 열도록 요청합니다.
구문
PMRX_CALLDOWN MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK];
NTSTATUS MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK](
_Inout_ PRX_CONTEXT RxContext
)
{ ... }
매개 변수
RxContext [in, out]
RX_CONTEXT 구조체에 대한 포인터입니다. 이 매개 변수에는 작업을 요청하는 IRP가 포함되어 있습니다.
반환 값
MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] 는 성공 시 STATUS_SUCCESS 반환하거나 다음 중 하나와 같은 적절한 NTSTATUS 값을 반환합니다.
반환 코드 | 설명 |
---|---|
STATUS_CONNECTION_DISCONNECTED | 연결이 끊어졌습니다. |
STATUS_INSUFFICIENT_RESOURCES | 요청을 완료할 리소스가 부족했습니다. |
STATUS_INVALID_BUFFER_SIZE | 요청된 버퍼 크기가 너무 큽니다. |
STATUS_INVALID_NETWORK_RESPONSE | 원격 서버에서 잘못된 응답을 받았습니다. |
STATUS_INVALID_PARAMETER | 잘못된 매개 변수가 RxContext에 지정되었습니다. |
STATUS_LINK_FAILED | 원격 서버에 다시 연결하여 요청을 완료하지 못했습니다. |
STATUS_NOT_IMPLEMENTED | 이 루틴은 구현되지 않습니다. |
STATUS_SHARING_VIOLATION | 공유 위반이 발생했습니다. |
STATUS_UNSUCCESSFUL | 호출이 실패했습니다. |
설명
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 구조를 해제할 수 있습니다.
요구 사항
대상 플랫폼 |
데스크톱 |
헤더 |
Mrx.h(Mrx.h 포함) |
추가 정보
MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK]
MRxLowIOSubmit[LOWIO_OP_FSCTL]
MRxLowIOSubmit[LOWIO_OP_IOCTL]
MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY]
MRxLowIOSubmit[LOWIO_OP_UNLOCK]
MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE]