다음을 통해 공유


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 가 제대로 초기화된다고 가정해서는 안 됩니다. instance 경우 사용자 모드 애플리케이션이 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