Erstellen von ausgelagertem Code in einem KMDF-Treiber

Auslagerungscode ist Code, der in die Auslagerungsdatei des Computers geschrieben werden kann, wenn der Code nicht verwendet wird. Sie können einen Teil Ihres Treibers auslagerbar machen, um das Ladeimage und die anfängliche Ladezeit zu reduzieren und den Code Ihres Treibers zu reduzieren, der den begrenzten Arbeitsspeicherpool des Computers verwendet.

Gehen Sie wie folgt vor, um festzustellen, ob ausgelagerter Code oder Daten für Ihren Treiber geeignet sind:

  1. Identifizieren Sie auslagerungsfähige Abschnitte in Ihrem Treiber.

    Auslagerungsabschnitte werden erst in den Arbeitsspeicher geladen, wenn sie benötigt werden. Informationen zum Erstellen von ausgelagerten Abschnitten in einem Treiber finden Sie unter Auslagerung von Treibern.

  2. Stellen Sie sicher, dass ausgelagerter Treibercode nicht die Fähigkeit eines Computers beeinträchtigt, schnell aus einem Energiesparzustand zu erwachen.

    Alle Geräteobjektrückruffunktionen, die Treiber bereitstellen, werden unter IRQL = PASSIVE_LEVEL aufgerufen, wodurch Sie ihren Code auswertbar machen können (wie unter Making Drivers Pageable beschrieben).

    Sie sollten jedoch den Code einer Rückruffunktion nicht auswertbar machen, wenn das Framework die Rückruffunktion aufruft, wenn das Gerät einen Low-Power-Zustand verlässt und in seinen Arbeitszustand (D0) zurückkehrt.

    Wenn dieser Code ausgelagert werden kann, wird der Code möglicherweise in die Auslagerungsdatei geschrieben, bevor der Computer in den Ruhezustand wechselt. Daher wird der Computer langsamer aktiviert, da Ihr Code nicht erneut geladen werden kann (und ihr Gerät daher nicht vollständig betriebsbereit sein kann), bis die Stromversorgung des Auslagerungsdatenträgers wiederhergestellt ist.

    Aus diesem Grund sollten die Rückruffunktionen, die im Thema A Device Returns to Its Working State aufgeführt sind, nicht ausgelagert werden können.

  3. Ermitteln Sie, ob Ihr Treiber bei Energieübergängen Zugriff auf auslagerungsfähige Daten außerhalb des Treibers benötigt, z. B. Dateien, die Registrierung oder den ausgelagerten Pool.

    Informationen zum Aktivieren und Deaktivieren der Fähigkeit eines Treibers, während des Energieübergangs auf ausgelagerte Daten zuzugreifen, finden Sie unter WdfDeviceInitSetPowerPageable und WdfDeviceInitSetPowerNotPageable.

    Informationen dazu, wie Sie ermitteln können, wann sich Ihr Treiber in einem nicht ausstellbaren Zustand befindet, finden Sie unter WdfDevStateIsNP.