Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
[Gilt nur für KMDF]
Die WdfDmaEnablerGetFragmentLength Methode gibt die maximale Übertragungslänge zurück, die das Betriebssystem für eine einzelne DMA-Übertragungunterstützt.
Syntax
size_t WdfDmaEnablerGetFragmentLength(
[in] WDFDMAENABLER DmaEnabler,
[in] WDF_DMA_DIRECTION DmaDirection
);
Die Parameter
[in] DmaEnabler
Ein Handle für ein DMA-Enabler-Objekt, das der Treiber aus einem vorherigen Aufruf von WdfDmaEnablerCreateabgerufen hat.
[in] DmaDirection
Ein WDF_DMA_DIRECTION-typed-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 Byte zurück, die das Betriebssystem unterstützen kann, oder null, wenn der Wert des DmaDirection- Parameters ungültig ist.
Wenn der Treiber ein ungültiges Objekthandle bereitstellt, tritt eine Fehlerüberprüfung auf.
Bemerkungen
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 Kartenregister verfügbar sind, gibt WdfDmaEnablerGetFragmentLength- denselben Wert zurück, der WdfDmaEnablerGetMaximumLength zurückgibt. Andernfalls ist der Wert, der WdfDmaEnablerGetFragmentLength zurückgibt, kleiner als der Wert, der WdfDmaEnablerGetMaximumLength zurückgibt.
Ihr Treiber kann die Anzahl der verfügbaren Kartenregister mithilfe des BYTE_TO_PAGES Makros wie folgt ermitteln:
BYTE_TO_PAGES(WdfDmaEnablerGetFragmentLength()) + 1
Wenn ihr Treiber beim Aufrufen WdfDmaEnablerCreateein Duplexprofil angegeben hat, muss der Wert des DmaDirection Parameters WdfDmaDirectionReadFromDevice sein, um die maximale Übertragungslänge für Lesevorgänge abzurufen und WdfDmaDirectionWriteToDevice, um die maximale Übertragungslänge für Schreibvorgänge abzurufen. 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 Schreibrichtung zurückgeben können, die der DmaDirection Parameter angibt. Dieser Unterschied besteht darin, dass das Framework ein separates Adapterobjekt für jede Richtung erstellt, und das Betriebssystem stellt möglicherweise eine andere Anzahl von Kartenregistern für jedes Adapterobjekt bereit.
Beispiele
Im folgenden Codebeispiel wird die Mindestanzahl der Kartenregister ermittelt, die für die Behandlung der Lesevorgänge eines NIC-Geräts erforderlich sind, die Anzahl der verfügbaren Kartenregister berechnet und ein Fehler meldet, 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 |
| Minimale KMDF-Version | 1.1 |
| Kopfzeile | wdfdmaenabler.h (include Wdf.h) |
| Bibliothek | Wdf01000.sys (siehe Framework-Bibliotheksversionsverwaltung.) |
| IRQL | <=DISPATCH_LEVEL |
| DDI-Complianceregeln | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |