Partager via


PDX_TRANSFER fonction de rappel (dxmini.h)

La fonction de rappel DxTransfer informe le pilote qu’il doit bus master données d’une surface vers la mémoire tampon spécifiée dans la liste de descripteurs mémoire (MDL).

Syntaxe

PDX_TRANSFER PdxTransfer;

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

Paramètres

unnamedParam1

Pointe vers l’extension de périphérique du pilote miniport.

unnamedParam2

Pointe vers une structure DDTRANSFERININFO qui contient les informations de transfert pour la surface.

unnamedParam3

Pointe vers une structure DDTRANSFEROUTINFO qui contient la polarité du champ capturé.

Valeur retournée

DxTransfer retourne DX_OK si elle réussit ; sinon, elle retourne l’une des valeurs d’erreur suivantes :

Notes

La MDL est définie dans la documentation WDM .

Comme indiqué dans l’exemple de code suivant, le pilote de miniport vidéo peut utiliser le pointeur vers le MDL dans le membre lpDestMDL de la structure DDTRANSFERININFO au niveau du paramètre TransferInInfo pour buser master données vers les pages de mémoire physique qui composent une mémoire tampon éparse :

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];
    }
}

Pour plus d’informations, consultez les macros ADDRESS_AND_SIZE_TO_SPAN_PAGES, MmGetMdlByteCount, MmGetMdlPfnArray et MmGetMdlVirtualAddress .

DxTransfer est appelé au moment de l’interruption matérielle. Cela signifie que le pilote ne peut pas attendre la fin d’une master de bus précédente et qu’il ne peut appeler aucune fonction qui ne peut pas être appelée en toute sécurité au moment de l’interruption (c’est-à-dire, la plupart d’entre elles).

En outre, le pilote ne doit pas échouer l’appel simplement parce que le matériel est actuellement occupé. Au lieu de cela, le pilote doit gérer une file d’attente interne.

Spécifications

   
Plateforme cible Desktop (Expérience utilisateur)
En-tête dxmini.h (include Dxmini.h)

Voir aussi

ADDRESS_AND_SIZE_TO_SPAN_PAGES

DDTRANSFERININFO

DDTRANSFEROUTINFO

MmGetMdlByteCount

MmGetMdlPfnArray

MmGetMdlVirtualAddress