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.
Wenn Sie einen UMDF-Treiber schreiben, können Sie Einstellungen für die Pufferzugriffsmethode angeben, die das Framework für Lese- und Schreibanforderungen sowie Geräte-E/A-Steuerungsanforderungen verwendet. Die Werte, die ein UMDF-Treiber bereitstellt, sind nur Einstellungen und sind nicht garantiert, dass sie vom Framework verwendet werden.
- Angeben einer bevorzugten Pufferzugriffsmethode
- Abrufen der Zugriffsmethode für eine E/A-Anforderung
- Konvertieren aus gepufferten E/A-Vorgängen oder direkten E/A-Vorgängen
Angeben einer bevorzugten Pufferzugriffsmethode
Ab UMDF Version 2.0 ruft ein UMDF-Treiber WdfDeviceInitSetIoTypeEx auf, um bevorzugte Zugriffsmethoden für Lese-/Schreibanforderungen und für Geräte-E/A-Steuerungsanforderungen zu registrieren.
Wenn der Treiber WdfDeviceInitSetIoTypeEx nicht aufruft, verwendet UMDF die gepufferte Methode für E/A-Anforderungen an dieses Gerät.
Das Framework verwendet die folgenden Regeln, um zu bestimmen, welche Zugriffsmethode verwendet werden soll:
Alle UMDF-Treiber in einem Treiberstapel müssen dieselbe Methode für den Zugriff auf die Puffer eines Geräts verwenden, und das Framework bevorzugt gepufferte E/A-Vorgänge.
Wenn UMDF feststellt, dass einige Treiber entweder gepufferte E/A oder direkte E/A für ein Gerät bevorzugen, während andere Treiber nur gepufferte E/A für das Gerät bevorzugen, verwendet UMDF gepufferte E/A für alle Treiber. Wenn einer oder mehrere Treiber eines Stapels nur gepufferte E/A-Vorgänge bevorzugen, während andere nur direkte E/A bevorzugen, protokolliert UMDF ein Ereignis im Systemereignisprotokoll und startet den Treiberstapel nicht.
Ihr Treiber kann WdfDeviceGetDeviceStackIoType aufrufen, um die Pufferzugriffsmethoden zu ermitteln, die UMDF den Lese-/Schreibanforderungen und E/A-Steuerelementanforderungen eines Geräts zugewiesen hat.
In einigen Fällen weist UMDF einem Gerät direkte E/A zu, verwendet jedoch für eine oder mehrere Anforderungen des Geräts gepufferte E/A-Vorgänge, um eine optimale Leistung zu erzielen. Beispielsweise verwendet UMDF gepufferte E/A für kleine Puffer, wenn die Daten schneller in den Puffer des Treibers kopiert werden können, als die Puffer für den direkten Zugriff zuordnen kann.
Optional kann Ihr Treiber einen DirectTransferThreshold-Wert bereitstellen, wenn er WdfDeviceInitSetIoTypeEx aufruft. Das Framework verwendet diesen Wert, um die kleinste Puffergröße zu bestimmen, für die das Framework direkte E/A verwendet. In der Regel müssen Sie diesen Wert nicht angeben, da das Framework Einstellungen verwendet, die die beste Leistung bieten.
UMDF verwendet direkte E/A nur für Pufferspeicher, der auf einer Speicherseitengrenze beginnt und endet. Wenn der Anfang oder das Ende eines Puffers nicht auf einer Seitengrenze liegt, verwendet UMDF gepufferte E/A-Vorgänge für diesen Teil des Puffers. Anders ausgedrückt: UMDF kann für eine große Datenübertragung, die aus mehreren E/A-Anforderungen besteht, sowohl gepufferte E/A- als auch direkte E/A-E/A-Vorgänge verwenden.
Für Geräte-E/A-Steuerungsanforderungen verwendet UMDF direkte E/A-Vorgänge nur, wenn der E/A-Steuerungscode (IOCTL) direkte E/A angibt, und nur dann, wenn alle UMDF-Treiber für dieses Gerät WdfDeviceInitSetIoTypeEx aufgerufen haben, um die direkte Zugriffsmethode anzugeben.
Abrufen der Zugriffsmethode für eine E/A-Anforderung
Treiber verwenden denselben Satz von Anforderungsobjektmethoden, um auf Datenpuffer zuzugreifen, unabhängig von der Pufferzugriffsmethode. Daher müssen die meisten Treiber in der Regel nicht wissen, ob UMDF gepufferte E/A- oder direkte E/A-Vorgänge für eine E/A-Anforderung verwendet.
In einigen Fällen können Sie die Leistung eines Treibers verbessern, wenn Sie die Zugriffsmethode für eine E/A-Anforderung kennen. Betrachten Sie beispielsweise ein Gerät mit hohem Durchsatz, das in der Regel direkte E/A verwendet. Wenn der Treiber eine E/A-Anforderung empfängt, kopiert er Daten aus dem freigegebenen Pufferspeicher zur Überprüfung in den lokalen Treiberspeicher.
Der Treiber erhält jedoch gelegentlich einen Puffer, der gepufferte E/A verwendet. Da der E/A-Manager diese Daten bereits in einen Zwischenpuffer kopiert hat, muss der Treiber die Parameter nicht lokal kopieren. Durch das Vermeiden des Kopiervorgangs verbessert der Treiber die Leistung.
Ein UMDF-Treiber ruft WdfRequestGetEffectiveIoType auf, um die Pufferzugriffsmethode einer E/A-Anforderung abzurufen. Wie oben beschrieben, kann sich der E/A-Typ für eine bestimmte Anforderung von den vom Framework zugewiesenen E/A-Typeinstellungen für ein Gerät unterscheiden.
Konvertieren aus gepufferten E/A-Vorgängen oder direkten E/A-Vorgängen
Ein UMDF-Treiber kann die Methode "weder" verwenden.
Die Definitionen einiger Geräte-E/A-Steuerungscodes (IOCTLs) geben jedoch an, dass die Anforderungen die Methode "weder" verwenden. Optional kann ein UMDF-Treiber die Pufferzugriffsmethode solcher Geräte-E/A-Steuerungsanforderungen in gepufferte E/A- oder direkte E/A-Vorgänge konvertieren. Führen Sie die folgenden Schritte durch:
Schließen Sie die UmdfMethodNeitherAction-Direktive in einen INF DDInstall-Abschnitt der INF-Datei Ihres Treibers ein. Sie können den Wert der Direktive festlegen, um anzugeben, dass UMDF Geräte-E/A-Steuerungsanforderungen, die die Zugriffsmethode "weder" verwenden, an den Treiber übergeben soll. (Andernfalls schließt UMDF diese E/A-Anforderungen mit einem Fehler status Wert ab.)
Greifen Sie auf die Puffer der E/A-Anforderung zu, indem Sie die Objektmethoden verwenden, die UMDF für gepufferte E/A-Vorgänge oder direkte E/A bereitstellt.
Sie sollten die Unterstützung von IOCTL-Anforderungen aktivieren, die die Methode "weder" verwenden, wenn Sie sicher sind, dass UMDF die Zugriffsmethode in gepufferte E/A- oder direkte E/A-Vorgänge konvertieren kann. Wenn die IOCTL beispielsweise eine benutzerdefinierte Anforderung angibt, die nicht den Unter Pufferbeschreibungen für E/A-Steuercodes beschriebenen Pufferspezifikationsregeln entspricht, kann UMDF die Puffer nicht konvertieren.