다음을 통해 공유


IOCTL_STORAGE_BREAK_RESERVATION IOCTL(ntddstor.h)

디스크 예약을 중단합니다. 다중 초기자("클러스터형") 시스템에서 단일 컴퓨터는 디스크 리소스를 예약할 수 있으므로 다른 컴퓨터가 디스크에 액세스할 수 없습니다. 컴퓨터가 리소스를 적시에 해제할 수 없거나 해제할 수 없는 경우 강제로 디스크 예약을 제거하는 수단이 필요합니다.

시스템이 예약 디스크 리소스를 해제하도록 강제하는 한 가지 방법은 버스를 다시 설정하는 것입니다. 실제로 SCSI 포트 드라이버에서 버스 어댑터를 관리하는 스토리지 디바이스의 경우 IOCTL_STORAGE_BREAK_RESERVATION 요청은 단순히 버스를 재설정하여 예약된 리소스를 모두 해제하는 IOCTL_STORAGE_RESET_BUS 동일합니다.

버스 어댑터가 STOR 포트 드라이버에서 관리되는 스토리지 디바이스의 경우 이 I/O 제어 코드는 디스크 예약을 중단하는 더 나은 기술을 제공합니다. 이 기술을 "계층적 재설정"이라고 합니다. IOCTL_STORAGE_BREAK_RESERVATION 요청을 받으면 STOR 포트 드라이버는 먼저 논리 단위 자체를 다시 설정하여 논리 단위의 예약을 제거하려고 시도합니다. 실패하면 STOR 포트 드라이버는 논리 단위의 부모인 대상 디바이스를 다시 설정하려고 시도합니다. 대상 디바이스를 다시 설정하는 데 실패할 때만 포트 드라이버가 버스를 다시 설정합니다.

버스를 다시 설정하면 모든 디바이스 예약 및 전송 속도 설정이 지워지며, 이 설정을 다시 협상해야 합니다. 이는 시간이 많이 걸리는 작업이므로 IOCTL_STORAGE_BREAK_RESERVATION 항상 간단한 버스 재설정에 선호됩니다.

호출자는 버스 재설정을 실행하기 위한 읽기 권한만 필요합니다.

보류 중인 SRB의 SrbStatus 플래그는 SRB_STATUS_BUS_RESET 설정됩니다.

주 코드

IRP_MJ_DEVICE_CONTROL

입력 버퍼

Irp-AssociatedIrp.SystemBuffer>의 버퍼에는 재설정할 버스를 식별하는 STORAGE_BREAK_RESERVATION_REQUEST 구조체가 포함되어 있습니다.

입력 버퍼 길이

STORAGE_BREAK_RESERVATION_REQUEST 구조체의 길이입니다.

출력 버퍼

없음

출력 버퍼 길이

없음

상태 블록

정보 필드는 0으로 설정됩니다. 상태 필드는 STATUS_SUCCESS 또는 STATUS_INSUFFICIENT_RESOURCES, STATUS_NOT_IMPLEMENTED 또는 STATUS_INVALID_DEVICE_REQUEST 설정됩니다.

요구 사항

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

추가 정보

IOCTL_STORAGE_RESET_BUS

STORAGE_BREAK_RESERVATION_REQUEST