次の方法で共有


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 ドキュメントで定義されています。

次のコード サンプルに示すように、ビデオ ミニポート ドライバーは、DDTRANSFERININFO 構造体の lpDestMDL メンバーの MDL へのポインターを TransferInInfo パラメーターで使用して、マスター データを分散バッファーを構成する物理メモリ ページにバスで移動できます。

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 は、ハードウェア割り込み時に呼び出されます。 つまり、ドライバーは、以前のバス マスターが完了するのを待つことができず、割り込み時に呼び出しても安全でない関数 (つまり、そのほとんど) を呼び出すことはできません。

さらに、ハードウェアが現在ビジー状態になっているという理由だけで、ドライバーは呼び出しに失敗しないようにする必要があります。 代わりに、ドライバーは内部キューを維持する必要があります。

要件

   
対象プラットフォーム デスクトップ
Header dxmini.h (Dxmini.h を含む)

関連項目

ADDRESS_AND_SIZE_TO_SPAN_PAGES

DDTRANSFERININFO

DDTRANSFEROUTINFO

MmGetMdlByteCount

MmGetMdlPfnArray

MmGetMdlVirtualAddress