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) |