Share via


PDX_TRANSFER funzione di callback (dxmini.h)

La funzione di callback DxTransfer informa il driver per il bus dei dati master da una superficie al buffer specificato nell'elenco dei descrittori di memoria (MDL).

Sintassi

PDX_TRANSFER PdxTransfer;

DWORD PdxTransfer(
  PVOID unnamedParam1,
  PDDTRANSFERININFO unnamedParam2,
  PDDTRANSFEROUTINFO unnamedParam3
)
{...}

Parametri

unnamedParam1

Punta all'estensione del dispositivo del driver miniport.

unnamedParam2

Punta a una struttura DDTRANSFERININFO che contiene le informazioni di trasferimento per la superficie.

unnamedParam3

Punta a una struttura DDTRANSFEROUTINFO che contiene la polarità del campo acquisito.

Valore restituito

DxTransfer restituisce DX_OK se ha esito positivo; in caso contrario, restituisce uno dei valori di errore seguenti:

Commenti

Il linguaggio MDL è definito nella documentazione di WDM .

Come illustrato nell'esempio di codice seguente, il driver miniport video può usare il puntatore al MDL nel membro lpDestMDL della struttura DDTRANSFERININFO nel parametro TransferInInfo per i dati master del bus nelle pagine di memoria fisica che costituiscono un buffer a dispersione:

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];
    }
}

Per altre informazioni, vedere le macro ADDRESS_AND_SIZE_TO_SPAN_PAGES, MmGetMdlByteCount, MmGetMdlPfnArray e MmGetMdlVirtualAddress in modalità kernel.

DxTransfer viene chiamato in fase di interruzione hardware. Ciò significa che il conducente non può attendere il completamento di un master bus precedente e non può chiamare funzioni che non sono sicure per chiamare in fase di interruzione (ovvero la maggior parte di esse).

Inoltre, il driver non deve interrompere la chiamata solo perché l'hardware è attualmente occupato. Al contrario, il driver deve gestire una coda interna.

Requisiti

   
Piattaforma di destinazione Desktop
Intestazione dxmini.h (include Dxmini.h)

Vedi anche

ADDRESS_AND_SIZE_TO_SPAN_PAGES

DDTRANSFERININFO

DDTRANSFEROUTINFO

MmGetMdlByteCount

MmGetMdlPfnArray

MmGetMdlVirtualAddress