ホーム › Graphics.DirectDraw › PDX_TRANSFER
PDX_TRANSFER
コールバックシグネチャ
DWORD PDX_TRANSFER(
void* param0,
DDTRANSFERININFO* param1,
DDTRANSFEROUTINFO* param2
);パラメーター
| フィールド | 型 | 説明 |
|---|---|---|
| param0 | void* | ミニポートドライバーのデバイス拡張へのポインターです。 |
| param1 | DDTRANSFERININFO* | サーフェスの転送情報が格納された DDTRANSFERININFO 構造体へのポインターです。 |
| param2 | DDTRANSFEROUTINFO* | キャプチャされるフィールドの極性が格納された DDTRANSFEROUTINFO 構造体へのポインターです。 |
公式ドキュメント
DxTransfer コールバック関数は、サーフェスからメモリ記述子リスト (MDL) で指定されたバッファーへ、データをバスマスター転送するようドライバーに通知します。
戻り値
DxTransfer は、成功した場合に DX_OK を返します。失敗した場合は、次のいずれかのエラー値を返します:
解説(Remarks)
MDL は WDM のドキュメントで定義されています。
次のコード例に示すように、ビデオミニポートドライバーは、TransferInInfo パラメーターで渡される DDTRANSFERININFO 構造体の 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_PAGES、MmGetMdlByteCount、MmGetMdlPfnArray、MmGetMdlVirtualAddress を参照してください。
DxTransfer はハードウェア割り込み時に呼び出されます。そのため、ドライバーは直前のバスマスター転送の完了を待つことができず、割り込み時に呼び出しても安全でない関数 (つまりほとんどの関数) を呼び出すこともできません。
さらに、ハードウェアが現在ビジーであるという理由だけで、ドライバーがこの呼び出しを失敗させるべきではありません。代わりに、ドライバーは内部キューを管理する必要があります。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)