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