Bagikan melalui


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)

Lihat juga

ADDRESS_AND_SIZE_TO_SPAN_PAGES

DDTRANSFERININFO

DDTRANSFEROUTINFO

MmGetMdlByteCount

MmGetMdlPfnArray

MmGetMdlVirtualAddress