MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] 루틴
MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] 루틴은 RDBSS에서 호출되어 디렉터리 변경 알림 작업에 대한 네트워크 미니 리디렉터에 요청을 실행합니다.
구문
PMRX_CALLDOWN MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY];
NTSTATUS MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY](
_Inout_ PRX_CONTEXT RxContext
)
{ ... }
매개 변수
RxContext [in, out]
RX_CONTEXT 구조체에 대한 포인터입니다. 이 매개 변수에는 작업을 요청하는 IRP가 포함되어 있습니다.
반환 값
MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] 는 성공 시 STATUS_SUCCESS 반환하거나 다음 중 하나와 같은 적절한 NTSTATUS 값을 반환합니다.
반환 코드 | 설명 |
---|---|
STATUS_FILE_CLOSED | FCB 구조를 획득했지만 관련 SRV_OPEN 구조가 닫혔습니다. |
STATUS_INSUFFICIENT_RESOURCES | 요청을 완료할 리소스가 부족했습니다. |
STATUS_INVALID_DEVICE_REQUEST | 잘못된 디바이스 요청이 지정되었습니다. |
STATUS_INVALID_PARAMETER | 잘못된 매개 변수가 RxContext에 지정되었습니다. |
STATUS_NOT_IMPLEMENTED | 이 루틴은 구현되지 않습니다. |
STATUS_NOT_SUPPORTED | 지정된 요청은 네트워크 미니 리다이렉터에서 지원되지 않습니다. |
설명
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를 호출하여 해제할 수 있습니다.
요구 사항
대상 플랫폼 |
데스크톱 |
헤더 |
Mrx.h(Mrx.h 포함) |
추가 정보
MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK]
MRxLowIOSubmit[LOWIO_OP_FSCTL]
MRxLowIOSubmit[LOWIO_OP_IOCTL]
MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK]
MRxLowIOSubmit[LOWIO_OP_UNLOCK]
MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE]