Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
[Alleen van toepassing op KMDF]
Voordat uw stuurprogramma een I/O-aanvraag naar een DMA-apparaat kan verzenden, moet het stuurprogramma:
Roep WdfDmaTransactionCreate aan om een DMA-transactieobject voor de aanvraag te maken.
Roep WdfDmaTransactionInitializeUsingRequest, WdfDmaTransactionInitializeof WdfDmaTransactionInitializeUsingOffset om het transactieobject te initialiseren.
Normaal gesproken maakt uw stuurprogramma een DMA-transactie omdat een aanvraaghandler een frameworkaanvraagobject heeft ontvangen en de aanvraag moet doorgeven aan de hardware. In dit geval moet het stuurprogramma WdfDmaTransactionInitializeUsingRequestaanroepen. Hiermee wordt een aanvraagobjectgreep geaccepteerd als invoer en worden de adresparameters van de aanvraag uit het aanvraagobject geëxtraheerd.
Als uw stuurprogramma een DMA-transactie moet maken die niet op basis van een frameworkaanvraagobject dat het stuurprogramma heeft ontvangen, kan het stuurprogramma WdfDmaTransactionInitialize of WdfDmaTransactionInitializeUsingOffsetaanroepen. Beide methoden accepteren adresparameters die het stuurprogramma biedt.
Alle drie de initialisatiemethoden vereisen het adres van een EvtProgramDma functie voor gebeurtenisaanroep als invoerparameter. Deze callback-functie programmeert het apparaat en het framework roept de callback-functie aan elke keer wanneer een DMA-overdracht beschikbaar is.
Wanneer uw stuurprogramma WdfDmaEnablerCreate- aanroept om een DMA enabler-object te maken, levert het stuurprogramma een WDF_DMA_ENABLER_CONFIG structuur die de maximale overdrachtlengte van het apparaat bevat. Het framework gebruikt deze waarde als de standaard maximumlengte voor alle DMA-overdrachten.
Voor sommige typen DMA-transacties moet u mogelijk een maximale overdrachtslengte opgeven die verschilt van de standaard maximumlengte van het apparaat. U kunt WdfDmaTransactionSetMaximumLength gebruiken om een maximale overdrachtlengte voor een afzonderlijke transactie in te stellen. Het framework maakt alleen gebruik van de opgegeven maximale overdrachtlengte terwijl de opgegeven transactie wordt verwerkt.
Houd er rekening mee dat de maximale overdrachtlengte wordt beperkt door het aantal kaartregisters dat het besturingssysteem beschikbaar maakt voor het DMA enabler-object. Om de maximale overdrachtslengte te bepalen die beschikbaar is, kan uw stuurprogramma WdfDmaEnablerGetFragmentLengthaanroepen. Als de waarde die WdfDmaEnablerGetFragmentLength retourneert, kleiner is dan de maximale overdrachtlengte die het stuurprogramma heeft geleverd aan WdfDmaEnablerCreate, gebruikt het framework de kleinere waarde.
Nadat uw stuurprogramma een DMA-transactie heeft gemaakt en geïnitialiseerd, moet het stuurprogramma de transactie starten.