PDX_TRANSFER fungsi panggilan balik (dxmini.h)
Fungsi panggilan balik DxTransfer menginformasikan data master driver ke bus dari permukaan ke buffer yang ditentukan dalam daftar deskriptor memori (MDL).
Sintaks
PDX_TRANSFER PdxTransfer;
DWORD PdxTransfer(
PVOID unnamedParam1,
PDDTRANSFERININFO unnamedParam2,
PDDTRANSFEROUTINFO unnamedParam3
)
{...}
Parameter
unnamedParam1
Menunjuk ke ekstensi perangkat driver miniport.
unnamedParam2
Menunjuk ke struktur DDTRANSFERININFO yang berisi informasi transfer untuk permukaan.
unnamedParam3
Menunjuk ke struktur DDTRANSFEROUTINFO yang berisi polaritas bidang yang ditangkap.
Menampilkan nilai
DxTransfer mengembalikan DX_OK jika berhasil; jika tidak, ia mengembalikan salah satu nilai kesalahan berikut:
Keterangan
MDL didefinisikan dalam dokumentasi WDM .
Seperti yang ditunjukkan dalam sampel kode berikut, driver miniport video dapat menggunakan penunjuk ke MDL di anggota lpDestMDL dari struktur DDTRANSFERININFO pada parameter TransferInInfo untuk data master bus ke halaman memori fisik yang membentuk buffer yang tersebar:
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];
}
}
Lihat makro mode kernel ADDRESS_AND_SIZE_TO_SPAN_PAGES, MmGetMdlByteCount, MmGetMdlPfnArray, dan MmGetMdlVirtualAddress untuk informasi selengkapnya.
DxTransfer dipanggil pada waktu interupsi perangkat keras. Ini berarti pengemudi tidak dapat menunggu master bus sebelumnya selesai dan tidak dapat memanggil fungsi apa pun yang tidak aman untuk dipanggil pada waktu interupsi (yaitu, sebagian besar dari mereka).
Selain itu, driver seharusnya tidak gagal panggilan hanya karena perangkat keras saat ini sibuk. Sebaliknya, driver harus mempertahankan antrean internal.
Persyaratan
Target Platform | Desktop |
Header | dxmini.h (termasuk Dxmini.h) |