StorPortBuildScatterGatherList 함수(storport.h)

StorPortBuildScatterGatherList 루틴은 지정된 데이터 버퍼에 대한 분산/수집 목록을 만듭니다.

구문

ULONG StorPortBuildScatterGatherList(
  [in]      PVOID                        HwDeviceExtension,
  [in]      PVOID                        Mdl,
  [in]      PVOID                        CurrentVa,
  [in]      ULONG                        Length,
  [in]      PPOST_SCATTER_GATHER_EXECUTE ExecutionRoutine,
  [in]      PVOID                        Context,
  [in]      BOOLEAN                      WriteToDevice,
  [in, out] PVOID                        ScatterGatherBuffer,
  [in]      ULONG                        ScatterGatherBufferLength
);

매개 변수

[in] HwDeviceExtension

HBA(호스트 버스 어댑터)의 하드웨어 디바이스 확장에 대한 포인터입니다.

[in] Mdl

데이터 버퍼와 연결된 메모리 페이지를 설명하는 MDL(메모리 설명자 목록)에 대한 포인터입니다.

[in] CurrentVa

데이터 버퍼의 가상 주소입니다.

[in] Length

데이터 버퍼의 길이(바이트)입니다.

[in] ExecutionRoutine

미니포트 드라이버 제공 ExecutionRoutine에 대한 포인터입니다. Storport 드라이버는 분산/수집 목록을 만든 후 이 루틴을 호출합니다. 미니포트 드라이버는 StorPortBuildScatterGatherList 루틴에 대한 호출을 따르는 코드가 아니라 실행 루틴 내에서 분산/수집 목록을 사용하는 모든 작업을 수행해야 합니다.

ExecutionRoutine은 다음과 같이 선언됩니다.

VOID
ExecutionRoutine (
    IN PVOID  *DeviceObject,
    IN PVOID  *Irp,
    IN PSTOR_SCATTER_GATHER_LIST  ScatterGather,
    IN PVOID  Context
    );

DeviceObject

미니포트 드라이버는 이 매개 변수를 무시해야 합니다.

Irp

미니포트 드라이버는 이 매개 변수를 무시해야 합니다.

ScatterGather

지정된 데이터 버퍼에 대한 분산/수집 목록을 포함하는 STOR_SCATTER_GATHER_LIST 구조체에 대한 포인터입니다.

Context

StorPortBuildScatterGatherList 함수의 Context 매개 변수에 지정된 컨텍스트 값입니다.

Storport 드라이버는 IRQL = DISPATCH_LEVEL 미니포트 드라이버의 ExecutionRoutine 을 호출합니다.

[in] Context

포트 드라이버가 ExecutionRoutine 매개 변수에 지정된 실행 루틴에 전달하는 컨텍스트 값입니다. 실행 루틴은 이 값을 사용하여 요청을 고유하게 식별합니다.

[in] WriteToDevice

DMA 전송 방향을 나타내는 값입니다. TRUE 값은 데이터 버퍼에서 디바이스로의 전송을 나타내고 FALSE 값은 디바이스에서 데이터 버퍼로의 전송을 나타냅니다.

[in, out] ScatterGatherBuffer

분산/수집 목록을 수신하는 미니포트 제공 버퍼에 대한 포인터입니다. 미니포트 드라이버는 StorPortAllocatePool 루틴을 호출하여 이 버퍼에 대한 메모리를 할당할 수 있습니다.

[in] ScatterGatherBufferLength

ScatterGatherBuffer 매개 변수가 가리키는 버퍼의 크기(바이트)입니다.

반환 값

StorPortBuildScatterGatherList 는 다음 값 중 하나를 반환합니다.

반환 코드 설명
STOR_STATUS_NOT_IMPLEMENTED
이 함수는 활성 운영 체제에서 구현되지 않습니다.
STOR_STATUS_SUCCESS
루틴이 분산/수집 목록을 성공적으로 생성했음을 나타냅니다.
중요 '주의'를 참조하세요.
 
STOR_STATUS_INVALID_PARAMETER
전달된 HwDeviceExtensionNULL입니다.
STOR_STATUS_INVALID_IRQL
잘못된 IRQL에서 호출이 이루어졌습니다.
STOR_STATUS_INSUFFICIENT_RESOURCES
시스템에 전송에 사용할 수 있는 맵 레지스터가 부족합니다.
STOR_STATUS_BUFFER_TOO_SMALL
Length 매개 변수가 너무 커서 버퍼 내에 맞지 않습니다.

설명

미니포트 드라이버는 StorPortPutScatterGatherList 를 호출하여 분산/수집 목록을 생성하는 동안 StorPortBuildScatterGatherList 가 할당한 리소스를 해제합니다.

미니포트 드라이버는 분산/수집 목록에 할당된 메모리를 해제하거나 재사용하기 전에 StorPortPutScatterGatherList 를 호출해야 합니다.

참고StorPortBuildScatterGatherList 가 STOR_STATUS_SUCCESS 반환하는 경우 ExecutionRoutine 의 콜백은 분산/수집 목록을 만든 후 실행하기 위해 성공적으로 큐에 대기되었습니다. 미니포트는 ExecutionRoutine 이 호출되었거나 StorPortBuildScatterGatherList 가 반환되면 분산/수집 목록이 준비되었다고 가정해서는 안 됩니다. 필요한 경우 미니포트는 StorPortBuildScatterGatherList 다음 코드 실행을 ExecutionRoutine 의 콜백과 동기화하여 분산/수집 목록을 사용할 수 있도록 할 수 있습니다.
 

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 storport.h(Storport.h 포함)
IRQL DISPATCH_LEVEL

추가 정보

STOR_SCATTER_GATHER_LIST

StorPortAllocatePool

StorPortPutScatterGatherList