다음을 통해 공유


플러그 앤 플레이용 기존 SCSI 클래스 드라이버 변환

PnP 드라이버로 성공적으로 실행하려면 기존 SCSI 클래스 드라이버를 다음과 같이 수정해야 합니다.

  • 드라이버 초기화 코드는 플러그 앤 플레이 드라이버의 초기화 규칙을 따라야 합니다. 기존 SCSI 드라이버의 DriverEntry 루틴의 기능은 스토리지 클래스 드라이버의 DriverEntry, AddDeviceDispatchPnP 루틴으로 나뉩니다. Storage 클래스 드라이버의 DriverEntry 루틴, Storage 클래스 드라이버의 AddDevice 루틴및 스토리지 클래스 드라이버 PnP 시작 처리설명한 대로.

  • SRB를 빌드하는 코드는 PathId, TargetId, 및 Lun 필드를 대상 디바이스 주소로 설정하지 말고, 이러한 필드를 0xFF로 초기화해야 합니다. 디바이스 주소는 디바이스를 나타내는 PDO에서 암시적이며 드라이버는 이러한 디바이스 개체와만 통신해야 하므로 클래스 드라이버가 디바이스 주소를 제공할 필요가 없습니다.

  • IOCTL_SCSI_GET_INQUIRY_DATAIOCTL_SCSI_GET_CAPABILITIES 요청을 실행하여 SCSI 조회 및 기능 데이터를 가져오는 코드는 디바이스 및 어댑터 설명자를 검색하는 IOCTL_STORAGE_QUERY_PROPERTY 요청을 대신 발급해야 합니다.

  • 드라이버는 디바이스를 시작, 중지 및 제거하기 위해 PnP 요청을 처리해야 하며, 처리하면 데이터 전송 또는 시스템 작업을 방해할 경우 이러한 요청에 실패하는 메커니즘이 있어야 합니다. 예를 들어 디바이스에 시스템 페이지 파일이 포함된 경우 드라이버는 쿼리 제거, 쿼리 중지 또는 중지 요청에 실패해야 합니다. 이러한 드라이버는 디바이스의 페이지 파일 수를 유지하기 위해 IRP_MJ_PNP의 페이징 알림 요청(IRP_MN_DEVICE_USAGE_NOTIFICATION 및 알림 유형 DeviceUsageTypePaging)을 처리해야 합니다.

  • 드라이버는 디바이스의 전원 상태 변경 요청(IRP_MN_QUERY_POWERIRP_MN_SET_POWERIRP_MJ_POWER)을 처리해야 하며 전원 상태 전환 중에 디바이스에 대한 I/O를 차단해야 합니다.