IOCTL_CDROM_EXCLUSIVE_ACCESS IOCTL(ntddcdrm.h)

IOCTL_CDROM_EXCLUSIVE_ACCESS 요청은 CD-ROM 클래스 드라이버에 다음을 지시합니다.

  • CD-ROM 디바이스의 액세스 상태를 보고합니다.
  • 단독 액세스를 위해 CD-ROM 디바이스를 잠급 수 있습니다.
  • 단독 액세스를 위해 CD-ROM 디바이스의 잠금을 해제합니다.
A valid FileObject handle must exist in order for this IOCTL to succeed. The FileObject handle protects the system from unexpected application termination or accidental acquisition of an exclusive access lock without subsequent release of the exclusive access lock. A valid FileObject handle is necessary because when an application closes, the CD-ROM class driver will receive CLEANUP and CLOSE I/O Request Packets (IRPs), which it can use to automatically release an exclusive access lock obtained by that handle. This simple method protects against the majority of accidental releases of exclusive access. Any methods used to avoid this functionality may reduce the safety and effectiveness of the exclusive access locking method.

주 코드

IRP_MJ_DEVICE_CONTROL

입력 버퍼

호출자가 요청하는 작업에 따라 호출자는 Irp->AssociatedIrp.SystemBuffer에서 다음 구조 중 하나를 입력으로 제공해야 합니다.

입력 버퍼 길이

IO_STACK_LOCATION 구조체의 Parameters.DeviceIoControl.InputBufferLength 멤버는 사용자가 할당한 입력 버퍼의 크기(바이트)를 나타냅니다.

출력 버퍼

호출자가 CD-ROM 디바이스(RequestTypeExclusiveAccessQueryState = )의 단독 액세스 상태를 요청하는 경우 CD-ROM 클래스 드라이버는 LockState 멤버가 디바이스의 액세스 상태를 나타내는 Irp->AssociatedIrp.SystemBuffer의 버퍼에 CDROM_EXCLUSIVE_LOCK_STATE 형식 구조를 반환합니다.

출력 버퍼 길이

I/O 스택 위치(IO_STACK_LOCATION)의 Parameters.DeviceIoControl.OutputBufferLength 멤버는 출력 버퍼의 크기(바이트)를 나타냅니다.

상태 블록

정보 필드는 반환되는 바이트 수로 설정됩니다. 요청이 성공하면 상태 필드가 STATUS_SUCCESS 설정됩니다.

요청이 실패하면 상태 필드가 다음 오류 메시지 중 하나로 설정될 수 있습니다.

STATUS_ACCESS_DENIED(Windows 오류 코드: ERROR_ACCESS_DENIED)

단독 액세스를 위해 디바이스가 이미 잠겨 있습니다.

STATUS_BUFFER_TOO_SMALL(Windows 오류 코드: ERROR_INSUFFICIENT_BUFFER)

출력 버퍼가 ExclusiveAccessQueryState 요청에 비해 너무 작습니다.

STATUS_INFO_LENGTH_MISMATCH(Windows 오류 코드: ERROR_BAD_LENGTH)

입력 버퍼가 너무 작습니다.

STATUS_INVALID_DEVICE_REQUEST(Windows 오류 코드: ERROR_INVALID_FUNCTION)

CD-ROM 클래스 드라이버는 다음 두 오류 중 하나가 발생할 때 이 상태 코드를 반환합니다.

  • 호출자가 PASSIVE_LEVEL 이외의 IRQL 수준에서 요청을 했습니다.
  • 호출자는 전용 모드가 아닌 디바이스의 잠금을 해제하기 위해 RequestTypeExclusiveAccessUnlockDevice = 로 요청을 보냈습니다.

STATUS_INVALID_DEVICE_STATE(Windows 오류 코드: ERROR_BAD_COMMAND)

클래스 드라이버가 탑재된 파일 시스템 드라이버에 대한 검사를 일시 중단하도록 지정하지 않고 파일 시스템 드라이버가 이 디바이스에 탑재된 동안 호출자가 디바이스를 잠그려고 했습니다. 탑재된 파일 시스템 드라이버에 대한 검사를 일시 중단하려면 호출자가 CDROM_EXCLUSIVE_ACCESS Flags 멤버를 1로 설정해야 합니다.

STATUS_INVALID_HANDLE(Windows 오류 코드: ERROR_INVALID_HANDLE)

CD-ROM 클래스 드라이버는 다음 두 오류 중 하나가 발생할 때 이 상태 코드를 반환합니다.

  • 요청을 추적하는 데 필요한 파일 개체를 사용할 수 없습니다. CD-ROM 클래스 드라이버가 이 호출자로부터 파일 개체를 만들라는 요청을 받지 못했습니다.
  • 호출자가 디바이스에 대한 단독 액세스 권한이 없더라도 호출자는 RequestTypeExclusiveAccessUnlockDevice를 사용하여 디바이스 잠금을 해제하는 요청을 보냈습니다. =

STATUS_INVALID_PARAMETER(Windows 오류 코드: ERROR_INVALID_PARAMETER)

CD-ROM 클래스 드라이버는 다음 두 오류 중 하나가 발생할 때 이 상태 코드를 반환합니다.

  • 지정된 RequestTypeEXCLUSIVE_ACCESS_REQUEST_TYPE 유효한 멤버가 아닙니다.
  • CDROM_EXCLUSIVE_LOCK CallerName 멤버의 호출자 이름 문자열이 명명 규칙을 위반합니다. CallerName 은 영숫자(A - Z, a - z, 0 - 9), 공백, 마침표, 쉼표, 콜론(:), 세미콜론(;), 하이픈(-) 및 밑줄(_)과 같은 문자를 포함하는 NULL로 끝나는 문자열이어야 합니다. 문자열의 길이는 문자열의 끝에 있는 NULL 을 포함하여 CDROM_EXCLUSIVE_CALLER_LENGTH 바이트보다 작아야 합니다.

요구 사항

   
헤더 ntddcdrm.h(Ntddcdrm.h 포함)

참고 항목

CDROM_EXCLUSIVE_ACCESS

CDROM_EXCLUSIVE_LOCK

CDROM_EXCLUSIVE_LOCK_STATE

EXCLUSIVE_ACCESS_REQUEST_TYPE

IO_STACK_LOCATION