PDX_TRANSFER função de retorno de chamada (dxmini.h)

A função de retorno de chamada DxTransfer informa o driver para barrar master dados de uma superfície para o buffer especificado na MDL (lista de descritores de memória).

Sintaxe

PDX_TRANSFER PdxTransfer;

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

Parâmetros

unnamedParam1

Aponta para a extensão de dispositivo do driver de miniport.

unnamedParam2

Aponta para uma estrutura DDTRANSFERININFO que contém as informações de transferência para a superfície.

unnamedParam3

Aponta para uma estrutura DDTRANSFEROUTINFO que contém a polaridade do campo que está sendo capturado.

Valor retornado

DxTransfer retornará DX_OK se for bem-sucedido; caso contrário, ele retornará um dos seguintes valores de erro:

Comentários

O MDL é definido na documentação do WDM .

Conforme mostrado no exemplo de código a seguir, o driver de miniporto de vídeo pode usar o ponteiro para o MDL no membro lpDestMDL da estrutura DDTRANSFERININFO no parâmetro TransferInInfo para barrar master dados para as páginas de memória física que compõem um buffer 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 as macros ADDRESS_AND_SIZE_TO_SPAN_PAGES, MmGetMdlByteCount, MmGetMdlPfnArray e MmGetMdlVirtualAddress no modo kernel para obter mais informações.

DxTransfer é chamado no momento da interrupção do hardware. Isso significa que o motorista não pode aguardar a conclusão de um master de ônibus anterior e não pode chamar nenhuma função que não seja segura para chamar no momento da interrupção (ou seja, a maioria delas).

Além disso, o driver não deve falhar na chamada apenas porque o hardware está ocupado no momento. Em vez disso, o driver deve manter uma fila interna.

Requisitos

   
Plataforma de Destino Área de Trabalho
Cabeçalho dxmini.h (inclua Dxmini.h)

Confira também

ADDRESS_AND_SIZE_TO_SPAN_PAGES

DDTRANSFERININFO

DDTRANSFEROUTINFO

MmGetMdlByteCount

MmGetMdlPfnArray

MmGetMdlVirtualAddress