IOCTL_STORAGE_PERSISTENT_RESERVE_IN IOCTL(ntddstor.h)
제네릭 스토리지 클래스 드라이버(classpnp.sys)는 영구 예약을 실행하기 위한 IOCTL(I/O 컨트롤) 인터페이스를 노출합니다. 영구 예약 In 명령이 수신될 때 스토리지 디바이스의 동작은 SCSI 기본 명령 - 2(SPC-2) 사양에 설명되어 있습니다. IOCTL 인터페이스를 사용하려면 호출자가 영구 예약 In 명령에 대한 물리적 디바이스에 대한 읽기 권한이 있어야 합니다. 사용자 모드 애플리케이션, 서비스 및 커널 모드 드라이버는 이 IOCTL을 사용하여 영구 예약을 제어할 수 있습니다. 드라이버에서 호출되는 경우 IRQL < DISPATCH_LEVEL 실행되는 스레드에서 이 IOCTL을 호출해야 합니다. 이 IOCTL은 FILE_READ_ACCESS 정의되며, 디바이스 핸들에 영구 예약 명령을 실행하기 위한 읽기 권한이 있어야 합니다.
주 코드
입력 버퍼
Irp->AssociatedIrp.SystemBuffer의 버퍼에는 PERSISTENT_RESERVE_COMMAND 구조체가 포함되어 있습니다. 페이지가 없는 풀에서 버퍼를 할당해야 하며 대상 디바이스 및 어댑터에 대해 버퍼를 올바르게 정렬해야 합니다.
PR_IN. ServiceAction은 다음 중 하나일 수 있습니다.
- RESERVATION_ACTION_READ_KEYS
- RESERVATION_ACTION_READ_RESERVATIONS
입력 버퍼 길이
의 길이입니다.
출력 버퍼
For PR_IN. ServiceAction = RESERVATION_ACTION_READ_KEYS 출력 버퍼는 PRI_REGISTRATION_LIST 구조를 포함하며 적어도 sizeof(PRI_REGISTRATION_LIST)여야 합니다.
For PR_IN. ServiceAction = RESERVATION_ACTION_READ_RESERVATIONS 출력 버퍼는 PRI_RESERVATION_LIST 구조를 포함하며 적어도 sizeof(PRI_RESERVATION_LIST)여야 합니다.
할당된 버퍼가 너무 작아서 모든 영구 예약 데이터를 반환하지 않으면 성공이 반환되고 매개 변수 목록 AdditionalLength 필드에 필요한 크기가 반환됩니다.
출력 버퍼 길이
의 길이입니다.
상태 블록
정보 필드는 출력 버퍼의 크기로 설정됩니다. ServiceAction = RESERVATION_ACTION_READ_KEYS 출력 버퍼는 PRI_REGISTRATION_LIST 구조체입니다. ServiceAction = RESERVATION_ACTION_READ_RESERVATIONS 경우 출력 버퍼는 PRI_RESERVATION_LIST 구조입니다.
상태 필드는 다음 중 하나로 설정됩니다.
STATUS_BUFFER_OVERFLOW(ERROR_MORE_DATA)
출력 버퍼가 너무 작아서 영구 예약 데이터를 저장할 수 없습니다. 출력 버퍼의 AdditionalLength 필드에는 반환할 데이터의 크기가 포함됩니다.
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_IN)는 스토리지 드라이버에서 지원되지 않습니다.
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)
디바이스는 영구 예약 In 명령을 지원하지 않습니다.
STATUS_SUCCESS
작업이 완료되었습니다.
요구 사항
| 헤더 | ntddstor.h(Ntddstor.h 포함) |
피드백
다음에 대한 사용자 의견 제출 및 보기