다음을 통해 공유


PDX_TRANSFER 콜백 함수(dxmini.h)

DxTransfer 콜백 함수는 드라이버에 표면의 master 데이터를 MDL(메모리 설명자 목록)에 지정된 버퍼로 버스에 알립니다.

구문

PDX_TRANSFER PdxTransfer;

DWORD PdxTransfer(
  PVOID unnamedParam1,
  PDDTRANSFERININFO unnamedParam2,
  PDDTRANSFEROUTINFO unnamedParam3
)
{...}

매개 변수

unnamedParam1

미니포트 드라이버의 디바이스 확장을 가리킵니다.

unnamedParam2

표면에 대한 전송 정보를 포함하는 DDTRANSFERININFO 구조를 가리킵니다.

unnamedParam3

캡처되는 필드의 극성을 포함하는 DDTRANSFEROUTINFO 구조를 가리킵니다.

반환 값

DxTransfer는 성공하면 DX_OK 반환합니다. 그렇지 않으면 다음 오류 값 중 하나를 반환합니다.

설명

MDL은 WDM 설명서에 정의되어 있습니다.

다음 코드 샘플에 표시된 것처럼 비디오 미니포트 드라이버는 TransferInfo 매개 변수에서 DDTRANSFERINFO 구조체의 lpDestMDL 멤버에 있는 MDL에 대한 포인터를 사용하여 분산된 버퍼를 구성하는 물리적 메모리 페이지로 데이터를 버스 master 수 있습니다.

DWORD 
DxTransfer(
    DEVICE_EXT *pDeviceExt, 
    PDDTRANSFERININFO pTransferInInfo, 
    PDDTRANSFEROUTINFO pTransferOutInfo
    )
{
    PMDL pMdl;
    UINT uiNbPages;
    PPFN_NUMBER pPages;
    PVOID MappedSystemVa;
    ULONG ByteCount;

    pMdl = pTransferInInfo->lpDestMDL;
    MappedSystemVa = MmGetMdlVirtualAddress(pMdl);
    ByteCount = MmGetMdlByteCount(pMdl);
    uiNbPages = ADDRESS_AND_SIZE_TO_SPAN_PAGES(MappedSystemVa,
                                               ByteCount);
    pPages = MmGetMdlPfnArray(pMdl)
    for (i=0; i<uiNbPages; i++) {
        //
        // Transfer to page[i]
        //
        pPages[i];
    }
}

자세한 내용은 ADDRESS_AND_SIZE_TO_SPAN_PAGES, MmGetMdlByteCount, MmGetMdlPfnArrayMmGetMdlVirtualAddress 커널 모드 매크로를 참조하세요.

DxTransfer 는 하드웨어 인터럽트 시간에 호출됩니다. 즉, 드라이버는 이전 버스 master 완료될 때까지 기다릴 수 없으며 인터럽트 시 호출하기에 안전하지 않은 함수(대부분)를 호출할 수 없습니다.

또한 하드웨어가 현재 사용 중이기 때문에 드라이버가 호출에 실패하지 않아야 합니다. 대신 드라이버는 내부 큐를 유지 관리해야 합니다.

요구 사항

   
대상 플랫폼 데스크톱
머리글 dxmini.h(Dxmini.h 포함)

추가 정보

ADDRESS_AND_SIZE_TO_SPAN_PAGES

DDTRANSFERININFO

DDTRANSFEROUTINFO

MmGetMdlByteCount

MmGetMdlPfnArray

MmGetMdlVirtualAddress