다음을 통해 공유


IOCTL_STORAGE_MCN_CONTROL IOCTL(ntddstor.h)

이동식 미디어 디바이스에서 사용자 지정 PnP 이벤트 GUID_IO_MEDIA_ARRIVAL 및 GUID_IO_MEDIA_REMOVAL 일시적으로 전달을 사용하거나 사용하지 않도록 설정합니다. 그러면 호출자가 FILE_READ_ATTRIBUTES 액세스 권한으로 디바이스를 열었고 디바이스가 레지스트리에서 자동 실행을 사용하도록 설정된 경우 디바이스에 대한 미디어 변경 검색(자동 실행)을 사용하거나 사용하지 않도록 설정합니다. 호출자는 읽기 또는 쓰기 액세스를 위해 디바이스를 열지 않아야 합니다. 그렇지 않으면 IOCTL 작업이 실패합니다. 이 IOCTL은 레지스트리의 자동 실행 설정에 영향을 주지 않습니다.

이러한 이동식 미디어 디바이스에 대한 드라이버는 다음을 수행해야 합니다.

  1. 디바이스 개체 확장에서 실제 디바이스당 사용 안 함 요청 수를 유지합니다.
  2. 이 IOCTL을 사용하여 호출할 때 미디어 변경 검색을 사용하지 않도록 설정하는 플래그가 설정되면 개수가 증가합니다. 플래그가 명확하면 개수를 줄입니다.
  3. 사용 안 함 요청 수가 0인 경우에만 미디어 상태가 변경될 때 디바이스에 대한 미디어 변경 이벤트를 설정합니다.
이 IOCTL을 포함하는 IRP_MJ_DEVICE_CONTROL IRP가 SCSI 클래스 드라이버에 전달되면 현재 IO_STACK_LOCATIONFileObject 멤버가 유효한 파일 개체를 가리킵니다. SCSI 클래스 드라이버는 자동 실행을 사용하지 않도록 설정하거나 사용하도록 설정하는 사용자 모드 애플리케이션이 예기치 않게 종료되는 경우 파일 개체가 필요합니다. 이러한 경우 SCSI 클래스 드라이버는 파일 개체를 사용하여 미디어 변경 검색을 다시 활성화합니다. 파일 개체가 적절한 정리에 필요하기 때문에 SCSI 클래스 드라이버는 IO_STACK_LOCATION FileObject 멤버가 유효한 파일 개체를 가리키지 않으면 iRP가 STATUS_INVALID_PARAMETER 오류 메시지와 함께 실패합니다. 사용자 모드 애플리케이션에서 디바이스를 열면 I/O 관리자가 이 멤버를 초기화하지만 커널 모드 드라이버 작성기는 IRP가 사용자 모드 애플리케이션에서 생성될 때 FileObject 제대로 초기화된다고 가정해서는 안 됩니다. 예를 들어 사용자 모드 애플리케이션이 IOCTL을 보내기 전에 읽기 또는 쓰기 액세스에 대한 디바이스를 실수로 열면 디바이스 제어 IRP가 파일 시스템을 통해 라우팅되어 SCSI 클래스 드라이버와 디바이스 드라이버가 디바이스의 파일 개체에 직접 액세스하지 못하게 됩니다.

주 코드

IRP_MJ_DEVICE_CONTROL

입력 버퍼

Irp->AssociatedIrp.SystemBuffer 버퍼에는 부울 값이 포함되어 있으며, TRUE 드라이버가 미디어 변경 검색을 사용하지 않도록 설정해야 함을 나타냅니다.

입력 버퍼 길이

부울의 길이입니다.

출력 버퍼

없음.

출력 버퍼 길이

없음.

상태 블록

정보 필드는 0으로 설정됩니다. 상태 필드는 STATUS_SUCCESS 또는 STATUS_BUFFER_TOO_SMALL, STATUS_INVALID_PARAMETER 또는 STATUS_INVALID_DEVICE_STATE 설정됩니다.

요구 사항

요구
헤더 ntddstor.h(Ntddstor.h 포함)

참고 항목

IO_STACK_LOCATION