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_PAGES、 MmGetMdlByteCount、 MmGetMdlPfnArray、 MmGetMdlVirtualAddress カーネル モード マクロ」を参照してください。
DxTransfer は、ハードウェア割り込み時に呼び出されます。 つまり、ドライバーは、以前のバス マスターが完了するのを待つことができず、割り込み時に呼び出しても安全でない関数 (つまり、そのほとんど) を呼び出すことはできません。
さらに、ハードウェアが現在ビジー状態になっているという理由だけで、ドライバーは呼び出しに失敗しないようにする必要があります。 代わりに、ドライバーは内部キューを維持する必要があります。
要件
対象プラットフォーム | デスクトップ |
Header | dxmini.h (Dxmini.h を含む) |