Freigeben über


WdfDmaEnablerGetFragmentLength-Funktion (wdfdmaenabler.h)

[Gilt nur für KMDF]

Die WdfDmaEnablerGetFragmentLength-Methode gibt die maximale Übertragungslänge zurück, die das Betriebssystem für eine einzelne DMA-Übertragung unterstützt.

Syntax

size_t WdfDmaEnablerGetFragmentLength(
  [in] WDFDMAENABLER     DmaEnabler,
  [in] WDF_DMA_DIRECTION DmaDirection
);

Parameter

[in] DmaEnabler

Ein Handle für ein DMA-Enabler-Objekt, das der Treiber aus einem vorherigen Aufruf von WdfDmaEnablerCreate abgerufen hat.

[in] DmaDirection

Ein WDF_DMA_DIRECTION typisierter Wert, der die Richtung des DMA-Übertragungsvorgangs angibt. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

Rückgabewert

WdfDmaEnablerGetFragmentLength gibt die maximale Länge einer DMA-Übertragung in Bytes zurück, die das Betriebssystem unterstützen kann, oder null, wenn der Wert des DmaDirection-Parameters ungültig ist.

Eine Fehlerüberprüfung tritt auf, wenn der Treiber ein ungültiges Objekthandle bereitstellt.

Hinweise

Die maximale DMA-Übertragungslänge, die vom Betriebssystem unterstützt werden kann, hängt von der Anzahl der verfügbaren Kartenregister ab . Wenn genügend Zuordnungsregister verfügbar sind, gibt WdfDmaEnablerGetFragmentLength denselben Wert zurück, den WdfDmaEnablerGetMaximumLength zurückgibt. Andernfalls ist der Von WdfDmaEnablerGetFragmentLength zurückgegebene Wert kleiner als der Wert, den WdfDmaEnablerGetMaximumLength zurückgibt.

Ihr Treiber kann die Anzahl der verfügbaren Kartenregister mithilfe des makros BYTE_TO_PAGES wie folgt bestimmen:

BYTE_TO_PAGES(WdfDmaEnablerGetFragmentLength()) + 1

Wenn Ihr Treiber beim Aufrufen von WdfDmaEnablerCreate ein Duplexprofil angegeben hat, muss der Wert des DmaDirection-ParametersWdfDmaDirectionReadFromDevice lauten , um die maximale Übertragungslänge für Lesevorgänge zu erhalten, und WdfDmaDirectionWriteToDevice , um die maximale Übertragungslänge für Schreibvorgänge zu erhalten. Wenn Ihr Treiber kein Duplexprofil angegeben hat, kann der Treiber entweder WdfDmaDirectionReadFromDevice oder WdfDmaDirectionWriteToDevice für DmaDirection angeben.

Beachten Sie, dass WdfDmaEnablerGetFragmentLength unterschiedliche Werte für die Lese- und Schreibanweisungen zurückgeben kann, die der DmaDirection-Parameter angibt, wenn das Gerät Ihres Treibers Duplexvorgänge unterstützt. Dieser Unterschied liegt daran, dass das Framework ein separates Adapterobjekt für jede Richtung erstellt, und das Betriebssystem kann eine andere Anzahl von Zuordnungsregistern für jedes Adapterobjekt bereitstellen.

Beispiele

Das folgende Codebeispiel bestimmt die Mindestanzahl von Kartenregistern, die zum Verarbeiten der Lesevorgänge eines NIC-Geräts erforderlich sind, berechnet die Anzahl der verfügbaren Kartenregister und meldet einen Fehler, wenn die Anzahl der zugeordneten Kartenregister nicht ausreicht.

ULONG  minimumMapRegisters;
ULONG  maxLengthSupported;
ULONG  mapRegistersAllocated;

miniMapRegisters = BYTES_TO_PAGES(NIC_MAX_PACKET_SIZE) + 1;

maxLengthSupported = 
    (ULONG) WdfDmaEnablerGetFragmentLength(
                                           FdoData->WdfDmaEnabler,
                                           WdfDmaDirectionReadFromDevice
                                           );

mapRegistersAllocated = BYTES_TO_PAGES(maxLengthSupported) + 1;

if (mapRegistersAllocated < minimumMapRegisters) {
    status = STATUS_INSUFFICIENT_RESOURCES;
    return status;
}

Anforderungen

Anforderung Wert
Zielplattform Universell
KMDF-Mindestversion 1.1
Kopfzeile wdfdmaenabler.h (einschließen von Wdf.h)
Bibliothek Wdf01000.sys (siehe Versionsverwaltung der Frameworkbibliothek).)
IRQL <=DISPATCH_LEVEL
DDI-Complianceregeln DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Weitere Informationen

WDF_DMA_DIRECTION

WdfDmaEnablerErstellen

WdfDmaEnablerGetMaximumLength