Freigeben über


Durchführen der Speichertreiberdatensatzverwaltung

Ab Windows 7 können Treiber Verwaltungsaktionen für das Dataset eines Geräts ausführen. Die Liste der DsM-Aktionen (Data Set Management ), die auf einem Speichergerät ausgeführt werden können, werden von Microsoft definiert.

Verwenden von IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES

Eine DEVICE_DSM_ACTION-Konstante gibt die Aktion an. Diese Konstante wird im Action-Member der DEVICE_DSM_INPUT-Struktur übergeben, die im Systempuffer einer IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES-Anforderung enthalten ist. Wenn die Aktion zusätzliche Parameter erfordert, folgt ein Parameterblock sofort der DEVICE_DSM_INPUT-Struktur, und ParameterBlockOffset gibt den Offset vom Anfang der DEVICE_DSM_INPUT-Struktur an, an der der Parameterblock beginnt. Datasetbereiche folgen ggf. unmittelbar dem Parameterblock, und DataSetRangesOffset gibt den Offset vom Anfang der DEVICE_DSM_INPUT Struktur an, an der die Bereiche beginnen. Die Systempufferstruktur ist im folgenden Diagramm dargestellt.

DSM IOCTL-Eingabepuffer.

Wenn die Verwaltungsaktion eine Ausgabe zurückgibt, wird im OutputBuffer der IOCTL ein Zeiger auf eine DEVICE_DSM_OUTPUT-Struktur übergeben. Wenn die Aktion eine zusätzliche aktionsspezifische Ausgabe zurückgibt, folgt ein Ausgabeblock sofort der DEVICE_DSM_OUTPUT-Struktur, und OutputBlockOffset gibt den Offset vom Anfang der DEVICE_DSM_OUTPUT-Struktur an, an der der Parameterblock beginnt. Die Struktur des Ausgabepuffers ist im folgenden Diagramm dargestellt.

DSM IOCTL-Ausgabepuffer.

Prozessablauf einer DSM-Aktion

Der Prozessablauf einer DSM-Aktion wird unten beschrieben, wobei Sender der Aktionsanforderungsgeber und Handler die angeforderte Aktion verarbeitet. Beachten Sie, dass mehrere Handler im Stapel vorhanden sein können.

DSM-Aktionsflow.

  1. Der Absender initialisiert den DSM und sendet ihn wie folgt an den ersten Handler im Stapel:

  2. Der Handler behandelt die DSM-IOCTL-Anforderung auf eine von drei Arten:

    1. Verarbeiten Sie die Anforderung, und geben Sie ggf. mit der Ausgabe zurück.
    2. Verarbeiten Sie die Anforderung, und leiten Sie sie an den nächstniedreren Treiber im Stapel weiter.
    3. Leiten Sie die Anforderung an den nächst niedrigeren Treiber im Stapel weiter, ohne den DSM zu behandeln.

    Hinweis

    Unabhängig davon, ob der Treiber den DSM verarbeitet, kann er die Anforderung nur dann sicher weiterleiten , wenn DEVICE_DSM_ACTION wichtigstes Bit (DeviceDsmActionFlag_NonDestructive) festgelegt ist. Wenn DeviceDsmActionFlag_NonDestructivenicht festgelegt ist, sollte der Treiber stattdessen mit einem Fehler zurückgeben.

    Wenn der Handler die DSM verarbeitet, führt er die folgenden Schritte aus:

    • Überprüfen Sie die Eingabe, indem Sie DeviceDsmValidateInput aufrufen.
    • Wenn die Eingabe gültig ist, extrahiert der Handler die Eingabe, um die Aktion abzurufen. Wenn die Aktion über einen Parameterblock verfügt, ruft der HandlerDeviceDsmParameterBlock auf, um den Parameterblock abzurufen. Wenn die Aktion Bereichsdaten enthält, ruft der HandlerDeviceDsmDataSetRanges auf, um einen Zeiger auf den Block von Datasetbereichen abzurufen, und führt dann die normale Verarbeitung für den Block aus. Dieser Block befindet sich unter DataSetRangesOffset und besteht aus einem oder mehreren zusammenhängenden Einträgen, die als DEVICE_DSM_RANGE-Strukturen formatiert sind. Die Länge der Datasetbereiche in Bytes wird im DataSetRangesLength-Element von DEVICE_DSM_INPUT festgelegt.
    • Wenn die Aktion eine Ausgabe erfordert, ruft der HandlerDeviceDsmValidateOutputLength auf, um den vom Absender bereitgestellten Ausgabepuffer zu überprüfen. Falls gültig, initialisiert der Handler den DEVICE_DSM_OUTPUT Teil des Ausgabepuffers durch Aufruf von DeviceDsmInitializeOutput und füllt den Ausgabeblock ggf. mit einer aktionsspezifischen Ausgabe auf. Der Handler schließt dann die IOCTL ab und gibt die IOCTL entweder zurück oder leitet sie an den nächsten Treiber im Stapel weiter.
  3. Nachdem die DSM verarbeitet und an den Absender zurückgegeben wurde, überprüft der Absender die Ausgabe, falls vorhanden, durch Aufrufen von DeviceDsmValidateOutput. Wenn die Ausgabe gültig ist, extrahiert Sender den Ausgabeblock, falls vorhanden, durch Aufrufen von DeviceDsmOutputBlock.

Ausführliche Informationen zu jeder spezifischen DSM-Aktion finden Sie unter Beschreibungen der Geräte-DSM-Aktion.