IOCTL_STORAGE_PERSISTENT_RESERVE_OUT IOCTL(ntddstor.h)

일반 스토리지 클래스 드라이버(classpnp.sys)는 영구 예약 아웃 명령을 실행하기 위한 I/O 컨트롤(IOCTL) 인터페이스를 노출합니다. 영구 예약 출력 명령이 수신될 때 스토리지 디바이스의 동작은 SCSI 기본 명령 - 2(SPC-2) 사양에 설명되어 있습니다. IOCTL 인터페이스를 사용하려면 호출자가 영구 예약 아웃 명령에 대한 물리적 디바이스에 대한 읽기/쓰기 액세스 권한이 있어야 합니다. 사용자 모드 애플리케이션, 서비스 및 커널 모드 드라이버는 이 IOCTL을 사용하여 영구 예약을 제어할 수 있습니다. 드라이버에서 호출되는 경우 IRQL DISPATCH_LEVEL 실행되는 스레드에서 이 IOCTL < 을 호출해야 합니다. 이 IOCTL은 FILE_READ_ACCESS 및 FILE_WRITE_ACCESS 정의되며, 디바이스 핸들에 영구 예약 출력 명령을 실행하기 위한 읽기 및 쓰기 권한이 모두 있어야 합니다.

주 코드

IRP_MJ_DEVICE_CONTROL

입력 버퍼

Irp-AssociatedIrp.SystemBuffer>의 버퍼에는 PERSISTENT_RESERVE_COMMAND 구조체가 포함되어 있습니다. 비페이지 풀에서 버퍼를 할당해야 하며 대상 디바이스 및 어댑터에 맞게 올바르게 정렬해야 합니다.

PR_OUT. ServiceAction은 다음 중 하나일 수 있습니다.

  • RESERVATION_ACTION_REGISTER
  • RESERVATION_ACTION_RESERVE
  • RESERVATION_ACTION_RELEASE
  • RESERVATION_ACTION_CLEAR
  • RESERVATION_ACTION_PREEMPT
  • RESERVATION_ACTION_PREEMPT_ABORT
  • RESERVATION_ACTION_REGISTER_IGNORE_EXISTING

PR_OUT. 범위는 다음 중 하나일 수 있습니다.

  • RESERVATION_SCOPE_LU
  • RESERVATION_SCOPE_ELEMENT

PR_OUT. 형식은 다음 중 하나일 수 있습니다.

  • RESERVATION_TYPE_WRITE_EXCLUSIVE
  • RESERVATION_TYPE_EXCLUSIVE
  • RESERVATION_TYPE_WRITE_EXCLUSIVE_REGISTRANTS
  • RESERVATION_TYPE_EXCLUSIVE_REGISTRANTS

PR_OUT. ParameterList는 PRO_PARAMETER_LIST 구조를 유지하는 데 사용됩니다. 이 구조체는 필수이며 나머지 PERSISTENT_RESERVE_COMMAND 구조체와 연속되어야 합니다.

입력 버퍼 길이

PERSISTENT_RESERVE_COMMAND 구조체의 길이입니다.

출력 버퍼

없음

출력 버퍼 길이

없음

상태 블록

정보 필드는 0으로 설정됩니다.

상태 필드는 다음 값 중 하나로 설정됩니다.

의미
STATUS_DEVICE_BUSY(ERROR_BUSY) 예약 충돌로 인해 명령이 실패했습니다(자세한 내용은 SCSI 기본 명령 - 2(SPC-2) 사양 참조).
STATUS_INFO_LENGTH_MISMATCH IOCTL의 입력 버퍼 길이가 sizeof(PERSISTENT_RESERVE_COMMAND)보다 작거나 PERSISTENT_RESERVE_COMMAND 데이터 구조에 지정된 크기가 sizeof(PERSISTENT_RESERVE_COMMAND)보다 작습니다.
STATUS_INVALID_DEVICE_REQUEST(ERROR_INVALID_FUNCTION) I/O 제어 코드(IOCTL_STORAGE_PERSISTENT_RESERVE_OUT)는 스토리지 드라이버에서 지원되지 않습니다.
STATUS_INVALID_PARAMETER(ERROR_INVALID_PARAMETER) 입력 버퍼 구조의 크기가 잘못되었거나 채워집니다.
STATUS_INVALID_USER_BUFFER(ERROR_INVALID_USER_BUFFER) 입력 버퍼가 디바이스 또는 어댑터에 대해 올바르게 정렬되지 않았습니다. 이 상태 드라이버가 스토리지 스택에 IOCTL을 보낼 때만 반환할 수 있습니다. I/O 관리자가 자동으로 버퍼를 정렬하기 때문에 사용자 모드 애플리케이션이 DeviceIoControl API를 통해 IOCTL을 보낼 때 이 상태 반환되지 않습니다.
STATUS_IO_DEVICE_ERROR(ERROR_IO_DEVICE) 디바이스는 영구 예약 출력 명령을 지원하지 않습니다.
STATUS_SUCCESS 작업이 완료되었습니다.

요구 사항

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