Storport I/O 모델에서 매핑 버퍼 사용

SCSI 포트 I/O 모델에서 미니포트 드라이버는 포트 드라이버가 SRB I/O 버퍼에 대한 시스템 가상 메모리를 할당하고 매핑하도록 요구할 수 있습니다. 미니포트 드라이버는 SCSI(PORT_CONFIGURATION_INFORMATION) 구조체의 MapBuffers 멤버를 TRUE로 설정하여 I/O 버퍼를 매핑하도록 포트 드라이버를 구성합니다.

포트 드라이버가 MapBuffersTRUE로 설정하여 구성된 경우 미니포트 드라이버가 수신하는 각 SRB의 DataBuffer 멤버에는 I/O 버퍼의 시스템 가상 주소가 포함됩니다. 이 주소는 시스템의 모든 프로세스의 주소 공간에서 유효합니다. 또한 미니포트 드라이버는 I/O 버퍼에 직접 액세스할 수 있습니다.

반면 미니포트 드라이버가 MapBuffersFALSE로 설정하는 경우 DataBuffer 에는 미니포트 드라이버가 실행되는 컨텍스트에서 반드시 유효하지 않은 특정 프로세스에 속하는 가상 주소가 포함됩니다. 따라서 미니포트 드라이버는 DataBuffer 가 가리키는 메모리 영역에 액세스할 수 없습니다.

Storport I/O 모델에서 미니포트 드라이버는 DMA 기반 I/O를 지원해야 합니다. DMA를 사용하는 경우 미니포트 드라이버가 시스템 전체 가상 주소를 통해 간접적으로 SRB의 I/O 버퍼에 액세스할 필요가 없습니다. 이 보기에서 Storport I/O 모델은 STORPORT(PORT_CONFIGURATION_INFORMATION)의 MapBuffers 멤버에 대해 다른 값 집합을 정의합니다.

의미

STOR_MAP_NO_BUFFERS

Storport 드라이버는 모든 유형의 SRB에 대한 데이터 버퍼를 매핑하지 않습니다. 따라서 미니포트 드라이버는 수신하는 SRB에서 DataBuffer 멤버가 가리키는 데이터에 직접 액세스해서는 안 됩니다.

STOR_MAP_ALL_BUFFERS

현재 이 기능은 구현되지 않습니다. MapBuffers 멤버에 이 값이 할당되면 Storport 드라이버는 이 값을 STOR_MAP_NON_READ_WRITE_BUFFERS 것처럼 해석합니다.

STOR_MAP_NON_READ_WRITE_BUFFERS

Storport 드라이버는 데이터 전송(읽기 및 쓰기) 요청이 아닌 경우 요청에 대한 데이터 버퍼를 매핑합니다. 마찬가지로 미니포트 드라이버는 SRB가 읽기 또는 쓰기 요청에 속하지 않는 경우 SRB의 데이터에 액세스할 수 있습니다.