PDX_TRANSFER función de devolución de llamada (dxmini.h)
La función de devolución de llamada DxTransfer informa al controlador de los datos maestros de bus de una superficie al búfer especificado en la lista de descriptores de memoria (MDL).
Sintaxis
PDX_TRANSFER PdxTransfer;
DWORD PdxTransfer(
PVOID unnamedParam1,
PDDTRANSFERININFO unnamedParam2,
PDDTRANSFEROUTINFO unnamedParam3
)
{...}
Parámetros
unnamedParam1
Apunta a la extensión del dispositivo del controlador de miniporte.
unnamedParam2
Apunta a una estructura DDTRANSFERININFO que contiene la información de transferencia de la superficie.
unnamedParam3
Apunta a una estructura DDTRANSFEROUTINFO que contiene la polaridad del campo que se captura.
Valor devuelto
DxTransfer devuelve DX_OK si se realiza correctamente; de lo contrario, devuelve uno de los siguientes valores de error:
Comentarios
MdL se define en la documentación de WDM .
Como se muestra en el ejemplo de código siguiente, el controlador de miniporte de vídeo puede usar el puntero al MDL en el miembro lpDestMDL de la estructura DDTRANSFERININFO en el parámetro TransferInInfo para buscar los datos maestros en las páginas de memoria física que componen un búfer disperso:
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];
}
}
Consulte las macros ADDRESS_AND_SIZE_TO_SPAN_PAGES, MmGetMdlByteCount, MmGetMdlPfnArray y MmGetMdlVirtualAddress para obtener más información.
DxTransfer se llama en tiempo de interrupción de hardware. Esto significa que el controlador no puede esperar a que se complete un maestro de bus anterior y no puede llamar a ninguna función que no sea segura para llamar en el momento de la interrupción (es decir, la mayoría de ellos).
Además, el controlador no debe producir un error en la llamada solo porque el hardware está ocupado actualmente. En su lugar, el controlador debe mantener una cola interna.
Requisitos
Plataforma de destino | Escritorio |
Encabezado | dxmini.h (include Dxmini.h) |