PCALCULATE_SCATTER_GATHER_LIST_SIZE 콜백 함수(wdm.h)

CalculateScatterGatherList 루틴은 지정된 버퍼를 보유하는 데 필요한 분산/수집 목록의 크기(바이트)를 계산합니다.

구문

PCALCULATE_SCATTER_GATHER_LIST_SIZE PcalculateScatterGatherListSize;

NTSTATUS PcalculateScatterGatherListSize(
  [in]            PDMA_ADAPTER DmaAdapter,
  [in, optional]  PMDL Mdl,
  [in]            PVOID CurrentVa,
  [in]            ULONG Length,
  [out]           PULONG ScatterGatherListSize,
  [out, optional] PULONG pNumberOfMapRegisters
)
{...}

매개 변수

[in] DmaAdapter

버스 master 어댑터 또는 DMA 컨트롤러를 나타내는 IoGetDmaAdapter에서 반환된 DMA_ADAPTER 구조체에 대한 포인터입니다.

[in, optional] Mdl

NULL 또는 버퍼를 포함하는 MDL에 대한 포인터입니다.

[in] CurrentVa

버퍼 시작의 가상 주소에 대한 포인터입니다.

[in] Length

버퍼의 길이(바이트)를 지정합니다.

[out] ScatterGatherListSize

루틴이 분산/수집 목록의 크기를 바이트 단위로 반환하는 데 사용하는 변수에 대한 포인터입니다.

[out, optional] pNumberOfMapRegisters

버퍼의 DMA 작업에 필요한 맵 레지스터 수를 반환하기 위해 루틴이 사용하는 변수에 대한 NULL 또는 포인터입니다.

반환 값

CalculateScatterGatherList는 다음 상태 코드 중 하나를 반환합니다.

반환 코드 설명
STATUS_SUCCESS
ScatterGatherListSizeNumberOfMapRegisters에 반환된 값은 유효합니다.
STATUS_INSUFFICIENT_RESOURCES
필요한 지도 레지스터 수가 사용 가능한 지도 레지스터 수를 초과합니다.
STATUS_BUFFER_TOO_SMALL
지정한 길이 가 너무 커서 버퍼 내에 맞지 않습니다.

설명

CalculateScatterGatherList 는 이름으로 직접 호출할 수 있는 시스템 루틴이 아닙니다. 이 루틴은 DMA_OPERATIONS 구조에서 반환된 주소의 포인터로만 호출할 수 있습니다. 드라이버는 DeviceDescription 매개 변수의 Version 멤버가 DEVICE_DESCRIPTION_VERSION2 설정된 IoGetDmaAdapter를 호출하여 이 루틴의 주소를 가져옵니다. IoGetDmaAdapterNULL을 반환하는 경우 플랫폼에서 루틴을 사용할 수 없습니다.

호출자가 Mdl 매개 변수에 대해 NULL을 전달하는 경우 루틴은 지정된 버퍼에 대한 분산/수집 목록을 보유하는 데 필요한 최대 크기를 계산합니다. 호출자가 Mdl 매개 변수에 버퍼를 포함하는 MDL을 지정하는 경우 루틴은 분산/수집 목록을 보유하는 데 필요한 실제 크기를 계산합니다.

드라이버는 CalculateScatterGatherList 를 사용하여 BuildScatterGatherList에 전달할 분산/수집 목록 버퍼를 할당합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP 이상 버전의 Windows에서 사용할 수 있습니다.
대상 플랫폼 데스크톱
머리글 wdm.h(Wdm.h 포함)
IRQL 모든 수준

추가 정보

BuildScatterGatherList

DEVICE_DESCRIPTION

DMA_ADAPTER

DMA_OPERATIONS

IoGetDmaAdapter

SCATTER_GATHER_LIST