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-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 포함) |