PDX_TRANSFER回调函数 (dxmini.h)

DxTransfer 回调函数通知驱动程序将主数据从图面总线到内存描述符列表中指定的缓冲区 (MDL) 。

语法

PDX_TRANSFER PdxTransfer;

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

参数

unnamedParam1

指向微型端口驱动程序的设备扩展。

unnamedParam2

指向包含图面传输信息的 DDTRANSFERINFO 结构。

unnamedParam3

指向包含所捕获字段极性的 DDTRANSFEROUTINFO 结构。

返回值

如果成功,DxTransfer 将返回DX_OK;否则,它将返回以下错误值之一:

备注

MDL 在 WDM 文档中定义。

如以下代码示例所示,视频微型端口驱动程序可以使用 TransferInInfo 参数中 DDTRANSFERINFO 结构的 lpDestMDL 成员的 MDL 的指针,将主数据总线到构成分散缓冲区的物理内存页:

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_PAGESMmGetMdlByteCountMmGetMdlPfnArrayMmGetMdlVirtualAddress 内核模式宏。

DxTransfer 在硬件中断时调用。 这意味着驱动程序无法等待以前的总线主机完成,并且无法调用任何在中断时调用不安全的函数 (即,其中大多数) 。

此外,驱动程序不应仅仅因为硬件当前正忙而使调用失败。 相反,驱动程序应维护内部队列。

要求

   
目标平台 桌面
标头 dxmini.h (包括 Dxmini.h)

请参阅

ADDRESS_AND_SIZE_TO_SPAN_PAGES

DDTRANSFERININFO

DDTRANSFEROUTINFO

MmGetMdlByteCount

MmGetMdlPfnArray

MmGetMdlVirtualAddress