共用方式為


PDX_TRANSFER回呼函式 (dxmini.h)

DxTransfer回呼函式會通知驅動程式將主要資料從表面匯流排到記憶體描述元清單中指定的緩衝區, (MDL) 。

語法

PDX_TRANSFER PdxTransfer;

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

參數

unnamedParam1

指向迷你埠驅動程式的裝置擴充功能。

unnamedParam2

指向包含表面傳輸資訊的 DDTRANSFERININFO 結構。

unnamedParam3

指向包含所擷取欄位極性的 DDTRANSFEROUTINFO 結構。

傳回值

如果成功,DxTransfer會傳回DX_OK;否則,它會傳回下列其中一個錯誤值:

備註

MDL 定義于 WDM 檔中。

如下列程式碼範例所示,視訊迷你埠驅動程式可以使用DDTRANSFERINININFO結構的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