PGET_DMA_TRANSFER_INFO 콜백 함수(wdm.h)
GetDmaTransferInfo 루틴은 분산/수집 DMA 전송에 대한 할당 요구 사항을 계산합니다.
통사론
PGET_DMA_TRANSFER_INFO PgetDmaTransferInfo;
NTSTATUS PgetDmaTransferInfo(
[in] PDMA_ADAPTER DmaAdapter,
[in] PMDL Mdl,
[in] ULONGLONG Offset,
[in] ULONG Length,
[in] BOOLEAN WriteOnly,
[in, out] PDMA_TRANSFER_INFO TransferInfo
)
{...}
매개 변수
[in] DmaAdapter
DMA_ADAPTER 구조체에 대한 포인터입니다. 이 구조는 드라이버의 버스 마스터 DMA 디바이스 또는 시스템 DMA 채널을 나타내는 어댑터 개체입니다. 호출자는 IoGetDmaAdapter 루틴에 대한 이전 호출에서 이 포인터를 얻었습니다.
[in] Mdl
전송할 메모리 페이지를 설명하는 MDL 체인에 대한 포인터입니다. 자세한 내용은 설명 섹션을 참조하세요.
[in] Offset
분산/수집 DMA 전송의 시작 오프셋입니다. 이 매개 변수는 MDL 체인의 첫 번째 MDL에 있는 버퍼의 시작 부분부터 바이트 오프셋입니다. MDL 체인의 MDL이 총 N바이트의 버퍼 공간을 지정하는 경우 Offset 유효한 값은 0에서 N-1까지의 범위에 있습니다.
[in] Length
DMA 전송의 길이(바이트)입니다. MDL 체인이 총 N바이트의 버퍼 공간을 지정하는 경우 Length 유효한 값은 오프셋범위 1에서 N까지입니다.
[in] WriteOnly
전송이 쓰기 전용 작업(즉, 메모리에서 디바이스로 전송)인지 여부를 나타냅니다. writeOnly 경우 전송에 대해 반환된 정보가 읽기 트랜잭션에 유효하지 않을 수 있습니다. 이 매개 변수는 캐시 일관성을 적용하기 위해 버퍼 경계에서 추가 캐시 제어 작업이 필요함을 나타낼 수 있습니다.
[in, out] TransferInfo
호출자가 할당한 DMA_TRANSFER_INFO 구조체에 대한 포인터입니다. 호출자는 GetDmaTransferInfo호출하기 전에 구조체의 버전 멤버를 DMA_TRANSFER_INFO_VERSION1 설정해야 합니다.
반환 값
GetDmaTransferInfo 호출에 성공하면 STATUS_SUCCESS 반환합니다. 가능한 오류 반환 값에는 다음 상태 코드가 포함됩니다.
반환 코드 | 묘사 |
---|---|
|
루틴은 지정된 버전의 DMA_TRANSFER_INFO_XXX 구조체를 지원하지 않습니다. |
발언
GetDmaTransferInfo 이름으로 직접 호출할 수 있는 시스템 루틴이 아닙니다. 이 루틴은 DMA_OPERATIONS 구조에서 반환된 주소의 포인터로만 호출할 수 있습니다. 드라이버는 DEVICE_DESCRIPTION_VERSION3 설정된 DeviceDescription 매개 변수의 Version 멤버를 사용하여 IoGetDmaAdapter 호출하여 이 루틴의 주소를 가져옵니다. IoGetDmaAdapterNULL반환하는 경우 플랫폼에서 루틴을 사용할 수 없습니다.
GetDmaTransferInfo 사용하여 BuildScatterGatherListEx 및 MapTransferEx 루틴에 할당할 분산형/수집 버퍼의 크기를 계산합니다.
GetDmaTransferInfoCalculateScatterGatherList 루틴을 대체하며 BuildScatterGatherListEx사용하는 것이 더 편리합니다.
Mdl, Offset및 Length 매개 변수는 분산/수집 DMA 전송을 위한 버퍼로 사용할 실제 메모리 영역 컬렉션을 지정합니다. 각 실제 메모리 영역은 일반적으로 페이지 또는 페이지의 일부입니다. GetDmaTransferInfo 이 전송에 대한 할당 요구 사항을 결정합니다. 이러한 요구 사항에는 다음이 포함됩니다.
- 분산/수집 목록의 요소 수입니다. 각 요소는 물리적으로 연속된 메모리 블록을 설명하는 SCATTER_GATHER_ELEMENT 구조체입니다.
- 지정된 분산/수집 목록을 보관하기 위해 할당할 메모리 양입니다. (이 메모리 할당에는 I/O 버퍼를 설명하는 분산/수집 목록에 필요한 공간이 포함되지만 I/O 버퍼 자체에는 필요하지 않습니다.)
- 분산/수집 목록의 실제 주소를 논리 주소로 변환하는 데 필요한 지도 레지스터 수입니다.
MDL은 잠긴 연속된 가상 메모리 블록의 기반이 되는 실제 메모리 페이지를 설명합니다. 일반적으로 이러한 실제 메모리 페이지는 연속되지 않습니다. MDL 체인은 I/O 데이터를 버퍼링하는 데 사용할 수 있는 메모리를 설명하는 정렬된 MDL 컬렉션입니다. 일반적으로 체인의 MDL에서 설명하는 가상 메모리 영역은 연속되지 않습니다. MDL 및 MDL 체인에 대한 자세한 내용은 MDL 사용참조하세요.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 8부터 사용할 수 있습니다. |
대상 플랫폼 | 바탕 화면 |
헤더 | wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함) |
IRQL | <= DISPATCH_LEVEL |