Compartir a través de


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)

Consulte también

ADDRESS_AND_SIZE_TO_SPAN_PAGES

DDTRANSFERININFO

DDTRANSFEROUTINFO

MmGetMdlByteCount

MmGetMdlPfnArray

MmGetMdlVirtualAddress